factory_girl 2.2.0 → 2.3.0

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.
Files changed (58) hide show
  1. data/.autotest +1 -1
  2. data/CONTRIBUTION_GUIDELINES.md +1 -1
  3. data/Changelog +16 -3
  4. data/GETTING_STARTED.md +22 -2
  5. data/Gemfile.lock +1 -1
  6. data/Rakefile +11 -15
  7. data/gemfiles/2.1.gemfile.lock +1 -1
  8. data/gemfiles/2.3.gemfile.lock +1 -1
  9. data/gemfiles/3.0.gemfile.lock +1 -1
  10. data/gemfiles/3.1.gemfile.lock +1 -1
  11. data/lib/factory_girl.rb +8 -3
  12. data/lib/factory_girl/attribute.rb +8 -0
  13. data/lib/factory_girl/attribute/dynamic.rb +1 -5
  14. data/lib/factory_girl/attribute/sequence.rb +1 -5
  15. data/lib/factory_girl/attribute/static.rb +1 -5
  16. data/lib/factory_girl/attribute_list.rb +18 -44
  17. data/lib/factory_girl/callback.rb +5 -0
  18. data/lib/factory_girl/declaration.rb +3 -0
  19. data/lib/factory_girl/declaration/association.rb +8 -0
  20. data/lib/factory_girl/declaration/dynamic.rb +9 -0
  21. data/lib/factory_girl/declaration/implicit.rb +11 -2
  22. data/lib/factory_girl/declaration/static.rb +9 -0
  23. data/lib/factory_girl/declaration_list.rb +48 -0
  24. data/lib/factory_girl/definition.rb +62 -0
  25. data/lib/factory_girl/definition_proxy.rb +11 -11
  26. data/lib/factory_girl/factory.rb +100 -111
  27. data/lib/factory_girl/null_factory.rb +15 -0
  28. data/lib/factory_girl/proxy.rb +14 -9
  29. data/lib/factory_girl/proxy/attributes_for.rb +2 -3
  30. data/lib/factory_girl/proxy/build.rb +12 -20
  31. data/lib/factory_girl/proxy/create.rb +0 -6
  32. data/lib/factory_girl/proxy/stub.rb +4 -10
  33. data/lib/factory_girl/registry.rb +4 -3
  34. data/lib/factory_girl/step_definitions.rb +1 -1
  35. data/lib/factory_girl/syntax/default.rb +3 -4
  36. data/lib/factory_girl/syntax/methods.rb +38 -16
  37. data/lib/factory_girl/trait.rb +13 -21
  38. data/lib/factory_girl/version.rb +1 -1
  39. data/spec/acceptance/modify_factories_spec.rb +1 -1
  40. data/spec/acceptance/traits_spec.rb +87 -1
  41. data/spec/factory_girl/attribute/dynamic_spec.rb +1 -1
  42. data/spec/factory_girl/attribute_list_spec.rb +9 -58
  43. data/spec/factory_girl/declaration_list_spec.rb +71 -0
  44. data/spec/factory_girl/definition_proxy_spec.rb +135 -139
  45. data/spec/factory_girl/definition_spec.rb +81 -0
  46. data/spec/factory_girl/factory_spec.rb +42 -17
  47. data/spec/factory_girl/null_factory_spec.rb +12 -0
  48. data/spec/factory_girl/proxy/build_spec.rb +1 -24
  49. data/spec/factory_girl/proxy/create_spec.rb +14 -11
  50. data/spec/factory_girl/proxy_spec.rb +23 -40
  51. data/spec/factory_girl/registry_spec.rb +4 -3
  52. data/spec/spec_helper.rb +2 -0
  53. data/spec/support/matchers/callback.rb +9 -0
  54. data/spec/support/matchers/declaration.rb +71 -0
  55. data/spec/support/matchers/delegate.rb +44 -0
  56. data/spec/support/matchers/trait.rb +9 -0
  57. data/spec/support/shared_examples/proxy.rb +4 -5
  58. metadata +191 -115
