Class: FactoryGirl::Factory

Inherits:
Object
  • Object
show all
Defined in:
lib/factory_girl/factory.rb

Defined Under Namespace

Classes: Runner

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Factory

:nodoc:



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/factory_girl/factory.rb', line 8

def initialize(name, options = {}) #:nodoc:
  assert_valid_options(options)
  @name             = name.is_a?(Symbol) ? name : name.to_s.underscore.to_sym
  @parent           = options[:parent]
  @aliases          = options[:aliases] || []
  @class_name       = options[:class]
  @default_strategy = options[:default_strategy]
  @definition       = Definition.new(@name)

  inherit_traits(options[:traits] || [])
end

Instance Attribute Details

#definitionObject (readonly)

:nodoc:



6
7
8
# File 'lib/factory_girl/factory.rb', line 6

def definition
  @definition
end

#nameObject (readonly)

:nodoc:



6
7
8
# File 'lib/factory_girl/factory.rb', line 6

def name
  @name
end

Instance Method Details

#associationsObject



54
55
56
# File 'lib/factory_girl/factory.rb', line 54

def associations
  attributes.select {|attribute| attribute.association? }
end

#build_classObject

:nodoc:



28
29
30
# File 'lib/factory_girl/factory.rb', line 28

def build_class #:nodoc:
  class_name.to_s.camelize.constantize
end

#compileObject



87
88
89
90
91
# File 'lib/factory_girl/factory.rb', line 87

def compile
  parent.defined_traits.each {|trait| define_trait(trait) }
  parent.compile
  @definition.compile
end

#default_strategyObject

:nodoc:



32
33
34
# File 'lib/factory_girl/factory.rb', line 32

def default_strategy #:nodoc:
  @default_strategy || parent.default_strategy || :create
end

#factory_nameObject



23
24
25
26
# File 'lib/factory_girl/factory.rb', line 23

def factory_name
  $stderr.puts "DEPRECATION WARNING: factory.factory_name is deprecated; use factory.name instead."
  name
end

#human_namesObject



50
51
52
# File 'lib/factory_girl/factory.rb', line 50

def human_names
  names.map {|name| name.to_s.humanize.downcase }
end

#namesObject

Names for this factory, including aliases.

Example:

factory :user, :aliases => [:author] do
  # ...
end

FactoryGirl.create(:author).class
# => User

Because an attribute defined without a value or block will build an association with the same name, this allows associations to be defined without factories, such as:

factory :user, :aliases => [:author] do
  # ...
end

factory :post do
  author
end

FactoryGirl.create(:post).author.class
# => User


83
84
85
# File 'lib/factory_girl/factory.rb', line 83

def names
  [name] + @aliases
end

#run(proxy_class, overrides, &block) ⇒ Object

:nodoc:



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/factory_girl/factory.rb', line 36

def run(proxy_class, overrides, &block) #:nodoc:
  runner_options = {
    :attributes  => attributes,
    :callbacks   => callbacks,
    :to_create   => to_create,
    :build_class => build_class,
    :proxy_class => proxy_class
  }

  result = Runner.new(runner_options).run(overrides)

  block ? block.call(result) : result
end

#with_traits(traits) ⇒ Object



93
94
95
96
97
# File 'lib/factory_girl/factory.rb', line 93

def with_traits(traits)
  self.clone.tap do |factory_with_traits|
    factory_with_traits.inherit_traits traits
  end
end