fluent_fixtures 0.4.0 → 0.5.0.pre.20170515170202

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 04ae27c7451ece98c029d41e761a6cb221e5c8da
4
- data.tar.gz: f380b5322b4c13da8fb5a0f3ab8219002d18d3b9
2
+ SHA256:
3
+ metadata.gz: ebb817e0b2fc99aa884784742e8bb0deb77befcdaecf5683a08e8d696edb5192
4
+ data.tar.gz: 30eafd70938cfe9d9677b4f7a7847e8b00d8666eafdbbe9927dac1a568a1c120
5
5
  SHA512:
6
- metadata.gz: faf29bb484053e605d19134703fdf9e708aadd30ab797ae8cfba1a66307ba1af42ee9b42b8e365b3d5675caa06e11f783d316bf278e47fd698c5782eda01785c
7
- data.tar.gz: c37d481e8ab51e49b21147da7889102b8ec82b600619a74ba516615442c65442adfdb291e74541e8317fe145a27af57568555f10a77ebcb5d85d983375c9e000
6
+ metadata.gz: 87590528c3dfefb068c667397e9edf77df914789147a7e52bd162b0622637c0968d28ec70f43ee0b3a3fdd5baffd197e2d071383c68874197ba9cf1a6a420de1
7
+ data.tar.gz: 5704dc5782a7a78da0c17c1d35e86d24fc1b0ce0010a28f8771a743ba54c2ae8fda1a7428dca6ef2814afecef929faf99953d1fe36cc6a8195769b02b32613b0
data/History.md CHANGED
@@ -1,6 +1,13 @@
1
+ ## v0.5.0 [2017-05-12] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Enhancements:
4
+
5
+ - Add a `presave` option for decorators that need a saved instance.
6
+
7
+
1
8
  ## v0.4.0 [2016-12-13] Michael Granger <ged@FaerieMUD.org>
2
9
 
3
- Enchancements:
10
+ Enhancements:
4
11
 
5
12
  - Added `depends_on` to the fixture DSL.
6
13
 
@@ -79,6 +79,7 @@ module FluentFixtures::Collection
79
79
 
80
80
  fixture_mod.extend( FluentFixtures::DSL )
81
81
  fixture_mod.instance_variable_set( :@decorators, {} )
82
+ fixture_mod.instance_variable_set( :@decorator_options, {} )
82
83
  fixture_mod.instance_variable_set( :@fixtured_class, nil )
83
84
  fixture_mod.instance_variable_set( :@base_fixture, nil )
84
85
 
@@ -14,6 +14,9 @@ module FluentFixtures::DSL
14
14
  # The Hash of decorators declared for this fixture module
15
15
  attr_reader :decorators
16
16
 
17
+ # The Hash of options hashes for declared decorators
18
+ attr_reader :decorator_options
19
+
17
20
  ##
18
21
  # The name of the base fixture for the fixture module as a Symbol
19
22
  attr_accessor :base_fixture
@@ -57,8 +60,10 @@ module FluentFixtures::DSL
57
60
 
58
61
  ### Declare a decorator for the fixture with the specified +name+ that will use the
59
62
  ### given +block+.
60
- def decorator( name, &block )
61
- self.decorators[ name.to_sym ] = block
63
+ def decorator( name, **options, &block )
64
+ name = name.to_sym
65
+ self.decorators[ name ] = block
66
+ self.decorator_options[ name ] = options
62
67
  end
63
68
 
64
69
 
@@ -75,7 +75,7 @@ class FluentFixtures::Factory
75
75
  if !decorator_name
76
76
  self.apply_inline_decorator( instance, block )
77
77
  elsif self.fixture_module.decorators.key?( decorator_name )
78
- self.apply_named_decorator( instance, decorator_args, decorator_name )
78
+ instance = self.apply_named_decorator( instance, decorator_args, decorator_name )
79
79
  else
80
80
  self.apply_method_decorator( instance, decorator_args, decorator_name, block )
81
81
  end
@@ -105,13 +105,7 @@ class FluentFixtures::Factory
105
105
  def create( args={}, &block )
106
106
  obj = self.with_transaction do
107
107
  obj = self.instance( args, &block )
108
- obj = self.fixture_module.call_before_saving( obj ) if
109
- self.fixture_module.respond_to?( :call_before_saving )
110
-
111
- self.try_to_save( obj )
112
-
113
- obj = self.fixture_module.call_after_saving( obj ) if
114
- self.fixture_module.respond_to?( :call_after_saving )
108
+ obj = self.try_to_save( obj )
115
109
  obj
116
110
  end
117
111
 
@@ -186,9 +180,14 @@ class FluentFixtures::Factory
186
180
  ### +decorator_name+ to the specified +instance+.
187
181
  def apply_named_decorator( instance, args, decorator_name )
188
182
  decorator_block = self.fixture_module.decorators[ decorator_name ]