@@ -0,0 +1,44 @@
1
+ RSpec::Matchers.define :delegate do |delegated_method|
2
+ chain :to do |target_method|
3
+ @target_method = target_method
4
+ end
5
+
6
+ chain :as do |method_on_target|
7
+ @method_on_target = method_on_target
8
+ end
9
+
10
+ chain :with_arguments do |args|
11
+ @args = args
12
+ end
13
+
14
+ match do |instance|
15
+ extend Mocha::API
16
+
17
+ @instance = instance
18
+ @args ||= []
19
+ return_value = 'stubbed return value'
20
+ method_on_target = @method_on_target || delegated_method
21
+ stubbed_target = stub('stubbed_target', method_on_target => return_value)
22
+ @instance.stubs(@target_method => stubbed_target)
23
+ begin
24
+ @instance.send(delegated_method, *@args).should == return_value
25
+ rescue NoMethodError
26
+ false
27
+ end
28
+ end
29
+
30
+ failure_message do
31
+ if Class === @instance
32
+ message = "expected #{@instance.name} "
33
+ prefix = '.'
34
+ else
35
+ message = "expected #{@instance.class.name} "
36
+ prefix = '#'
37
+ end
38
+ message << "to delegate #{prefix}#{delegated_method} to #{prefix}#{@target_method}"
39
+ if @method_on_target
40
+ message << ".#{@method_on_target}"
41
+ end
42
+ message
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ RSpec::Matchers.define :have_trait do |trait_name|
2
+ match do |instance|
3
+ instance.defined_traits.include?(FactoryGirl::Trait.new(trait_name, &@block))
4
+ end
5
+
6
+ chain :with_block do |block|
7
+ @block = block
8
+ end
9
+ end
@@ -111,15 +111,14 @@ shared_examples_for "proxy with standard getters and setters" do |attribute, val
111
111
  end
112
112
 
113
113
  shared_examples_for "proxy with callbacks" do |callback_name|
114
- let(:callback) { stub("#{callback_name} callback", :foo => nil) }
114
+ let(:callback_instance) { stub("#{callback_name} callback", :foo => nil) }
115
+ let(:callback) { FactoryGirl::Callback.new(callback_name, proc { callback_instance.foo }) }
115
116
 
116
- before do
117
- subject.add_callback(FactoryGirl::Callback.new(callback_name, proc { callback.foo }))
118
- end
117
+ subject { described_class.new(proxy_class, [callback]) }
119
118
 
120
119
  it "runs the #{callback_name} callback" do
121
120
  subject.result(nil)
122
- callback.should have_received(:foo).once
121
+ callback_instance.should have_received(:foo).once
123
122
  end
124
123
 
125
124
  it "returns the proxy instance" do
metadata CHANGED
@@ -1,157 +1,208 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: factory_girl
3
- version: !ruby/object:Gem::Version
4
- version: 2.2.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
5
  prerelease:
6
+ segments:
7
+ - 2
8
+ - 3
9
+ - 0
10
+ version: 2.3.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Joe Ferris
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-10-14 00:00:00.000000000 -04:00
17
+
18
+ date: 2011-11-18 00:00:00 -05:00
13
19
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: activesupport
17
- requirement: &2152932580 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
18
25
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
23
33
  type: :runtime
24
- prerelease: false
25
- version_requirements: *2152932580
26
- - !ruby/object:Gem::Dependency
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
27
36
  name: rspec
28
- requirement: &2152931520 !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
29
39
  none: false
30
- requirements:
40
+ requirements:
31
41
  - - ~>
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 2
46
+ - 0
47
+ version: "2.0"
34
48
  type: :development
35
- prerelease: false
36
- version_requirements: *2152931520
37
- - !ruby/object:Gem::Dependency
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
38
51
  name: cucumber
39
- requirement: &2152928620 !ruby/object:Gem::Requirement
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
40
54
  none: false
41
- requirements:
55
+ requirements:
42
56
  - - ~>
43
- - !ruby/object:Gem::Version
57
+ - !ruby/object:Gem::Version
58
+ hash: 23
59
+ segments:
60
+ - 1
61
+ - 0
62
+ - 0
44
63
  version: 1.0.0
45
64
  type: :development
46
- prerelease: false
47
- version_requirements: *2152928620
48
- - !ruby/object:Gem::Dependency
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
49
67
  name: timecop
50
- requirement: &2152926840 !ruby/object:Gem::Requirement
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
51
70
  none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
56
78
  type: :development
57
- prerelease: false
58
- version_requirements: *2152926840
59
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
60
81
  name: rcov
61
- requirement: &2152922800 !ruby/object:Gem::Requirement
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
62
84
  none: false
63
- requirements:
64
- - - ! '>='
65
- - !ruby/object:Gem::Version
66
- version: '0'
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
67
92
  type: :development
68
- prerelease: false
69
- version_requirements: *2152922800
70
- - !ruby/object:Gem::Dependency
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
71
95
  name: aruba
72
- requirement: &2152916020 !ruby/object:Gem::Requirement
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
73
98
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
78
106
  type: :development
79
- prerelease: false
80
- version_requirements: *2152916020
81
- - !ruby/object:Gem::Dependency
107
+ version_requirements: *id006
108
+ - !ruby/object:Gem::Dependency
82
109
  name: mocha
83
- requirement: &2152910800 !ruby/object:Gem::Requirement
110
+ prerelease: false
111
+ requirement: &id007 !ruby/object:Gem::Requirement
84
112
  none: false
