aasm 4.12.3 → 5.5.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 +5 -5
- data/README.md +284 -119
- data/lib/aasm/aasm.rb +30 -27
- data/lib/aasm/base.rb +61 -11
- data/lib/aasm/configuration.rb +3 -0
- data/lib/aasm/core/event.rb +26 -30
- data/lib/aasm/core/invoker.rb +129 -0
- data/lib/aasm/core/invokers/base_invoker.rb +75 -0
- data/lib/aasm/core/invokers/class_invoker.rb +52 -0
- data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
- data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
- data/lib/aasm/core/state.rb +16 -14
- data/lib/aasm/core/transition.rb +8 -69
- data/lib/aasm/dsl_helper.rb +24 -22
- data/lib/aasm/errors.rb +5 -3
- data/lib/aasm/instance_base.rb +28 -5
- data/lib/aasm/localizer.rb +13 -3
- data/lib/aasm/persistence/active_record_persistence.rb +25 -5
- data/lib/aasm/persistence/base.rb +14 -3
- data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
- data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
- data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
- data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
- data/lib/aasm/persistence/orm.rb +23 -19
- data/lib/aasm/persistence/plain_persistence.rb +2 -1
- data/lib/aasm/persistence/redis_persistence.rb +1 -1
- data/lib/aasm/persistence/sequel_persistence.rb +0 -1
- data/lib/aasm/persistence.rb +3 -0
- data/lib/aasm/rspec/allow_event.rb +5 -1
- data/lib/aasm/rspec/allow_transition_to.rb +5 -1
- data/lib/aasm/rspec/transition_from.rb +5 -1
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +5 -2
- data/lib/generators/aasm/orm_helpers.rb +7 -1
- data/lib/generators/active_record/aasm_generator.rb +3 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- data/lib/generators/nobrainer/aasm_generator.rb +28 -0
- data/lib/motion-aasm.rb +1 -0
- metadata +42 -344
- data/.document +0 -6
- data/.gitignore +0 -20
- data/.travis.yml +0 -52
- data/API +0 -34
- data/Appraisals +0 -43
- data/CHANGELOG.md +0 -370
- data/CODE_OF_CONDUCT.md +0 -13
- data/CONTRIBUTING.md +0 -24
- data/Gemfile +0 -7
- data/Gemfile.lock_old +0 -151
- data/HOWTO +0 -12
- data/PLANNED_CHANGES.md +0 -11
- data/README_FROM_VERSION_3_TO_4.md +0 -240
- data/Rakefile +0 -31
- data/TESTING.md +0 -25
- data/aasm.gemspec +0 -35
- data/callbacks.txt +0 -51
- data/gemfiles/rails_3.2.gemfile +0 -13
- data/gemfiles/rails_4.0.gemfile +0 -15
- data/gemfiles/rails_4.2.gemfile +0 -16
- data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
- data/gemfiles/rails_5.0.gemfile +0 -14
- data/spec/database.rb +0 -44
- data/spec/database.yml +0 -3
- data/spec/en.yml +0 -12
- data/spec/en_deprecated_style.yml +0 -10
- data/spec/generators/active_record_generator_spec.rb +0 -47
- data/spec/generators/mongoid_generator_spec.rb +0 -31
- data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
- data/spec/models/active_record/complex_active_record_example.rb +0 -37
- data/spec/models/active_record/derivate_new_dsl.rb +0 -7
- data/spec/models/active_record/false_state.rb +0 -35
- data/spec/models/active_record/gate.rb +0 -39
- data/spec/models/active_record/invalid_persistor.rb +0 -29
- data/spec/models/active_record/localizer_test_model.rb +0 -34
- data/spec/models/active_record/no_direct_assignment.rb +0 -21
- data/spec/models/active_record/no_scope.rb +0 -21
- data/spec/models/active_record/persisted_state.rb +0 -12
- data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
- data/spec/models/active_record/reader.rb +0 -7
- data/spec/models/active_record/readme_job.rb +0 -21
- data/spec/models/active_record/silent_persistor.rb +0 -29
- data/spec/models/active_record/simple_new_dsl.rb +0 -17
- data/spec/models/active_record/thief.rb +0 -29
- data/spec/models/active_record/transactor.rb +0 -124
- data/spec/models/active_record/transient.rb +0 -6
- data/spec/models/active_record/validator.rb +0 -118
- data/spec/models/active_record/with_enum.rb +0 -39
- data/spec/models/active_record/with_enum_without_column.rb +0 -38
- data/spec/models/active_record/with_false_enum.rb +0 -31
- data/spec/models/active_record/with_true_enum.rb +0 -39
- data/spec/models/active_record/worker.rb +0 -2
- data/spec/models/active_record/writer.rb +0 -6
- data/spec/models/basic_two_state_machines_example.rb +0 -25
- data/spec/models/callbacks/basic.rb +0 -98
- data/spec/models/callbacks/basic_multiple.rb +0 -75
- data/spec/models/callbacks/guard_within_block.rb +0 -67
- data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
- data/spec/models/callbacks/private_method.rb +0 -44
- data/spec/models/callbacks/private_method_multiple.rb +0 -44
- data/spec/models/callbacks/with_args.rb +0 -62
- data/spec/models/callbacks/with_args_multiple.rb +0 -61
- data/spec/models/callbacks/with_state_arg.rb +0 -30
- data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
- data/spec/models/complex_example.rb +0 -222
- data/spec/models/conversation.rb +0 -93
- data/spec/models/default_state.rb +0 -12
- data/spec/models/double_definer.rb +0 -21
- data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
- data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
- data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
- data/spec/models/foo.rb +0 -106
- data/spec/models/foo_callback_multiple.rb +0 -45
- data/spec/models/guard_arguments_check.rb +0 -17
- data/spec/models/guard_with_params.rb +0 -24
- data/spec/models/guard_with_params_multiple.rb +0 -18
- data/spec/models/guardian.rb +0 -58
- data/spec/models/guardian_multiple.rb +0 -48
- data/spec/models/guardian_without_from_specified.rb +0 -18
- data/spec/models/initial_state_proc.rb +0 -31
- data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
- data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/mongoid_relationships.rb +0 -26
- data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
- data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/simple_mongoid.rb +0 -23
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
- data/spec/models/mongoid/validator_mongoid.rb +0 -100
- data/spec/models/multi_transitioner.rb +0 -34
- data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
- data/spec/models/namespaced_multiple_example.rb +0 -42
- data/spec/models/no_initial_state.rb +0 -25
- data/spec/models/not_auto_loaded/process.rb +0 -21
- data/spec/models/parametrised_event.rb +0 -42
- data/spec/models/parametrised_event_multiple.rb +0 -29
- data/spec/models/process_with_new_dsl.rb +0 -31
- data/spec/models/provided_state.rb +0 -24
- data/spec/models/redis/complex_redis_example.rb +0 -40
- data/spec/models/redis/redis_multiple.rb +0 -20
- data/spec/models/redis/redis_simple.rb +0 -20
- data/spec/models/sequel/complex_sequel_example.rb +0 -46
- data/spec/models/sequel/invalid_persistor.rb +0 -52
- data/spec/models/sequel/sequel_multiple.rb +0 -25
- data/spec/models/sequel/sequel_simple.rb +0 -26
- data/spec/models/sequel/silent_persistor.rb +0 -50
- data/spec/models/sequel/transactor.rb +0 -112
- data/spec/models/sequel/validator.rb +0 -93
- data/spec/models/sequel/worker.rb +0 -12
- data/spec/models/silencer.rb +0 -27
- data/spec/models/simple_custom_example.rb +0 -53
- data/spec/models/simple_example.rb +0 -15
- data/spec/models/simple_multiple_example.rb +0 -42
- data/spec/models/state_machine_with_failed_event.rb +0 -20
- data/spec/models/states_on_one_line_example.rb +0 -8
- data/spec/models/sub_class.rb +0 -41
- data/spec/models/sub_class_with_more_states.rb +0 -18
- data/spec/models/sub_classing.rb +0 -3
- data/spec/models/super_class.rb +0 -46
- data/spec/models/this_name_better_not_be_in_use.rb +0 -11
- data/spec/models/valid_state_name.rb +0 -23
- data/spec/spec_helper.rb +0 -26
- data/spec/spec_helpers/active_record.rb +0 -7
- data/spec/spec_helpers/dynamoid.rb +0 -33
- data/spec/spec_helpers/mongoid.rb +0 -7
- data/spec/spec_helpers/redis.rb +0 -15
- data/spec/spec_helpers/remove_warnings.rb +0 -1
- data/spec/spec_helpers/sequel.rb +0 -7
- data/spec/unit/api_spec.rb +0 -100
- data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
- data/spec/unit/callback_multiple_spec.rb +0 -300
- data/spec/unit/callbacks_spec.rb +0 -491
- data/spec/unit/complex_example_spec.rb +0 -94
- data/spec/unit/complex_multiple_example_spec.rb +0 -115
- data/spec/unit/edge_cases_spec.rb +0 -16
- data/spec/unit/event_multiple_spec.rb +0 -73
- data/spec/unit/event_naming_spec.rb +0 -16
- data/spec/unit/event_spec.rb +0 -381
- data/spec/unit/exception_spec.rb +0 -11
- data/spec/unit/guard_arguments_check_spec.rb +0 -9
- data/spec/unit/guard_multiple_spec.rb +0 -60
- data/spec/unit/guard_spec.rb +0 -89
- data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
- data/spec/unit/guard_with_params_spec.rb +0 -14
- data/spec/unit/guard_without_from_specified_spec.rb +0 -10
- data/spec/unit/initial_state_multiple_spec.rb +0 -15
- data/spec/unit/initial_state_spec.rb +0 -12
- data/spec/unit/inspection_multiple_spec.rb +0 -201
- data/spec/unit/inspection_spec.rb +0 -149
- data/spec/unit/localizer_spec.rb +0 -78
- data/spec/unit/memory_leak_spec.rb +0 -38
- data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
- data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
- data/spec/unit/new_dsl_spec.rb +0 -12
- data/spec/unit/override_warning_spec.rb +0 -94
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
- data/spec/unit/persistence/active_record_persistence_spec.rb +0 -735
- data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
- data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -204
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -169
- data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
- data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
- data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
- data/spec/unit/readme_spec.rb +0 -41
- data/spec/unit/reloading_spec.rb +0 -15
- data/spec/unit/rspec_matcher_spec.rb +0 -79
- data/spec/unit/simple_custom_example_spec.rb +0 -39
- data/spec/unit/simple_example_spec.rb +0 -42
- data/spec/unit/simple_multiple_example_spec.rb +0 -91
- data/spec/unit/state_spec.rb +0 -89
- data/spec/unit/states_on_one_line_example_spec.rb +0 -16
- data/spec/unit/subclassing_multiple_spec.rb +0 -74
- data/spec/unit/subclassing_spec.rb +0 -46
- data/spec/unit/transition_spec.rb +0 -436
- data/test/minitest_helper.rb +0 -57
- data/test/unit/minitest_matcher_test.rb +0 -80
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'state machine' do
|
4
|
-
let(:simple) { SimpleExample.new }
|
5
|
-
let(:multiple) { SimpleMultipleExample.new }
|
6
|
-
|
7
|
-
describe 'transition_from' do
|
8
|
-
it "works for simple state machines" do
|
9
|
-
expect(simple).to transition_from(:initialised).to(:filled_out).on_event(:fill_out)
|
10
|
-
expect(simple).to_not transition_from(:initialised).to(:authorised).on_event(:fill_out)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "works for multiple state machines" do
|
14
|
-
expect(multiple).to transition_from(:standing).to(:walking).on_event(:walk).on(:move)
|
15
|
-
expect(multiple).to_not transition_from(:standing).to(:running).on_event(:walk).on(:move)
|
16
|
-
|
17
|
-
expect(multiple).to transition_from(:sleeping).to(:processing).on_event(:start).on(:work)
|
18
|
-
expect(multiple).to_not transition_from(:sleeping).to(:sleeping).on_event(:start).on(:work)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'allow_transition_to' do
|
23
|
-
it "works for simple state machines" do
|
24
|
-
expect(simple).to allow_transition_to(:filled_out)
|
25
|
-
expect(simple).to_not allow_transition_to(:authorised)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "works for multiple state machines" do
|
29
|
-
expect(multiple).to allow_transition_to(:walking).on(:move)
|
30
|
-
expect(multiple).to_not allow_transition_to(:standing).on(:move)
|
31
|
-
|
32
|
-
expect(multiple).to allow_transition_to(:processing).on(:work)
|
33
|
-
expect(multiple).to_not allow_transition_to(:sleeping).on(:work)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "have_state" do
|
38
|
-
it "works for simple state machines" do
|
39
|
-
expect(simple).to have_state :initialised
|
40
|
-
expect(simple).to_not have_state :filled_out
|
41
|
-
simple.fill_out
|
42
|
-
expect(simple).to have_state :filled_out
|
43
|
-
end
|
44
|
-
|
45
|
-
it "works for multiple state machines" do
|
46
|
-
expect(multiple).to have_state(:standing).on(:move)
|
47
|
-
expect(multiple).to_not have_state(:walking).on(:move)
|
48
|
-
multiple.walk
|
49
|
-
expect(multiple).to have_state(:walking).on(:move)
|
50
|
-
|
51
|
-
expect(multiple).to have_state(:sleeping).on(:work)
|
52
|
-
expect(multiple).to_not have_state(:processing).on(:work)
|
53
|
-
multiple.start
|
54
|
-
expect(multiple).to have_state(:processing).on(:work)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "allow_event" do
|
59
|
-
it "works for simple state machines" do
|
60
|
-
expect(simple).to allow_event :fill_out
|
61
|
-
expect(simple).to_not allow_event :authorise
|
62
|
-
simple.fill_out
|
63
|
-
expect(simple).to allow_event :authorise
|
64
|
-
end
|
65
|
-
|
66
|
-
it "works for multiple state machines" do
|
67
|
-
expect(multiple).to allow_event(:walk).on(:move)
|
68
|
-
expect(multiple).to_not allow_event(:hold).on(:move)
|
69
|
-
multiple.walk
|
70
|
-
expect(multiple).to allow_event(:hold).on(:move)
|
71
|
-
|
72
|
-
expect(multiple).to allow_event(:start).on(:work)
|
73
|
-
expect(multiple).to_not allow_event(:stop).on(:work)
|
74
|
-
multiple.start
|
75
|
-
expect(multiple).to allow_event(:stop).on(:work)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Custom AASM::Base' do
|
4
|
-
context 'when aasm_with invoked with SimpleCustomExample' do
|
5
|
-
let(:simple_custom) { SimpleCustomExample.new }
|
6
|
-
|
7
|
-
subject do
|
8
|
-
simple_custom.fill_out!
|
9
|
-
simple_custom.authorise
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'has invoked authorizable?' do
|
13
|
-
expect { subject }.to change { simple_custom.authorizable_called }.from(nil).to(true)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'has invoked fillable?' do
|
17
|
-
expect { subject }.to change { simple_custom.fillable_called }.from(nil).to(true)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'has two transition counts' do
|
21
|
-
expect { subject }.to change { simple_custom.transition_count }.from(nil).to(2)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'when aasm_with invoked with non AASM::Base' do
|
26
|
-
subject do
|
27
|
-
Class.new do
|
28
|
-
include AASM
|
29
|
-
|
30
|
-
aasm :with_klass => String do
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should raise an ArgumentError' do
|
36
|
-
expect { subject }.to raise_error(ArgumentError, 'The class String must inherit from AASM::Base!')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'state machine' do
|
4
|
-
let(:simple) { SimpleExample.new }
|
5
|
-
|
6
|
-
it 'starts with an initial state' do
|
7
|
-
expect(simple.aasm.current_state).to eq(:initialised)
|
8
|
-
expect(simple).to respond_to(:initialised?)
|
9
|
-
expect(simple).to be_initialised
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'allows transitions to other states' do
|
13
|
-
expect(simple).to respond_to(:fill_out)
|
14
|
-
expect(simple).to respond_to(:fill_out!)
|
15
|
-
simple.fill_out!
|
16
|
-
expect(simple).to respond_to(:filled_out?)
|
17
|
-
expect(simple).to be_filled_out
|
18
|
-
|
19
|
-
expect(simple).to respond_to(:authorise)
|
20
|
-
expect(simple).to respond_to(:authorise!)
|
21
|
-
simple.authorise
|
22
|
-
expect(simple).to respond_to(:authorised?)
|
23
|
-
expect(simple).to be_authorised
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'denies transitions to other states' do
|
27
|
-
expect {simple.authorise}.to raise_error(AASM::InvalidTransition)
|
28
|
-
expect {simple.authorise!}.to raise_error(AASM::InvalidTransition)
|
29
|
-
simple.fill_out
|
30
|
-
expect {simple.fill_out}.to raise_error(AASM::InvalidTransition)
|
31
|
-
expect {simple.fill_out!}.to raise_error(AASM::InvalidTransition)
|
32
|
-
simple.authorise
|
33
|
-
expect {simple.fill_out}.to raise_error(AASM::InvalidTransition)
|
34
|
-
expect {simple.fill_out!}.to raise_error(AASM::InvalidTransition)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'defines constants for each state name' do
|
38
|
-
expect(SimpleExample::STATE_INITIALISED).to eq(:initialised)
|
39
|
-
expect(SimpleExample::STATE_FILLED_OUT).to eq(:filled_out)
|
40
|
-
expect(SimpleExample::STATE_AUTHORISED).to eq(:authorised)
|
41
|
-
end
|
42
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'state machine' do
|
4
|
-
let(:simple) { SimpleMultipleExample.new }
|
5
|
-
|
6
|
-
it 'starts with an initial state' do
|
7
|
-
expect(simple.aasm(:move).current_state).to eq(:standing)
|
8
|
-
expect(simple).to respond_to(:standing?)
|
9
|
-
expect(simple).to be_standing
|
10
|
-
|
11
|
-
expect(simple.aasm(:work).current_state).to eq(:sleeping)
|
12
|
-
expect(simple).to respond_to(:sleeping?)
|
13
|
-
expect(simple).to be_sleeping
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'allows transitions to other states' do
|
17
|
-
expect(simple).to respond_to(:walk)
|
18
|
-
expect(simple).to respond_to(:walk!)
|
19
|
-
simple.walk!
|
20
|
-
expect(simple).to respond_to(:walking?)
|
21
|
-
expect(simple).to be_walking
|
22
|
-
|
23
|
-
expect(simple).to respond_to(:run)
|
24
|
-
expect(simple).to respond_to(:run!)
|
25
|
-
simple.run
|
26
|
-
expect(simple).to respond_to(:running?)
|
27
|
-
expect(simple).to be_running
|
28
|
-
|
29
|
-
expect(simple).to respond_to(:start)
|
30
|
-
expect(simple).to respond_to(:start!)
|
31
|
-
simple.start
|
32
|
-
expect(simple).to respond_to(:processing?)
|
33
|
-
expect(simple).to be_processing
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'denies transitions to other states' do
|
37
|
-
expect {simple.hold}.to raise_error(AASM::InvalidTransition)
|
38
|
-
expect {simple.hold!}.to raise_error(AASM::InvalidTransition)
|
39
|
-
simple.walk
|
40
|
-
expect {simple.walk}.to raise_error(AASM::InvalidTransition)
|
41
|
-
expect {simple.walk!}.to raise_error(AASM::InvalidTransition)
|
42
|
-
simple.run
|
43
|
-
expect {simple.walk}.to raise_error(AASM::InvalidTransition)
|
44
|
-
expect {simple.walk!}.to raise_error(AASM::InvalidTransition)
|
45
|
-
|
46
|
-
expect {simple.stop}.to raise_error(AASM::InvalidTransition)
|
47
|
-
expect {simple.stop!}.to raise_error(AASM::InvalidTransition)
|
48
|
-
simple.start
|
49
|
-
expect {simple.start}.to raise_error(AASM::InvalidTransition)
|
50
|
-
expect {simple.start!}.to raise_error(AASM::InvalidTransition)
|
51
|
-
simple.stop
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'defines constants for each state name' do
|
55
|
-
expect(SimpleMultipleExample::STATE_STANDING).to eq(:standing)
|
56
|
-
expect(SimpleMultipleExample::STATE_WALKING).to eq(:walking)
|
57
|
-
expect(SimpleMultipleExample::STATE_RUNNING).to eq(:running)
|
58
|
-
|
59
|
-
expect(SimpleMultipleExample::STATE_SLEEPING).to eq(:sleeping)
|
60
|
-
expect(SimpleMultipleExample::STATE_PROCESSING).to eq(:processing)
|
61
|
-
expect(SimpleMultipleExample::STATE_RUNNING).to eq(:running)
|
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
|
91
|
-
end
|
data/spec/unit/state_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AASM::Core::State do
|
4
|
-
let(:state_machine) { AASM::StateMachine.new(:name) }
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
@name = :astate
|
8
|
-
@options = { :crazy_custom_key => 'key' }
|
9
|
-
end
|
10
|
-
|
11
|
-
def new_state(options={})
|
12
|
-
AASM::Core::State.new(@name, Conversation, state_machine, @options.merge(options))
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'should set the name' do
|
16
|
-
state = new_state
|
17
|
-
expect(state.name).to eq(:astate)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should set the display_name from name' do
|
21
|
-
expect(new_state.display_name).to eq('Astate')
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should set the display_name from options' do
|
25
|
-
expect(new_state(:display => "A State").display_name).to eq('A State')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'should set the options and expose them as options' do
|
29
|
-
expect(new_state.options).to eq(@options)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should be equal to a symbol of the same name' do
|
33
|
-
expect(new_state).to eq(:astate)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should be equal to a State of the same name' do
|
37
|
-
expect(new_state).to eq(new_state)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should send a message to the record for an action if the action is present as a symbol' do
|
41
|
-
state = new_state(:entering => :foo)
|
42
|
-
|
43
|
-
record = double('record')
|
44
|
-
expect(record).to receive(:foo)
|
45
|
-
|
46
|
-
state.fire_callbacks(:entering, record)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'should send a message to the record for an action if the action is present as a string' do
|
50
|
-
state = new_state(:entering => 'foo')
|
51
|
-
|
52
|
-
record = double('record')
|
53
|
-
expect(record).to receive(:foo)
|
54
|
-
|
55
|
-
state.fire_callbacks(:entering, record)
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'should send a message to the record for each action' do
|
59
|
-
state = new_state(:entering => [:a, :b, "c", lambda {|r| r.foobar }])
|
60
|
-
|
61
|
-
record = double('record')
|
62
|
-
expect(record).to receive(:a)
|
63
|
-
expect(record).to receive(:b)
|
64
|
-
expect(record).to receive(:c)
|
65
|
-
expect(record).to receive(:foobar)
|
66
|
-
|
67
|
-
state.fire_callbacks(:entering, record)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should stop calling actions if one of them raises :halt_aasm_chain" do
|
71
|
-
state = new_state(:entering => [:a, :b, :c])
|
72
|
-
|
73
|
-
record = double('record')
|
74
|
-
expect(record).to receive(:a)
|
75
|
-
expect(record).to receive(:b).and_throw(:halt_aasm_chain)
|
76
|
-
expect(record).not_to receive(:c)
|
77
|
-
|
78
|
-
state.fire_callbacks(:entering, record)
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'should call a proc, passing in the record for an action if the action is present' do
|
82
|
-
state = new_state(:entering => Proc.new {|r| r.foobar})
|
83
|
-
|
84
|
-
record = double('record')
|
85
|
-
expect(record).to receive(:foobar)
|
86
|
-
|
87
|
-
state.fire_callbacks(:entering, record)
|
88
|
-
end
|
89
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe StatesOnOneLineExample do
|
4
|
-
let(:example) { StatesOnOneLineExample.new }
|
5
|
-
describe 'on initialize' do
|
6
|
-
it 'should be in the initial state' do
|
7
|
-
expect(example.aasm(:one_line).current_state).to eql :initial
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe 'states' do
|
12
|
-
it 'should have all 3 states defined' do
|
13
|
-
expect(example.aasm(:one_line).states.map(&:name)).to eq [:initial, :first, :second]
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'subclassing with multiple state machines' do
|
4
|
-
|
5
|
-
it 'should have the parent states' do
|
6
|
-
SuperClassMultiple.aasm(:left).states.each do |state|
|
7
|
-
expect(SubClassWithMoreStatesMultiple.aasm(:left).states).to include(state)
|
8
|
-
end
|
9
|
-
expect(SubClassMultiple.aasm(:left).states).to eq(SuperClassMultiple.aasm(:left).states)
|
10
|
-
|
11
|
-
SuperClassMultiple.aasm(:right).states.each do |state|
|
12
|
-
expect(SubClassWithMoreStatesMultiple.aasm(:right).states).to include(state)
|
13
|
-
end
|
14
|
-
expect(SubClassMultiple.aasm(:right).states).to eq(SuperClassMultiple.aasm(:right).states)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should not add the child states to the parent machine' do
|
18
|
-
expect(SuperClassMultiple.aasm(:left).states).not_to include(:foo)
|
19
|
-
expect(SuperClassMultiple.aasm(:right).states).not_to include(:archived)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should have the same events as its parent' do
|
23
|
-
expect(SubClassMultiple.aasm(:left).events).to eq(SuperClassMultiple.aasm(:left).events)
|
24
|
-
expect(SubClassMultiple.aasm(:right).events).to eq(SuperClassMultiple.aasm(:right).events)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should know how to respond to question methods' do
|
28
|
-
expect(SubClassMultiple.new.may_foo?).to be_truthy
|
29
|
-
expect(SubClassMultiple.new.may_close?).to be_truthy
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'should not break if I call methods from super class' do
|
33
|
-
son = SubClassMultiple.new
|
34
|
-
son.update_state
|
35
|
-
expect(son.aasm(:left).current_state).to eq(:ended)
|
36
|
-
end
|
37
|
-
|
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
|
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
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'subclassing' do
|
4
|
-
|
5
|
-
it 'should have the parent states' do
|
6
|
-
SuperClass.aasm.states.each do |state|
|
7
|
-
expect(SubClassWithMoreStates.aasm.states).to include(state)
|
8
|
-
end
|
9
|
-
expect(SubClass.aasm.states).to eq(SuperClass.aasm.states)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'should not add the child states to the parent machine' do
|
13
|
-
expect(SuperClass.aasm.states).not_to include(:foo)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should have the same events as its parent' do
|
17
|
-
expect(SubClass.aasm.events).to eq(SuperClass.aasm.events)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should know how to respond to question methods' do
|
21
|
-
expect(SubClass.new.may_foo?).to be_truthy
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should not break if I call methods from super class' do
|
25
|
-
son = SubClass.new
|
26
|
-
son.update_state
|
27
|
-
expect(son.aasm.current_state).to eq(:ended)
|
28
|
-
end
|
29
|
-
|
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
|
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
|