aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/module/setup.rb
blob: e6dfd0cf5675774c1101c99e103353c958340c2c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Module
  attr_accessor :_setup_block
  attr_accessor :_dependencies
  
  def setup(&blk)
    @_setup_block = blk
  end
  
  def use(mod)
    return if self < mod
    
    (mod._dependencies || []).each do |dep|
      use dep
    end
    # raise "Circular dependencies" if self < mod
    include mod
    extend mod.const_get("ClassMethods") if mod.const_defined?("ClassMethods")
    class_eval(&mod._setup_block) if mod._setup_block
  end
  
  def depends_on(mod)
    return if self < mod
    @_dependencies ||= []
    @_dependencies << mod
  end
end