189
- self.log.debug "Applying decorator %p (%p) to a %p with args: %p" %
190
- [ decorator_name, decorator_block, instance.class, args ]
183
+ decorator_options = self.fixture_module.decorator_options[ decorator_name ] || {}
184
+ self.log.debug "Applying decorator %p (%p - %p) to a %p with args: %p" %
185
+ [ decorator_name, decorator_block, decorator_options, instance.class, args ]
186
+
187
+ instance = self.try_to_save( instance ) if decorator_options[:presave]
191
188
  instance.instance_exec( *args, &decorator_block )
189
+
190
+ return instance
192
191
  end
193
192
 
194
193
 
@@ -222,11 +221,23 @@ class FluentFixtures::Factory
222
221
  ### Try various methods for saving the given +object+, logging a warning if it doesn't
223
222
  ### respond to any of them.
224
223
  def try_to_save( object )
225
- CREATE_METHODS.each do |methodname|
226
- return object.public_send( methodname ) if object.respond_to?( methodname )
224
+ object = self.fixture_module.call_before_saving( object ) if
225
+ self.fixture_module.respond_to?( :call_before_saving )
226
+
227
+ save_method = CREATE_METHODS.find do |methodname|
228
+ object.respond_to?( methodname )
227
229
  end
228
230
 
229
- self.log.warn "create: don't know how to save %p" % [ object ]
231
+ if save_method
232
+ object.public_send( save_method )
233
+ else
234
+ self.log.warn "create: don't know how to save %p" % [ object ]
235
+ end
236
+
237
+ object = self.fixture_module.call_after_saving( object ) if
238
+ self.fixture_module.respond_to?( :call_after_saving )
239
+
240
+ return object
230
241
  end
231
242
 
232
243
 
@@ -11,10 +11,10 @@ module FluentFixtures
11
11
 
12
12
 
13
13
  # Package version
14
- VERSION = '0.4.0'
14
+ VERSION = '0.5.0'
15
15
 
16
16
  # Version control revision
17
- REVISION = %q$Revision: 08f17f26d0cb $
17
+ REVISION = %q$Revision: ed67198925b5 $
18
18
 
19
19
 
20
20
  # Loggability API -- set up a named logger
@@ -136,6 +136,7 @@ describe FluentFixtures::Collection do
136
136
 
137
137
  it "adds instance data to its fixture modules" do
138
138
  expect( extending_module.decorators ).to be_a( Hash )
139
+ expect( extending_module.decorator_options ).to be_a( Hash )
139
140
  end
140
141
 
141
142
  end
@@ -86,6 +86,17 @@ describe FluentFixtures::DSL do
86
86
  end
87
87
 
88
88
 
89
+ it "can indicate that an object needs to be saved before a decorator is applied" do
90
+ with_associated_object_block = Proc.new {|obj| self.associated_object = obj }
91
+ fixture_module.decorator( :with_associated_object, presave: true, &with_associated_object_block )
92
+
93
+ expect( fixture_module ).to have_decorator( :with_associated_object )
94
+
95
+ expect( fixture_module.decorators[:with_associated_object] ).to be( with_associated_object_block )
96
+ expect( fixture_module.decorator_options[:with_associated_object] ).to include( presave: true )
97
+ end
98
+
99
+
89
100
  it "can declare an alias for an already-declared decorator" do
90
101
  fixture_module.decorator( :with_no_email ) { self.email = nil }
91
102
  fixture_module.alias_decorator( :emailless, :with_no_email )
@@ -15,14 +15,20 @@ describe FluentFixtures::Factory do
15
15
  def initialize( params={} )
16
16
  @saved = false
17
17
  @deleted = false
18
+ @roles = []
19
+ @copied = false
18
20
  params.each do |name, value|
19
21
  self.send( "#{name}=", value )
20
22
  end
21
23
  yield if block_given?
22
24
  end
23
- attr_accessor :name, :login, :email
25
+ def initialize_copy( _original )
26
+ @copied = true
27
+ end
28
+ attr_accessor :name, :login, :email, :roles
24
29
  def save; @saved = true; end
25
30
  def saved?; @saved; end
31
+ def copied?; @copied; end
26
32
  def bizarroify
27
33
  self.name = "Bizarro #{self.name}"
28
34
  self.email = "bizarro+#{self.email}"
@@ -31,6 +37,10 @@ describe FluentFixtures::Factory do
31
37
  end
32
38
  def delete; @deleted = true; end
33
39
  def deleted?; @deleted; end
40
+ def add_role( role )
41
+ raise "not saved" unless self.saved?
42
+ self.roles << role
43
+ end
34
44
  end
35
45
  end
36
46
 
@@ -266,6 +276,39 @@ describe FluentFixtures::Factory do
266
276
  end
267
277
 
268
278
 
