factory_girl_kibiz0r 2.0.0.beta2 → 2.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/factory_girl.rb +0 -1
- data/lib/factory_girl/attribute/dynamic.rb +1 -2
- data/lib/factory_girl/attribute/static.rb +1 -2
- data/lib/factory_girl/factory.rb +14 -2
- data/lib/factory_girl/proxy.rb +25 -4
- data/lib/factory_girl/proxy/attributes_for.rb +2 -2
- data/lib/factory_girl/proxy/build.rb +3 -7
- data/lib/factory_girl/version.rb +1 -1
- data/spec/acceptance/attributes_for_spec.rb +6 -1
- data/spec/acceptance/callbacks_spec.rb +2 -2
- data/spec/factory_girl/factory_spec.rb +8 -0
- data/spec/factory_girl/proxy_spec.rb +25 -7
- metadata +11 -12
- data/lib/factory_girl/attribute/list.rb +0 -19
data/lib/factory_girl.rb
CHANGED
@@ -12,7 +12,6 @@ require 'factory_girl/attribute/association'
|
|
12
12
|
require 'factory_girl/attribute/callback'
|
13
13
|
require 'factory_girl/attribute/sequence'
|
14
14
|
require 'factory_girl/attribute/implicit'
|
15
|
-
require 'factory_girl/attribute/list'
|
16
15
|
require 'factory_girl/sequence'
|
17
16
|
require 'factory_girl/aliases'
|
18
17
|
require 'factory_girl/definition_proxy'
|
data/lib/factory_girl/factory.rb
CHANGED
@@ -36,7 +36,7 @@ module FactoryGirl
|
|
36
36
|
assert_valid_options(options)
|
37
37
|
@name = factory_name_for(name)
|
38
38
|
@options = options
|
39
|
-
@attributes =
|
39
|
+
@attributes = []
|
40
40
|
end
|
41
41
|
|
42
42
|
def inherit_from(parent) #:nodoc:
|
@@ -62,17 +62,21 @@ module FactoryGirl
|
|
62
62
|
raise AssociationDefinitionError, "Self-referencing association '#{name}' in factory '#{self.name}'"
|
63
63
|
end
|
64
64
|
@attributes << attribute
|
65
|
+
attribute
|
65
66
|
end
|
66
67
|
|
67
68
|
def add_callback(name, &block)
|
68
69
|
unless [:after_build, :after_create, :after_stub].include?(name.to_sym)
|
69
70
|
raise InvalidCallbackNameError, "#{name} is not a valid callback name. Valid callback names are :after_build, :after_create, and :after_stub"
|
70
71
|
end
|
71
|
-
|
72
|
+
attribute = Attribute::Callback.new(name.to_sym, block)
|
73
|
+
@attributes << attribute
|
74
|
+
attribute
|
72
75
|
end
|
73
76
|
|
74
77
|
def run(proxy_class, overrides) #:nodoc:
|
75
78
|
proxy = proxy_class.new(build_class)
|
79
|
+
proxy.ignored_attributes = ignored_attributes
|
76
80
|
overrides = symbolize_keys(overrides)
|
77
81
|
overrides.each {|attr, val| proxy.set(attr, val) }
|
78
82
|
passed_keys = overrides.keys.collect {|k| FactoryGirl.aliases_for(k) }.flatten
|
@@ -127,6 +131,14 @@ module FactoryGirl
|
|
127
131
|
|
128
132
|
private
|
129
133
|
|
134
|
+
def ignored_attributes
|
135
|
+
Hash[@attributes.select do |attribute|
|
136
|
+
attribute.ignored?
|
137
|
+
end.map do |attribute|
|
138
|
+
[attribute.name, nil]
|
139
|
+
end]
|
140
|
+
end
|
141
|
+
|
130
142
|
def class_for (class_or_to_s)
|
131
143
|
if class_or_to_s.respond_to?(:to_sym)
|
132
144
|
class_name = variable_name_to_class_name(class_or_to_s)
|
data/lib/factory_girl/proxy.rb
CHANGED
@@ -2,20 +2,31 @@ module FactoryGirl
|
|
2
2
|
class Proxy #:nodoc:
|
3
3
|
|
4
4
|
attr_reader :callbacks
|
5
|
+
attr_writer :ignored_attributes
|
5
6
|
|
6
7
|
def initialize(klass)
|
7
8
|
end
|
8
9
|
|
9
10
|
def get(attribute)
|
10
|
-
|
11
|
+
if ignored? attribute
|
12
|
+
ignored_attributes[attribute]
|
13
|
+
else
|
14
|
+
get_attr attribute
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_attr(attribute)
|
11
19
|
end
|
12
20
|
|
13
21
|
def set(attribute, value)
|
22
|
+
if ignored? attribute
|
23
|
+
ignored_attributes[attribute] = value
|
24
|
+
else
|
25
|
+
set_attr attribute, value
|
26
|
+
end
|
14
27
|
end
|
15
28
|
|
16
|
-
def
|
17
|
-
@ignored = {}
|
18
|
-
@ignored[attribute] = value
|
29
|
+
def set_attr(attribute, value)
|
19
30
|
end
|
20
31
|
|
21
32
|
def associate(name, factory, attributes)
|
@@ -83,5 +94,15 @@ module FactoryGirl
|
|
83
94
|
def result(to_create)
|
84
95
|
raise NotImplementedError, "Strategies must return a result"
|
85
96
|
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def ignored?(attribute)
|
101
|
+
ignored_attributes.has_key? attribute
|
102
|
+
end
|
103
|
+
|
104
|
+
def ignored_attributes
|
105
|
+
@ignored_attributes ||= {}
|
106
|
+
end
|
86
107
|
end
|
87
108
|
end
|
@@ -5,15 +5,11 @@ module FactoryGirl
|
|
5
5
|
@instance = klass.new
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
@instance.send(attribute)
|
11
|
-
else
|
12
|
-
super
|
13
|
-
end
|
8
|
+
def get_attr(attribute)
|
9
|
+
@instance.send(attribute)
|
14
10
|
end
|
15
11
|
|
16
|
-
def
|
12
|
+
def set_attr(attribute, value)
|
17
13
|
@instance.send(:"#{attribute}=", value)
|
18
14
|
end
|
19
15
|
|
data/lib/factory_girl/version.rb
CHANGED
@@ -23,11 +23,12 @@ describe "a generated attributes hash" do
|
|
23
23
|
body { "default body" }
|
24
24
|
summary { title }
|
25
25
|
user
|
26
|
+
uploaded_image(nil).ignore
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
subject { attributes_for(:post, :title => 'overridden title') }
|
31
|
+
subject { attributes_for(:post, :title => 'overridden title', :uploaded_image => "foo") }
|
31
32
|
|
32
33
|
it "assigns an overridden value" do
|
33
34
|
subject[:title].should == "overridden title"
|
@@ -44,5 +45,9 @@ describe "a generated attributes hash" do
|
|
44
45
|
it "doesn't assign associations" do
|
45
46
|
subject[:user_id].should be_nil
|
46
47
|
end
|
48
|
+
|
49
|
+
it "doesn't assign ignored attributes" do
|
50
|
+
subject[:uploaded_image].should be_nil
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
@@ -17,7 +17,7 @@ describe "callbacks" do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
factory :user_with_proxied_callbacks, :parent => :user_with_callbacks do |u|
|
20
|
-
u.proxified?(
|
20
|
+
u.proxified?(false).ignore
|
21
21
|
after_create { |user, proxy| user.last_name << ', Proxified' if proxy.proxified? }
|
22
22
|
end
|
23
23
|
end
|
@@ -46,7 +46,7 @@ describe "callbacks" do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "provides the proxy to callbacks that want it" do
|
49
|
-
user = FactoryGirl.create(:user_with_proxied_callbacks)
|
49
|
+
user = FactoryGirl.create(:user_with_proxied_callbacks, :proxified? => true)
|
50
50
|
user.first_name.should == 'Buildy'
|
51
51
|
user.last_name.should == 'Createy, Proxified'
|
52
52
|
end
|
@@ -53,6 +53,7 @@ describe FactoryGirl::Factory do
|
|
53
53
|
stub(@attribute).add_to
|
54
54
|
stub(@proxy).set
|
55
55
|
stub(@proxy).result { 'result' }
|
56
|
+
stub(@proxy).ignored_attributes = anything
|
56
57
|
stub(FactoryGirl::Attribute::Static).new { @attribute }
|
57
58
|
stub(FactoryGirl::Proxy::Build).new { @proxy }
|
58
59
|
|
@@ -69,6 +70,12 @@ describe FactoryGirl::Factory do
|
|
69
70
|
@factory.run(FactoryGirl::Proxy::Build, {})
|
70
71
|
end
|
71
72
|
|
73
|
+
it "should add the ignored attributes to the proxy by name when running" do
|
74
|
+
stub(@attribute).ignored? { true }
|
75
|
+
mock(@proxy).ignored_attributes = { :name => nil }
|
76
|
+
@factory.run(FactoryGirl::Proxy::Build, {})
|
77
|
+
end
|
78
|
+
|
72
79
|
it "should return the result from the proxy when running" do
|
73
80
|
mock(@proxy).result(nil) { 'result' }
|
74
81
|
@factory.run(FactoryGirl::Proxy::Build, {}).should == 'result'
|
@@ -79,6 +86,7 @@ describe FactoryGirl::Factory do
|
|
79
86
|
proxy = 'proxy'
|
80
87
|
stub(FactoryGirl::Proxy::Build).new { proxy }
|
81
88
|
stub(proxy).result {}
|
89
|
+
stub(proxy).ignored_attributes = anything
|
82
90
|
block = lambda {}
|
83
91
|
factory = FactoryGirl::Factory.new(:object)
|
84
92
|
factory.to_create(&block)
|
@@ -10,7 +10,7 @@ describe FactoryGirl::Proxy do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should return nil when asked for an attribute" do
|
13
|
-
@proxy.
|
13
|
+
@proxy.get_attr(:name).should be_nil
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should call get for a missing method" do
|
@@ -18,13 +18,31 @@ describe FactoryGirl::Proxy do
|
|
18
18
|
@proxy.name.should == "it's a name"
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
describe "with ignored attributes" do
|
22
|
+
before do
|
23
|
+
@proxy.ignored_attributes = {
|
24
|
+
:foo => "bar",
|
25
|
+
:baz => 8,
|
26
|
+
:nil_attr => nil
|
27
|
+
}
|
28
|
+
dont_allow(@proxy).get_attr
|
29
|
+
dont_allow(@proxy).set_attr
|
30
|
+
end
|
31
|
+
|
32
|
+
it "#set stores the value rather than calling #set_attr" do
|
33
|
+
@proxy.set(:baz, 5)
|
34
|
+
@proxy.get(:baz).should == 5
|
35
|
+
end
|
36
|
+
|
37
|
+
it "#get returns the stored value of the ignored attribute without calling #get_attr" do
|
38
|
+
@proxy.get(:foo).should == "bar"
|
39
|
+
end
|
24
40
|
|
25
|
-
|
26
|
-
|
27
|
-
|
41
|
+
it "recognizes nil as a valid value for an ignored attribute" do
|
42
|
+
@proxy.get(:nil_attr).should be_nil
|
43
|
+
@proxy.set(:baz, nil)
|
44
|
+
@proxy.get(:baz).should be_nil
|
45
|
+
end
|
28
46
|
end
|
29
47
|
|
30
48
|
it "should do nothing when asked to associate with another factory" do
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factory_girl_kibiz0r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 62196453
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
|
10
|
+
- beta
|
11
|
+
- 3
|
12
|
+
version: 2.0.0.beta3
|
12
13
|
platform: ruby
|
13
14
|
authors:
|
14
15
|
- Joe Ferris
|
@@ -16,8 +17,7 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2011-05-
|
20
|
-
default_executable:
|
20
|
+
date: 2011-05-26 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rcov
|
@@ -85,12 +85,13 @@ dependencies:
|
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
hash:
|
88
|
+
hash: 62196421
|
89
89
|
segments:
|
90
90
|
- 3
|
91
91
|
- 0
|
92
92
|
- 0
|
93
|
-
-
|
93
|
+
- beta
|
94
|
+
- 3
|
94
95
|
version: 3.0.0.beta3
|
95
96
|
type: :development
|
96
97
|
version_requirements: *id005
|
@@ -148,7 +149,6 @@ files:
|
|
148
149
|
- lib/factory_girl/attribute/callback.rb
|
149
150
|
- lib/factory_girl/attribute/dynamic.rb
|
150
151
|
- lib/factory_girl/attribute/implicit.rb
|
151
|
-
- lib/factory_girl/attribute/list.rb
|
152
152
|
- lib/factory_girl/attribute/sequence.rb
|
153
153
|
- lib/factory_girl/attribute/static.rb
|
154
154
|
- lib/factory_girl/attribute.rb
|
@@ -216,7 +216,6 @@ files:
|
|
216
216
|
- features/step_definitions/database_steps.rb
|
217
217
|
- features/support/env.rb
|
218
218
|
- features/support/factories.rb
|
219
|
-
has_rdoc: true
|
220
219
|
homepage: http://thoughtbot.com/projects/factory_girl
|
221
220
|
licenses: []
|
222
221
|
|
@@ -248,10 +247,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
247
|
requirements: []
|
249
248
|
|
250
249
|
rubyforge_project:
|
251
|
-
rubygems_version: 1.
|
250
|
+
rubygems_version: 1.8.4
|
252
251
|
signing_key:
|
253
252
|
specification_version: 3
|
254
|
-
summary: factory_girl provides a framework and DSL for defining and using model instance factories.
|
253
|
+
summary: factory_girl provides a framework and DSL for defining and using model instance factories.
|
255
254
|
test_files:
|
256
255
|
- spec/acceptance/attribute_aliases_spec.rb
|
257
256
|
- spec/acceptance/attributes_for_spec.rb
|