aasm 4.11.0 → 4.12.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.
- checksums.yaml +4 -4
- data/.travis.yml +16 -17
- data/Appraisals +44 -0
- data/CHANGELOG.md +24 -1
- data/CONTRIBUTING.md +24 -0
- data/Gemfile +4 -21
- data/README.md +81 -34
- data/Rakefile +6 -1
- data/TESTING.md +25 -0
- data/aasm.gemspec +5 -2
- data/gemfiles/rails_3.2.gemfile +13 -0
- data/gemfiles/rails_4.0.gemfile +8 -9
- data/gemfiles/rails_4.2.gemfile +9 -9
- data/gemfiles/rails_4.2_mongoid_5.gemfile +5 -9
- data/gemfiles/rails_5.0.gemfile +7 -16
- data/lib/aasm/aasm.rb +9 -3
- data/lib/aasm/base.rb +3 -1
- data/lib/aasm/configuration.rb +4 -0
- data/lib/aasm/core/event.rb +19 -9
- data/lib/aasm/core/state.rb +7 -0
- data/lib/aasm/core/transition.rb +9 -0
- data/lib/aasm/instance_base.rb +8 -8
- data/lib/aasm/persistence/active_record_persistence.rb +1 -1
- data/lib/aasm/persistence/base.rb +3 -3
- data/lib/aasm/persistence/mongoid_persistence.rb +48 -9
- data/lib/aasm/persistence.rb +0 -3
- data/lib/aasm/state_machine.rb +4 -2
- data/lib/aasm/state_machine_store.rb +5 -2
- data/lib/aasm/version.rb +1 -1
- data/lib/generators/active_record/aasm_generator.rb +1 -1
- data/lib/motion-aasm.rb +0 -1
- data/spec/en.yml +3 -0
- data/spec/generators/active_record_generator_spec.rb +42 -34
- data/spec/generators/mongoid_generator_spec.rb +4 -6
- data/spec/models/{invalid_persistor.rb → active_record/invalid_persistor.rb} +0 -2
- data/spec/models/{silent_persistor.rb → active_record/silent_persistor.rb} +0 -2
- data/spec/models/active_record/simple_new_dsl.rb +2 -2
- data/spec/models/{transactor.rb → active_record/transactor.rb} +0 -2
- data/spec/models/{validator.rb → active_record/validator.rb} +6 -3
- data/spec/models/callbacks/basic.rb +5 -2
- data/spec/models/guard_with_params.rb +24 -0
- data/spec/models/guard_with_params_multiple.rb +18 -0
- data/spec/models/mongoid/invalid_persistor_mongoid.rb +39 -0
- data/spec/models/mongoid/silent_persistor_mongoid.rb +39 -0
- data/spec/models/mongoid/simple_mongoid.rb +2 -2
- data/spec/models/mongoid/validator_mongoid.rb +100 -0
- data/spec/models/multi_transitioner.rb +10 -0
- data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +31 -0
- data/spec/models/parametrised_event.rb +7 -0
- data/spec/models/simple_multiple_example.rb +12 -0
- data/spec/models/sub_class.rb +34 -0
- data/spec/spec_helper.rb +0 -33
- data/spec/spec_helpers/active_record.rb +7 -0
- data/spec/spec_helpers/dynamoid.rb +33 -0
- data/spec/spec_helpers/mongoid.rb +7 -0
- data/spec/spec_helpers/redis.rb +7 -0
- data/spec/spec_helpers/remove_warnings.rb +1 -0
- data/spec/spec_helpers/sequel.rb +7 -0
- data/spec/unit/api_spec.rb +76 -73
- data/spec/unit/callbacks_spec.rb +5 -0
- data/spec/unit/event_spec.rb +12 -0
- data/spec/unit/guard_with_params_multiple_spec.rb +10 -0
- data/spec/unit/guard_with_params_spec.rb +14 -0
- data/spec/unit/inspection_spec.rb +5 -0
- data/spec/unit/localizer_spec.rb +55 -53
- data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +14 -0
- data/spec/unit/override_warning_spec.rb +8 -0
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +452 -445
- data/spec/unit/persistence/active_record_persistence_spec.rb +523 -490
- data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +4 -9
- data/spec/unit/persistence/dynamoid_persistence_spec.rb +4 -9
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +87 -10
- data/spec/unit/persistence/mongoid_persistence_spec.rb +89 -10
- data/spec/unit/persistence/redis_persistence_spec.rb +3 -7
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +4 -9
- data/spec/unit/persistence/sequel_persistence_spec.rb +4 -9
- data/spec/unit/simple_multiple_example_spec.rb +28 -0
- data/spec/unit/subclassing_multiple_spec.rb +37 -2
- data/spec/unit/subclassing_spec.rb +17 -2
- metadata +77 -32
- data/gemfiles/rails_3.2_stable.gemfile +0 -15
- data/gemfiles/rails_4.0_mongo_mapper.gemfile +0 -17
- data/gemfiles/rails_4.2_mongo_mapper.gemfile +0 -18
- data/lib/aasm/persistence/mongo_mapper_persistence.rb +0 -163
- data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +0 -37
- data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +0 -21
- data/spec/models/mongo_mapper/simple_mongo_mapper.rb +0 -23
- data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +0 -25
- data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +0 -146
- data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +0 -93
- /data/spec/models/{worker.rb → active_record/worker.rb} +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Dynamoid)
|
|
4
|
+
describe 'dynamoid' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/dynamoid/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -132,9 +131,5 @@ describe 'dynamoid' do
|
|
|
132
131
|
end
|
|
133
132
|
end
|
|
134
133
|
|
|
135
|
-
rescue LoadError
|
|
136
|
-
puts "------------------------------------------------------------------------"
|
|
137
|
-
puts "Not running Dynamoid multiple-specs because dynamoid gem is not installed!!!"
|
|
138
|
-
puts "------------------------------------------------------------------------"
|
|
139
134
|
end
|
|
140
135
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Dynamoid)
|
|
4
|
+
describe 'dynamoid' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/dynamoid/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -81,9 +80,5 @@ describe 'dynamoid' do
|
|
|
81
80
|
end
|
|
82
81
|
end
|
|
83
82
|
|
|
84
|
-
rescue LoadError
|
|
85
|
-
puts "------------------------------------------------------------------------"
|
|
86
|
-
puts "Not running Dynamoid specs because dynamoid gem is not installed!!!"
|
|
87
|
-
puts "------------------------------------------------------------------------"
|
|
88
83
|
end
|
|
89
84
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Mongoid::Document)
|
|
4
|
+
describe 'mongoid' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/mongoid/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -24,9 +23,12 @@ describe 'mongoid' do
|
|
|
24
23
|
describe "named scopes with the old DSL" do
|
|
25
24
|
|
|
26
25
|
context "Does not already respond_to? the scope name" do
|
|
27
|
-
it "should add a scope" do
|
|
26
|
+
it "should add a scope for each state" do
|
|
28
27
|
expect(SimpleMongoidMultiple).to respond_to(:unknown_scope)
|
|
28
|
+
expect(SimpleMongoidMultiple).to respond_to(:another_unknown_scope)
|
|
29
|
+
|
|
29
30
|
expect(SimpleMongoidMultiple.unknown_scope.class).to eq(Mongoid::Criteria)
|
|
31
|
+
expect(SimpleMongoidMultiple.another_unknown_scope.class).to eq(Mongoid::Criteria)
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
|
|
@@ -69,6 +71,85 @@ describe 'mongoid' do
|
|
|
69
71
|
|
|
70
72
|
end
|
|
71
73
|
|
|
74
|
+
describe 'transitions with persistence' do
|
|
75
|
+
|
|
76
|
+
it "should work for valid models" do
|
|
77
|
+
valid_object = MultipleValidatorMongoid.create(:name => 'name')
|
|
78
|
+
expect(valid_object).to be_sleeping
|
|
79
|
+
valid_object.status = :running
|
|
80
|
+
expect(valid_object).to be_running
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should not store states for invalid models' do
|
|
84
|
+
validator = MultipleValidatorMongoid.create(:name => 'name')
|
|
85
|
+
expect(validator).to be_valid
|
|
86
|
+
expect(validator).to be_sleeping
|
|
87
|
+
|
|
88
|
+
validator.name = nil
|
|
89
|
+
expect(validator).not_to be_valid
|
|
90
|
+
expect { validator.run! }.to raise_error(Mongoid::Errors::Validations)
|
|
91
|
+
expect(validator).to be_sleeping
|
|
92
|
+
|
|
93
|
+
validator.reload
|
|
94
|
+
expect(validator).not_to be_running
|
|
95
|
+
expect(validator).to be_sleeping
|
|
96
|
+
|
|
97
|
+
validator.name = 'another name'
|
|
98
|
+
expect(validator).to be_valid
|
|
99
|
+
expect(validator.run!).to be_truthy
|
|
100
|
+
expect(validator).to be_running
|
|
101
|
+
|
|
102
|
+
validator.reload
|
|
103
|
+
expect(validator).to be_running
|
|
104
|
+
expect(validator).not_to be_sleeping
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it 'should not store states for invalid models silently if configured' do
|
|
108
|
+
validator = MultipleSilentPersistorMongoid.create(:name => 'name')
|
|
109
|
+
expect(validator).to be_valid
|
|
110
|
+
expect(validator).to be_sleeping
|
|
111
|
+
|
|
112
|
+
validator.name = nil
|
|
113
|
+
expect(validator).not_to be_valid
|
|
114
|
+
expect(validator.run!).to be_falsey
|
|
115
|
+
expect(validator).to be_sleeping
|
|
116
|
+
|
|
117
|
+
validator.reload
|
|
118
|
+
expect(validator).not_to be_running
|
|
119
|
+
expect(validator).to be_sleeping
|
|
120
|
+
|
|
121
|
+
validator.name = 'another name'
|
|
122
|
+
expect(validator).to be_valid
|
|
123
|
+
expect(validator.run!).to be_truthy
|
|
124
|
+
expect(validator).to be_running
|
|
125
|
+
|
|
126
|
+
validator.reload
|
|
127
|
+
expect(validator).to be_running
|
|
128
|
+
expect(validator).not_to be_sleeping
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it 'should store states for invalid models if configured' do
|
|
132
|
+
persistor = MultipleInvalidPersistorMongoid.create(:name => 'name')
|
|
133
|
+
expect(persistor).to be_valid
|
|
134
|
+
expect(persistor).to be_sleeping
|
|
135
|
+
|
|
136
|
+
persistor.name = nil
|
|
137
|
+
expect(persistor).not_to be_valid
|
|
138
|
+
expect(persistor.run!).to be_truthy
|
|
139
|
+
expect(persistor).to be_running
|
|
140
|
+
|
|
141
|
+
persistor = MultipleInvalidPersistorMongoid.find(persistor.id)
|
|
142
|
+
persistor.valid?
|
|
143
|
+
expect(persistor).to be_valid
|
|
144
|
+
expect(persistor).to be_running
|
|
145
|
+
expect(persistor).not_to be_sleeping
|
|
146
|
+
|
|
147
|
+
persistor.reload
|
|
148
|
+
expect(persistor).to be_running
|
|
149
|
+
expect(persistor).not_to be_sleeping
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
72
153
|
describe "complex example" do
|
|
73
154
|
it "works" do
|
|
74
155
|
record = ComplexMongoidExample.new
|
|
@@ -119,9 +200,5 @@ describe 'mongoid' do
|
|
|
119
200
|
end
|
|
120
201
|
end
|
|
121
202
|
|
|
122
|
-
rescue LoadError
|
|
123
|
-
puts "--------------------------------------------------------------------------"
|
|
124
|
-
puts "Not running Mongoid multiple-specs because mongoid gem is not installed!!!"
|
|
125
|
-
puts "--------------------------------------------------------------------------"
|
|
126
203
|
end
|
|
127
204
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Mongoid::Document)
|
|
4
|
+
describe 'mongoid' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/mongoid/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -24,9 +23,12 @@ describe 'mongoid' do
|
|
|
24
23
|
describe "named scopes with the old DSL" do
|
|
25
24
|
|
|
26
25
|
context "Does not already respond_to? the scope name" do
|
|
27
|
-
it "should add a scope" do
|
|
26
|
+
it "should add a scope for each state" do
|
|
28
27
|
expect(SimpleMongoid).to respond_to(:unknown_scope)
|
|
28
|
+
expect(SimpleMongoid).to respond_to(:another_unknown_scope)
|
|
29
|
+
|
|
29
30
|
expect(SimpleMongoid.unknown_scope.class).to eq(Mongoid::Criteria)
|
|
31
|
+
expect(SimpleMongoid.another_unknown_scope.class).to eq(Mongoid::Criteria)
|
|
30
32
|
end
|
|
31
33
|
end
|
|
32
34
|
|
|
@@ -82,9 +84,86 @@ describe 'mongoid' do
|
|
|
82
84
|
|
|
83
85
|
end
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
describe 'transitions with persistence' do
|
|
88
|
+
|
|
89
|
+
it 'should work for valid models' do
|
|
90
|
+
valid_object = ValidatorMongoid.create(:name => 'name')
|
|
91
|
+
expect(valid_object).to be_sleeping
|
|
92
|
+
valid_object.status = :running
|
|
93
|
+
expect(valid_object).to be_running
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should not store states for invalid models' do
|
|
97
|
+
validator = ValidatorMongoid.create(:name => 'name')
|
|
98
|
+
expect(validator).to be_valid
|
|
99
|
+
expect(validator).to be_sleeping
|
|
100
|
+
|
|
101
|
+
validator.name = nil
|
|
102
|
+
expect(validator).not_to be_valid
|
|
103
|
+
expect { validator.run! }.to raise_error(Mongoid::Errors::Validations)
|
|
104
|
+
expect(validator).to be_sleeping
|
|
105
|
+
|
|
106
|
+
validator.reload
|
|
107
|
+
expect(validator).not_to be_running
|
|
108
|
+
expect(validator).to be_sleeping
|
|
109
|
+
|
|
110
|
+
validator.name = 'another name'
|
|
111
|
+
expect(validator).to be_valid
|
|
112
|
+
expect(validator.run!).to be_truthy
|
|
113
|
+
expect(validator).to be_running
|
|
114
|
+
|
|
115
|
+
validator.reload
|
|
116
|
+
expect(validator).to be_running
|
|
117
|
+
expect(validator).not_to be_sleeping
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'should not store states for invalid models silently if configured' do
|
|
121
|
+
validator = SilentPersistorMongoid.create(:name => 'name')
|
|
122
|
+
expect(validator).to be_valid
|
|
123
|
+
expect(validator).to be_sleeping
|
|
124
|
+
|
|
125
|
+
validator.name = nil
|
|
126
|
+
expect(validator).not_to be_valid
|
|
127
|
+
expect(validator.run!).to be_falsey
|
|
128
|
+
expect(validator).to be_sleeping
|
|
129
|
+
|
|
130
|
+
validator.reload
|
|
131
|
+
expect(validator).not_to be_running
|
|
132
|
+
expect(validator).to be_sleeping
|
|
133
|
+
|
|
134
|
+
validator.name = 'another name'
|
|
135
|
+
expect(validator).to be_valid
|
|
136
|
+
expect(validator.run!).to be_truthy
|
|
137
|
+
expect(validator).to be_running
|
|
138
|
+
|
|
139
|
+
validator.reload
|
|
140
|
+
expect(validator).to be_running
|
|
141
|
+
expect(validator).not_to be_sleeping
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'should store states for invalid models if configured' do
|
|
145
|
+
persistor = InvalidPersistorMongoid.create(:name => 'name')
|
|
146
|
+
expect(persistor).to be_valid
|
|
147
|
+
expect(persistor).to be_sleeping
|
|
148
|
+
|
|
149
|
+
persistor.name = nil
|
|
150
|
+
|
|
151
|
+
expect(persistor).not_to be_valid
|
|
152
|
+
expect(persistor.run!).to be_truthy
|
|
153
|
+
expect(persistor).to be_running
|
|
154
|
+
|
|
155
|
+
persistor = InvalidPersistorMongoid.find(persistor.id)
|
|
156
|
+
|
|
157
|
+
persistor.valid?
|
|
158
|
+
expect(persistor).to be_valid
|
|
159
|
+
expect(persistor).to be_running
|
|
160
|
+
expect(persistor).not_to be_sleeping
|
|
161
|
+
|
|
162
|
+
persistor.reload
|
|
163
|
+
expect(persistor).to be_running
|
|
164
|
+
expect(persistor).not_to be_sleeping
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
89
168
|
end
|
|
90
169
|
end
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
1
2
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require 'redis-objects'
|
|
5
|
-
require 'logger'
|
|
6
|
-
require 'spec_helper'
|
|
3
|
+
if defined?(Redis::Objects)
|
|
4
|
+
describe 'redis' do
|
|
7
5
|
|
|
8
6
|
before(:all) do
|
|
9
7
|
Redis.current = Redis.new(host: '127.0.0.1', port: 6379)
|
|
@@ -71,7 +69,5 @@ describe 'redis' do
|
|
|
71
69
|
end
|
|
72
70
|
end
|
|
73
71
|
|
|
74
|
-
rescue LoadError
|
|
75
|
-
puts "Not running Redis specs because sequel gem is not installed!!!"
|
|
76
72
|
end
|
|
77
73
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Sequel)
|
|
4
|
+
describe 'sequel' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/sequel/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -145,9 +144,5 @@ describe 'sequel' do
|
|
|
145
144
|
end
|
|
146
145
|
end
|
|
147
146
|
|
|
148
|
-
rescue LoadError
|
|
149
|
-
puts "------------------------------------------------------------------------"
|
|
150
|
-
puts "Not running Sequel multiple-specs because sequel gem is not installed!!!"
|
|
151
|
-
puts "------------------------------------------------------------------------"
|
|
152
147
|
end
|
|
153
148
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
if defined?(Sequel)
|
|
4
|
+
describe 'sequel' do
|
|
6
5
|
|
|
7
6
|
Dir[File.dirname(__FILE__) + "/../../models/sequel/*.rb"].sort.each do |f|
|
|
8
7
|
require File.expand_path(f)
|
|
@@ -92,9 +91,5 @@ describe 'sequel' do
|
|
|
92
91
|
end
|
|
93
92
|
end
|
|
94
93
|
|
|
95
|
-
rescue LoadError
|
|
96
|
-
puts "------------------------------------------------------------------------"
|
|
97
|
-
puts "Not running Sequel specs because sequel gem is not installed!!!"
|
|
98
|
-
puts "------------------------------------------------------------------------"
|
|
99
94
|
end
|
|
100
95
|
end
|
|
@@ -60,4 +60,32 @@ describe 'state machine' do
|
|
|
60
60
|
expect(SimpleMultipleExample::STATE_PROCESSING).to eq(:processing)
|
|
61
61
|
expect(SimpleMultipleExample::STATE_RUNNING).to eq(:running)
|
|
62
62
|
end
|
|
63
|
+
|
|
64
|
+
context 'triggers binding_events in bindind_state_machine' do
|
|
65
|
+
it 'does persist' do
|
|
66
|
+
expect(simple).to be_sleeping
|
|
67
|
+
expect(simple).to be_answered
|
|
68
|
+
expect(simple).to receive(:start!).and_call_original
|
|
69
|
+
simple.ask!
|
|
70
|
+
expect(simple).to be_asked
|
|
71
|
+
expect(simple).to be_processing
|
|
72
|
+
expect(simple).to receive(:stop!).and_call_original
|
|
73
|
+
simple.answer!
|
|
74
|
+
expect(simple).to be_sleeping
|
|
75
|
+
expect(simple).to be_answered
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'does not persist' do
|
|
79
|
+
expect(simple).to be_sleeping
|
|
80
|
+
expect(simple).to be_answered
|
|
81
|
+
expect(simple).to receive(:start).and_call_original
|
|
82
|
+
simple.ask
|
|
83
|
+
expect(simple).to be_asked
|
|
84
|
+
expect(simple).to be_processing
|
|
85
|
+
expect(simple).to receive(:stop).and_call_original
|
|
86
|
+
simple.answer
|
|
87
|
+
expect(simple).to be_sleeping
|
|
88
|
+
expect(simple).to be_answered
|
|
89
|
+
end
|
|
90
|
+
end
|
|
63
91
|
end
|
|
@@ -19,7 +19,7 @@ describe 'subclassing with multiple state machines' do
|
|
|
19
19
|
expect(SuperClassMultiple.aasm(:right).states).not_to include(:archived)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
it
|
|
22
|
+
it 'should have the same events as its parent' do
|
|
23
23
|
expect(SubClassMultiple.aasm(:left).events).to eq(SuperClassMultiple.aasm(:left).events)
|
|
24
24
|
expect(SubClassMultiple.aasm(:right).events).to eq(SuperClassMultiple.aasm(:right).events)
|
|
25
25
|
end
|
|
@@ -35,5 +35,40 @@ describe 'subclassing with multiple state machines' do
|
|
|
35
35
|
expect(son.aasm(:left).current_state).to eq(:ended)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
it 'should allow the child to modify its left state machine' do
|
|
39
|
+
son = SubClassMultiple.new
|
|
40
|
+
expect(son.left_called_after).to eq(nil)
|
|
41
|
+
expect(son.right_called_after).to eq(nil)
|
|
42
|
+
son.foo
|
|
43
|
+
expect(son.left_called_after).to eq(true)
|
|
44
|
+
expect(son.right_called_after).to eq(nil)
|
|
45
|
+
global_callbacks = SubClassMultiple.aasm(:left).state_machine.global_callbacks
|
|
46
|
+
expect(global_callbacks).to_not be_empty
|
|
47
|
+
expect(global_callbacks[:after_all_transitions]).to eq :left_after_all_event
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should allow the child to modify its right state machine' do
|
|
51
|
+
son = SubClassMultiple.new
|
|
52
|
+
expect(son.right_called_after).to eq(nil)
|
|
53
|
+
expect(son.left_called_after).to eq(nil)
|
|
54
|
+
son.close
|
|
55
|
+
expect(son.right_called_after).to eq(true)
|
|
56
|
+
expect(son.left_called_after).to eq(nil)
|
|
57
|
+
global_callbacks = SubClassMultiple.aasm(:right).state_machine.global_callbacks
|
|
58
|
+
expect(global_callbacks).to_not be_empty
|
|
59
|
+
expect(global_callbacks[:after_all_transitions]).to eq :right_after_all_event
|
|
60
|
+
end
|
|
39
61
|
|
|
62
|
+
it 'should not modify the parent left state machine' do
|
|
63
|
+
super_class_event = SuperClassMultiple.aasm(:left).events.select { |event| event.name == :foo }.first
|
|
64
|
+
expect(super_class_event.options).to be_empty
|
|
65
|
+
expect(SuperClassMultiple.aasm(:left).state_machine.global_callbacks).to be_empty
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should not modify the parent right state machine' do
|
|
69
|
+
super_class_event = SuperClassMultiple.aasm(:right).events.select { |event| event.name == :close }.first
|
|
70
|
+
expect(super_class_event.options).to be_empty
|
|
71
|
+
expect(SuperClassMultiple.aasm(:right).state_machine.global_callbacks).to be_empty
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
@@ -13,7 +13,7 @@ describe 'subclassing' do
|
|
|
13
13
|
expect(SuperClass.aasm.states).not_to include(:foo)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
it
|
|
16
|
+
it 'should have the same events as its parent' do
|
|
17
17
|
expect(SubClass.aasm.events).to eq(SuperClass.aasm.events)
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -27,5 +27,20 @@ describe 'subclassing' do
|
|
|
27
27
|
expect(son.aasm.current_state).to eq(:ended)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
it 'should allow the child to modify its state machine' do
|
|
31
|
+
son = SubClass.new
|
|
32
|
+
expect(son.called_after).to eq(nil)
|
|
33
|
+
son.foo
|
|
34
|
+
expect(son.called_after).to eq(true)
|
|
35
|
+
global_callbacks = SubClass.aasm.state_machine.global_callbacks
|
|
36
|
+
expect(global_callbacks).to_not be_empty
|
|
37
|
+
expect(global_callbacks[:after_all_transitions]).to eq :after_all_event
|
|
38
|
+
end
|
|
31
39
|
|
|
40
|
+
it 'should not modify the parent state machine' do
|
|
41
|
+
super_class_event = SuperClass.aasm.events.select { |event| event.name == :foo }.first
|
|
42
|
+
expect(super_class_event.options).to be_empty
|
|
43
|
+
expect(SuperClass.aasm.state_machine.global_callbacks).to be_empty
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|