279
+ it "supports decorators that save the object before running" do
280
+ fixture_module.decorator( :with_role, presave: true ) do |role|
281
+ self.add_role( role )
282
+ end
283
+
284
+ object = factory.with_role( 'admin' ).instance
285
+
286
+ expect( object ).to be_saved
287
+ expect( object.roles ).to include( 'admin' )
288
+ end
289
+
290
+
291
+ it "calls pre- and post-save hooks for decorators with presaving" do
292
+ fixture_module.decorator( :with_role, presave: true ) do |role|
293
+ self.add_role( role )
294
+ end
295
+ def fixture_module.call_before_saving( instance )
296
+ instance.dup
297
+ end
298
+ def fixture_module.call_after_saving( instance )
299
+ instance.delete
300
+ instance
301
+ end
302
+
303
+ object = factory.with_role( 'admin' ).instance
304
+
305
+ expect( object ).to be_saved
306
+ expect( object ).to be_copied
307
+ expect( object ).to be_deleted
308
+ expect( object.roles ).to include( 'admin' )
309
+ end
310
+
311
+
269
312
  it "allows ad-hoc decorators declared as inline blocks" do
270
313
  counter = 0
271
314
  result = factory.decorated_with do |obj|
metadata CHANGED
@@ -1,41 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent_fixtures
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0.pre.20170515170202
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
14
- GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
15
- HhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx
16
- GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
17
- ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
18
- 83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
19
- ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
20
- TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
21
- 4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
22
- cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
23
- +QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
24
- soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
25
- /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
26
- BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
27
- MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
28
- YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQAPJzKiT0zBU7kpqe0aS2qb
29
- FI0PJ4y5I8buU4IZGUD5NEt/N7pZNfOyBxkrZkXhS44Fp+xwBH5ebLbq/WY78Bqd
30
- db0z6ZgW4LMYMpWFfbXsRbd9TU2f52L8oMAhxOvF7Of5qJMVWuFQ8FPagk2iHrdH
31
- inYLQagqAF6goWTXgAJCdPd6SNeeSNqA6vlY7CV1Jh5kfNJJ6xu/CVij1GzCLu/5
32
- DMOr26DBv+qLJRRC/2h34uX71q5QgeOyxvMg+7V3u/Q06DXyQ2VgeeqiwDFFpEH0
33
- PFkdPO6ZqbTRcLfNH7mFgCBJjsfSjJrn0sPBlYyOXgCoByfZnZyrIMH/UY+lgQqS
34
- 6Von1VDsfQm0eJh5zYZD64ZF86phSR7mUX3mXItwH04HrZwkWpvgd871DZVR3i1n
35
- w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
36
- p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
37
- -----END CERTIFICATE-----
38
- date: 2016-12-14 00:00:00.000000000 Z
11
+ - certs/ged.pem
12
+ date: 2017-05-16 00:00:00.000000000 Z
39
13
  dependencies:
40
14
  - !ruby/object:Gem::Dependency
41
15
  name: loggability
@@ -85,14 +59,14 @@ dependencies:
85
59
  requirements:
86
60
  - - "~>"
87
61
  - !ruby/object:Gem::Version
88
- version: '0.8'
62
+ version: '0.9'
89
63
  type: :development
90
64
  prerelease: false
91
65
  version_requirements: !ruby/object:Gem::Requirement
92
66
  requirements:
93
67
  - - "~>"
94
68
  - !ruby/object:Gem::Version
95
- version: '0.8'
69
+ version: '0.9'
96
70
  - !ruby/object:Gem::Dependency
97
71
  name: hoe-highline
98
72
  requirement: !ruby/object:Gem::Requirement
@@ -169,14 +143,14 @@ dependencies:
169
143
  requirements:
170
144
  - - "~>"
171
145
  - !ruby/object:Gem::Version
172
- version: '3.15'
146
+ version: '3.16'
173
147
  type: :development
174
148
  prerelease: false
175
149
  version_requirements: !ruby/object:Gem::Requirement
176
150
  requirements:
177
151
  - - "~>"
178
152
  - !ruby/object:Gem::Version
179
- version: '3.15'
153
+ version: '3.16'
180
154
  description: |-
181
155
  FluentFixtures is a toolkit for building testing objects with a fluent interface.
182
156
 
@@ -232,12 +206,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
206
  version: 2.2.0
233
207
  required_rubygems_version: !ruby/object:Gem::Requirement
234
208
  requirements:
235
- - - ">="
209
+ - - ">"
236
210
  - !ruby/object:Gem::Version
237
- version: '0'
211
+ version: 1.3.1
238
212
  requirements: []
239
213
  rubyforge_project:
240
- rubygems_version: 2.6.8
214
+ rubygems_version: 2.6.12
241
215
  signing_key:
242
216
  specification_version: 4
243
217
  summary: FluentFixtures is a toolkit for building testing objects with a fluent interface
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file