85
- requirements:
86
- - - ! '>='
87
- - !ruby/object:Gem::Version
88
- version: '0'
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ hash: 3
117
+ segments:
118
+ - 0
119
+ version: "0"
89
120
  type: :development
90
- prerelease: false
91
- version_requirements: *2152910800
92
- - !ruby/object:Gem::Dependency
121
+ version_requirements: *id007
122
+ - !ruby/object:Gem::Dependency
93
123
  name: bourne
94
- requirement: &2152908620 !ruby/object:Gem::Requirement
124
+ prerelease: false
125
+ requirement: &id008 !ruby/object:Gem::Requirement
95
126
  none: false
96
- requirements:
97
- - - ! '>='
98
- - !ruby/object:Gem::Version
99
- version: '0'
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ hash: 3
131
+ segments:
132
+ - 0
133
+ version: "0"
100
134
  type: :development
101
- prerelease: false
102
- version_requirements: *2152908620
103
- - !ruby/object:Gem::Dependency
135
+ version_requirements: *id008
136
+ - !ruby/object:Gem::Dependency
104
137
  name: appraisal
105
- requirement: &2152906500 !ruby/object:Gem::Requirement
138
+ prerelease: false
139
+ requirement: &id009 !ruby/object:Gem::Requirement
106
140
  none: false
107
- requirements:
141
+ requirements:
108
142
  - - ~>
109
- - !ruby/object:Gem::Version
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ - 3
148
+ - 8
110
149
  version: 0.3.8
111
150
  type: :development
112
- prerelease: false
113
- version_requirements: *2152906500
114
- - !ruby/object:Gem::Dependency
151
+ version_requirements: *id009
152
+ - !ruby/object:Gem::Dependency
115
153
  name: sqlite3-ruby
116
- requirement: &2152904880 !ruby/object:Gem::Requirement
154
+ prerelease: false
155
+ requirement: &id010 !ruby/object:Gem::Requirement
117
156
  none: false
118
- requirements:
119
- - - ! '>='
120
- - !ruby/object:Gem::Version
121
- version: '0'
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: 3
161
+ segments:
162
+ - 0
163
+ version: "0"
122
164
  type: :development
123
- prerelease: false
124
- version_requirements: *2152904880
125
- - !ruby/object:Gem::Dependency
165
+ version_requirements: *id010
166
+ - !ruby/object:Gem::Dependency
126
167
  name: yard
127
- requirement: &2152897180 !ruby/object:Gem::Requirement
168
+ prerelease: false
169
+ requirement: &id011 !ruby/object:Gem::Requirement
128
170
  none: false
129
- requirements:
130
- - - ! '>='
131
- - !ruby/object:Gem::Version
132
- version: '0'
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ hash: 3
175
+ segments:
176
+ - 0
177
+ version: "0"
133
178
  type: :development
134
- prerelease: false
135
- version_requirements: *2152897180
136
- - !ruby/object:Gem::Dependency
179
+ version_requirements: *id011
180
+ - !ruby/object:Gem::Dependency
137
181
  name: bluecloth
138
- requirement: &2152895440 !ruby/object:Gem::Requirement
182
+ prerelease: false
183
+ requirement: &id012 !ruby/object:Gem::Requirement
139
184
  none: false
140
- requirements:
141
- - - ! '>='
142
- - !ruby/object:Gem::Version
143
- version: '0'
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ hash: 3
189
+ segments:
190
+ - 0
191
+ version: "0"
144
192
  type: :development
145
- prerelease: false
146
- version_requirements: *2152895440
147
- description: ! "factory_girl provides a framework and DSL for defining and\n using
148
- factories - less error-prone, more explicit, and\n all-around
149
- easier to work with than fixtures."
193
+ version_requirements: *id012
194
+ description: |-
195
+ factory_girl provides a framework and DSL for defining and
196
+ using factories - less error-prone, more explicit, and
197
+ all-around easier to work with than fixtures.
150
198
  email: jferris@thoughtbot.com
151
199
  executables: []
200
+
152
201
  extensions: []
202
+
153
203
  extra_rdoc_files: []
154
- files:
204
+
205
+ files:
155
206
  - .autotest
156
207
  - .gitignore
157
208
  - .rspec
@@ -179,10 +230,13 @@ files:
179
230
  - lib/factory_girl/declaration/dynamic.rb
180
231
  - lib/factory_girl/declaration/implicit.rb
181
232
  - lib/factory_girl/declaration/static.rb
233
+ - lib/factory_girl/declaration_list.rb
234
+ - lib/factory_girl/definition.rb
182
235
  - lib/factory_girl/definition_proxy.rb
183
236
  - lib/factory_girl/deprecated.rb
