factory_girl 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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