Class: FactoryGirl::Proxy

Inherits:
Object
  • Object
show all
Defined in:
lib/factory_girl/proxy.rb,
lib/factory_girl/proxy/stub.rb,
lib/factory_girl/proxy/build.rb,
lib/factory_girl/proxy/create.rb,
lib/factory_girl/proxy/attributes_for.rb

Overview

:nodoc:

Direct Known Subclasses

AttributesFor, Build, Stub

Defined Under Namespace

Classes: AttributesFor, Build, Create, ObjectWrapper, Stub

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, callbacks = []) ⇒ Proxy

Returns a new instance of Proxy.



9
10
11
12
# File 'lib/factory_girl/proxy.rb', line 9

def initialize(klass, callbacks = [])
  @callbacks = process_callbacks(callbacks)
  @proxy     = ObjectWrapper.new(klass)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object (private)



71
72
73
# File 'lib/factory_girl/proxy.rb', line 71

def method_missing(method, *args, &block)
  get(method)
end

Class Method Details

.ensure_strategy_exists!(strategy) ⇒ Object



63
64
65
66
67
# File 'lib/factory_girl/proxy.rb', line 63

def self.ensure_strategy_exists!(strategy)
  unless Proxy.const_defined? strategy.to_s.camelize
    raise ArgumentError, "Unknown strategy: #{strategy}"
  end
end

Instance Method Details

#association(name, overrides = {}) ⇒ Object

Generates an association using the current build strategy.

Arguments:

name: (Symbol)
  The name of the factory that should be used to generate this
  association.
attributes: (Hash)
  A hash of attributes that should be overridden for this association.

Returns:

The generated association for the current build strategy. Note that
associations are not generated for the attributes_for strategy. Returns
nil in this case.

Example:

factory :user do
  # ...
end

factory :post do
  # ...
  author { |post| post.association(:user, :name => 'Joe') }
end

# Builds (but doesn't save) a Post and a User
FactoryGirl.build(:post)

# Builds and saves a User, builds a Post, assigns the User to the
# author association, and saves the Post.
FactoryGirl.create(:post)


56
57
# File 'lib/factory_girl/proxy.rb', line 56

def association(name, overrides = {})
end

#result(to_create) ⇒ Object

Raises:

  • (NotImplementedError)


59
60
61
# File 'lib/factory_girl/proxy.rb', line 59

def result(to_create)
  raise NotImplementedError, "Strategies must return a result"
end

#run_callbacks(name) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/factory_girl/proxy.rb', line 16

def run_callbacks(name)
  if @callbacks[name]
    @callbacks[name].each do |callback|
      callback.run(result_instance, self)
    end
  end
end