Class: Fabricators::Proxy

Inherits:
Object
  • Object
show all
Includes:
Callbacks
Defined in:
lib/fabricators/proxy.rb

Instance Method Summary collapse

Methods included from Callbacks

#callbacks

Constructor Details

#initialize(fabricator, &block) ⇒ Proxy

Returns a new instance of Proxy.



5
6
7
8
9
# File 'lib/fabricators/proxy.rb', line 5

def initialize(fabricator, &block)
  @fabricator = fabricator
  @attributes = []
  instance_eval &block
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fabricators/proxy.rb', line 22

def method_missing(name, *args, &block)
  unless name == :fabricator
    options = args.extract_options!
    strategy = options.delete(:strategy) || :build
    if block_given?
      logic = block
    elsif fabricator = Fabricators.definitions.find(name, :fabricator) rescue nil
      logic = -> { fabricator.send(strategy, options) }
    elsif fabricator = Fabricators.definitions.find(name.to_s.singularize.to_sym, :fabricator) rescue nil
      logic = -> { fabricator.send(strategy, (args.first || 1), options) }
    elsif generator = Fabricators.definitions.find(name, :generator) rescue nil
      logic = -> { generator.generate }
    elsif args.any?
      logic = -> { args.first }
    end
    if defined? logic
      @attributes.send (block_given? ? :push : :unshift), name
      class_eval { define_method(name, logic) }
    end
  end
end

Instance Method Details

#attributesObject



11
12
13
14
15
16
17
18
19
20
# File 'lib/fabricators/proxy.rb', line 11

def attributes
  {}.tap do |hash|
    if @fabricator.parent
      hash.merge! @fabricator.parent.proxy.attributes
    end
    @attributes.each do |name|
      hash[name] = send(name)
    end
  end
end