state_machine 0.10.0 → 0.10.1
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/CHANGELOG.rdoc +4 -0
- data/Rakefile +1 -1
- data/lib/state_machine/integrations/active_record.rb +7 -5
- data/lib/state_machine/integrations/mongoid.rb +7 -5
- data/lib/state_machine/integrations/sequel.rb +7 -4
- data/test/unit/integrations/active_model_test.rb +17 -0
- data/test/unit/integrations/active_record_test.rb +16 -0
- data/test/unit/integrations/data_mapper_test.rb +17 -0
- data/test/unit/integrations/mongo_mapper_test.rb +16 -0
- data/test/unit/integrations/mongoid_test.rb +16 -0
- data/test/unit/integrations/sequel_test.rb +19 -0
- metadata +6 -6
data/CHANGELOG.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ require 'rake/gempackagetask'
|
|
6
6
|
|
7
7
|
spec = Gem::Specification.new do |s|
|
8
8
|
s.name = 'state_machine'
|
9
|
-
s.version = '0.10.
|
9
|
+
s.version = '0.10.1'
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.summary = 'Adds support for creating state machines for attributes on any Ruby class'
|
12
12
|
s.description = s.summary
|
@@ -373,10 +373,7 @@ module StateMachine
|
|
373
373
|
# created with a set of attributes that includes this machine's
|
374
374
|
# attribute.
|
375
375
|
def initialize_state?(object, options)
|
376
|
-
if object.new_record?
|
377
|
-
object.instance_variable_set('@initialized_state_machines', true)
|
378
|
-
super
|
379
|
-
end
|
376
|
+
super if object.new_record?
|
380
377
|
end
|
381
378
|
|
382
379
|
# Defines an initialization hook into the owner class for setting the
|
@@ -392,7 +389,12 @@ module StateMachine
|
|
392
389
|
# Hooks in to attribute initialization to set the states *prior*
|
393
390
|
# to the attributes being set
|
394
391
|
define_helper(:instance, :attributes=) do |machine, object, _super, new_attributes, *|
|
395
|
-
object.
|
392
|
+
if !object.instance_variable_defined?('@initialized_state_machines')
|
393
|
+
object.class.state_machines.initialize_states(object, :attributes => new_attributes) { _super.call }
|
394
|
+
object.instance_variable_set('@initialized_state_machines', true)
|
395
|
+
else
|
396
|
+
_super.call
|
397
|
+
end
|
396
398
|
end
|
397
399
|
end
|
398
400
|
|
@@ -234,10 +234,7 @@ module StateMachine
|
|
234
234
|
# created with a set of attributes that includes this machine's
|
235
235
|
# attribute.
|
236
236
|
def initialize_state?(object, options)
|
237
|
-
if object.new_record?
|
238
|
-
object.instance_variable_set('@initialized_state_machines', true)
|
239
|
-
super
|
240
|
-
end
|
237
|
+
super if object.new_record?
|
241
238
|
end
|
242
239
|
|
243
240
|
# Defines an initialization hook into the owner class for setting the
|
@@ -245,7 +242,12 @@ module StateMachine
|
|
245
242
|
# object
|
246
243
|
def define_state_initializer
|
247
244
|
define_helper(:instance, :process) do |machine, object, _super, *args|
|
248
|
-
object.
|
245
|
+
if !object.instance_variable_defined?('@initialized_state_machines')
|
246
|
+
object.class.state_machines.initialize_states(object, :attributes => args.first) { _super.call }
|
247
|
+
object.instance_variable_set('@initialized_state_machines', true)
|
248
|
+
else
|
249
|
+
_super.call
|
250
|
+
end
|
249
251
|
end
|
250
252
|
end
|
251
253
|
|
@@ -270,9 +270,7 @@ module StateMachine
|
|
270
270
|
# created with a set of attributes that includes this machine's
|
271
271
|
# attribute.
|
272
272
|
def initialize_state?(object, options)
|
273
|
-
if object.new?
|
274
|
-
object.instance_variable_set('@initialized_state_machines', true)
|
275
|
-
|
273
|
+
if object.new?
|
276
274
|
attributes = options[:attributes] || {}
|
277
275
|
ignore = object.send(:setter_methods, nil, nil).map {|setter| setter.chop.to_sym} & attributes.keys.map {|key| key.to_sym}
|
278
276
|
!ignore.map {|attribute| attribute.to_sym}.include?(attribute)
|
@@ -286,7 +284,12 @@ module StateMachine
|
|
286
284
|
# Hooks in to attribute initialization to set the states *prior* to
|
287
285
|
# the attributes being set
|
288
286
|
define_helper(:instance, :set) do |machine, object, _super, *args|
|
289
|
-
object.
|
287
|
+
if !object.instance_variable_defined?('@initialized_state_machines')
|
288
|
+
object.class.state_machines.initialize_states(object, :attributes => args.first) { _super.call }
|
289
|
+
object.instance_variable_set('@initialized_state_machines', true)
|
290
|
+
else
|
291
|
+
_super.call
|
292
|
+
end
|
290
293
|
end
|
291
294
|
end
|
292
295
|
|
@@ -266,6 +266,23 @@ module ActiveModelTest
|
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
269
|
+
class MachineMultipleTest < BaseTestCase
|
270
|
+
def setup
|
271
|
+
@model = new_model do
|
272
|
+
model_attribute :status
|
273
|
+
end
|
274
|
+
|
275
|
+
@state_machine = StateMachine::Machine.new(@model, :initial => :parked, :integration => :active_model)
|
276
|
+
@status_machine = StateMachine::Machine.new(@model, :status, :initial => :idling, :integration => :active_model)
|
277
|
+
end
|
278
|
+
|
279
|
+
def test_should_should_initialize_each_state
|
280
|
+
record = @model.new
|
281
|
+
assert_equal 'parked', record.state
|
282
|
+
assert_equal 'idling', record.status
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
269
286
|
class MachineWithDirtyAttributesTest < BaseTestCase
|
270
287
|
def setup
|
271
288
|
@model = new_model do
|
@@ -513,6 +513,22 @@ module ActiveRecordTest
|
|
513
513
|
end
|
514
514
|
end
|
515
515
|
|
516
|
+
class MachineMultipleTest < BaseTestCase
|
517
|
+
def setup
|
518
|
+
@model = new_model do
|
519
|
+
connection.add_column :foo, :status, :string
|
520
|
+
end
|
521
|
+
@state_machine = StateMachine::Machine.new(@model, :initial => :parked)
|
522
|
+
@status_machine = StateMachine::Machine.new(@model, :status, :initial => :idling)
|
523
|
+
end
|
524
|
+
|
525
|
+
def test_should_should_initialize_each_state
|
526
|
+
record = @model.new
|
527
|
+
assert_equal 'parked', record.state
|
528
|
+
assert_equal 'idling', record.status
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
516
532
|
class MachineWithLoopbackTest < BaseTestCase
|
517
533
|
def setup
|
518
534
|
@model = new_model do
|
@@ -454,6 +454,23 @@ module DataMapperTest
|
|
454
454
|
end
|
455
455
|
end
|
456
456
|
|
457
|
+
class MachineMultipleTest < BaseTestCase
|
458
|
+
def setup
|
459
|
+
@resource = new_resource do
|
460
|
+
property :status, String
|
461
|
+
auto_migrate!
|
462
|
+
end
|
463
|
+
@state_machine = StateMachine::Machine.new(@resource, :initial => :parked)
|
464
|
+
@status_machine = StateMachine::Machine.new(@resource, :status, :initial => :idling)
|
465
|
+
end
|
466
|
+
|
467
|
+
def test_should_should_initialize_each_state
|
468
|
+
record = @resource.new
|
469
|
+
assert_equal 'parked', record.state
|
470
|
+
assert_equal 'idling', record.status
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
457
474
|
class MachineWithLoopbackTest < BaseTestCase
|
458
475
|
def setup
|
459
476
|
@resource = new_resource do
|
@@ -450,6 +450,22 @@ module MongoMapperTest
|
|
450
450
|
end
|
451
451
|
end
|
452
452
|
|
453
|
+
class MachineMultipleTest < BaseTestCase
|
454
|
+
def setup
|
455
|
+
@model = new_model do
|
456
|
+
key :status, String, :default => 'idling'
|
457
|
+
end
|
458
|
+
@state_machine = StateMachine::Machine.new(@model, :initial => :parked)
|
459
|
+
@status_machine = StateMachine::Machine.new(@model, :status, :initial => :idling)
|
460
|
+
end
|
461
|
+
|
462
|
+
def test_should_should_initialize_each_state
|
463
|
+
record = @model.new
|
464
|
+
assert_equal 'parked', record.state
|
465
|
+
assert_equal 'idling', record.status
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
453
469
|
class MachineWithLoopbackTest < BaseTestCase
|
454
470
|
def setup
|
455
471
|
@model = new_model do
|
@@ -424,6 +424,22 @@ module MongoidTest
|
|
424
424
|
end
|
425
425
|
end
|
426
426
|
|
427
|
+
class MachineMultipleTest < BaseTestCase
|
428
|
+
def setup
|
429
|
+
@model = new_model do
|
430
|
+
key :status, String, :default => 'idling'
|
431
|
+
end
|
432
|
+
@state_machine = StateMachine::Machine.new(@model, :initial => :parked)
|
433
|
+
@status_machine = StateMachine::Machine.new(@model, :status, :initial => :idling)
|
434
|
+
end
|
435
|
+
|
436
|
+
def test_should_should_initialize_each_state
|
437
|
+
record = @model.new
|
438
|
+
assert_equal 'parked', record.state
|
439
|
+
assert_equal 'idling', record.status
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
427
443
|
class MachineWithLoopbackTest < BaseTestCase
|
428
444
|
def setup
|
429
445
|
@model = new_model do
|
@@ -453,6 +453,25 @@ module SequelTest
|
|
453
453
|
end
|
454
454
|
end
|
455
455
|
|
456
|
+
class MachineMultipleTest < BaseTestCase
|
457
|
+
def setup
|
458
|
+
@model = new_model
|
459
|
+
DB.alter_table :foo do
|
460
|
+
add_column :status, :string, :default => 'idling'
|
461
|
+
end
|
462
|
+
@model.class_eval { get_db_schema(true) }
|
463
|
+
|
464
|
+
@state_machine = StateMachine::Machine.new(@model, :initial => :parked)
|
465
|
+
@status_machine = StateMachine::Machine.new(@model, :status, :initial => :idling)
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_should_should_initialize_each_state
|
469
|
+
record = @model.new
|
470
|
+
assert_equal 'parked', record.state
|
471
|
+
assert_equal 'idling', record.status
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
456
475
|
class MachineWithAliasedAttributeTest < BaseTestCase
|
457
476
|
def setup
|
458
477
|
@model = new_model do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: state_machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 53
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 10
|
9
|
-
-
|
10
|
-
version: 0.10.
|
9
|
+
- 1
|
10
|
+
version: 0.10.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Aaron Pfeifer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-22 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
165
|
requirements: []
|
166
166
|
|
167
167
|
rubyforge_project: pluginaweek
|
168
|
-
rubygems_version: 1.
|
168
|
+
rubygems_version: 1.6.2
|
169
169
|
signing_key:
|
170
170
|
specification_version: 3
|
171
171
|
summary: Adds support for creating state machines for attributes on any Ruby class
|