184
237
  - lib/factory_girl/factory.rb
185
238
  - lib/factory_girl/find_definitions.rb
239
+ - lib/factory_girl/null_factory.rb
186
240
  - lib/factory_girl/proxy.rb
187
241
  - lib/factory_girl/proxy/attributes_for.rb
188
242
  - lib/factory_girl/proxy/build.rb
@@ -255,10 +309,13 @@ files:
255
309
  - spec/factory_girl/attribute_spec.rb
256
310
  - spec/factory_girl/callback_spec.rb
257
311
  - spec/factory_girl/declaration/implicit_spec.rb
312
+ - spec/factory_girl/declaration_list_spec.rb
258
313
  - spec/factory_girl/definition_proxy_spec.rb
314
+ - spec/factory_girl/definition_spec.rb
259
315
  - spec/factory_girl/deprecated_spec.rb
260
316
  - spec/factory_girl/factory_spec.rb
261
317
  - spec/factory_girl/find_definitions_spec.rb
318
+ - spec/factory_girl/null_factory_spec.rb
262
319
  - spec/factory_girl/proxy/attributes_for_spec.rb
263
320
  - spec/factory_girl/proxy/build_spec.rb
264
321
  - spec/factory_girl/proxy/create_spec.rb
@@ -269,34 +326,46 @@ files:
269
326
  - spec/factory_girl_spec.rb
270
327
  - spec/spec_helper.rb
271
328
  - spec/support/macros/define_constant.rb
329
+ - spec/support/matchers/callback.rb
330
+ - spec/support/matchers/declaration.rb
331
+ - spec/support/matchers/delegate.rb
332
+ - spec/support/matchers/trait.rb
272
333
  - spec/support/shared_examples/proxy.rb
273
334
  has_rdoc: true
274
335
  homepage: https://github.com/thoughtbot/factory_girl
275
336
  licenses: []
337
+
276
338
  post_install_message:
277
339
  rdoc_options: []
278
- require_paths:
340
+
341
+ require_paths:
279
342
  - lib
280
- required_ruby_version: !ruby/object:Gem::Requirement
343
+ required_ruby_version: !ruby/object:Gem::Requirement
281
344
  none: false
282
- requirements:
283
- - - ! '>='
284
- - !ruby/object:Gem::Version
285
- version: '0'
286
- required_rubygems_version: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ hash: 3
349
+ segments:
350
+ - 0
351
+ version: "0"
352
+ required_rubygems_version: !ruby/object:Gem::Requirement
287
353
  none: false
288
- requirements:
289
- - - ! '>='
290
- - !ruby/object:Gem::Version
291
- version: '0'
354
+ requirements:
355
+ - - ">="
356
+ - !ruby/object:Gem::Version
357
+ hash: 3
358
+ segments:
359
+ - 0
360
+ version: "0"
292
361
  requirements: []
362
+
293
363
  rubyforge_project:
294
364
  rubygems_version: 1.6.2
295
365
  signing_key:
296
366
  specification_version: 3
297
- summary: factory_girl provides a framework and DSL for defining and using model instance
298
- factories.
299
- test_files:
367
+ summary: factory_girl provides a framework and DSL for defining and using model instance factories.
368
+ test_files:
300
369
  - Appraisals
301
370
  - cucumber.yml
302
371
  - features/factory_girl_steps.feature
@@ -349,10 +418,13 @@ test_files:
349
418
  - spec/factory_girl/attribute_spec.rb
350
419
  - spec/factory_girl/callback_spec.rb
351
420
  - spec/factory_girl/declaration/implicit_spec.rb
421
+ - spec/factory_girl/declaration_list_spec.rb
352
422
  - spec/factory_girl/definition_proxy_spec.rb
423
+ - spec/factory_girl/definition_spec.rb
353
424
  - spec/factory_girl/deprecated_spec.rb
354
425
  - spec/factory_girl/factory_spec.rb
355
426
  - spec/factory_girl/find_definitions_spec.rb
427
+ - spec/factory_girl/null_factory_spec.rb
356
428
  - spec/factory_girl/proxy/attributes_for_spec.rb
357
429
  - spec/factory_girl/proxy/build_spec.rb
358
430
  - spec/factory_girl/proxy/create_spec.rb
@@ -363,4 +435,8 @@ test_files:
363
435
  - spec/factory_girl_spec.rb
364
436
  - spec/spec_helper.rb
365
437
  - spec/support/macros/define_constant.rb
438
+ - spec/support/matchers/callback.rb
439
+ - spec/support/matchers/declaration.rb
440
+ - spec/support/matchers/delegate.rb
441
+ - spec/support/matchers/trait.rb
366
442
  - spec/support/shared_examples/proxy.rb