/
definition.rb
49 lines (39 loc) · 975 Bytes
/
definition.rb
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module FactoryGirl
class Definition
attr_reader :callbacks, :defined_traits, :attribute_list
def initialize(name = nil)
@attribute_list = AttributeList.new(name)
@callbacks = []
@defined_traits = []
@to_create = nil
@traits = []
end
delegate :declare_attribute, :to => :attribute_list
def traits
@traits.reverse.map { |name| trait_by_name(name) }
end
def inherit_traits(new_traits)
@traits += new_traits
end
def add_callback(callback)
@callbacks << callback
end
def to_create(&block)
if block_given?
@to_create = block
else
@to_create
end
end
def define_trait(trait)
@defined_traits << trait
end
private
def trait_by_name(name)
trait_for(name) || FactoryGirl.trait_by_name(name)
end
def trait_for(name)
defined_traits.detect {|trait| trait.name == name }
end
end
end