aasm 5.0.0 → 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 +243 -118
- data/lib/aasm/aasm.rb +29 -27
- data/lib/aasm/base.rb +61 -11
- data/lib/aasm/configuration.rb +3 -0
- data/lib/aasm/core/event.rb +21 -9
- data/lib/aasm/core/invokers/class_invoker.rb +1 -1
- data/lib/aasm/core/invokers/literal_invoker.rb +3 -1
- data/lib/aasm/core/state.rb +6 -5
- data/lib/aasm/core/transition.rb +1 -1
- data/lib/aasm/dsl_helper.rb +24 -22
- data/lib/aasm/errors.rb +3 -1
- 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 +1 -1
- data/lib/aasm/persistence/orm.rb +23 -19
- data/lib/aasm/persistence/redis_persistence.rb +1 -1
- data/lib/aasm/rspec/transition_from.rb +5 -1
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +0 -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
- metadata +35 -385
- data/.document +0 -6
- data/.gitignore +0 -20
- data/.travis.yml +0 -54
- data/API +0 -34
- data/Appraisals +0 -66
- data/CHANGELOG.md +0 -377
- data/CODE_OF_CONDUCT.md +0 -13
- data/CONTRIBUTING.md +0 -24
- data/Dockerfile +0 -44
- data/Gemfile +0 -6
- 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/docker-compose.yml +0 -40
- 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_4.2_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.0.gemfile +0 -13
- data/gemfiles/rails_5.0_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.1.gemfile +0 -13
- 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/generators/no_brainer_generator_spec.rb +0 -29
- 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/nobrainer/complex_no_brainer_example.rb +0 -36
- data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/no_scope_no_brainer.rb +0 -21
- data/spec/models/nobrainer/nobrainer_relationships.rb +0 -25
- data/spec/models/nobrainer/silent_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +0 -25
- data/spec/models/nobrainer/simple_no_brainer.rb +0 -23
- data/spec/models/nobrainer/validator_no_brainer.rb +0 -98
- 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 -17
- data/spec/models/simple_example_with_guard_args.rb +0 -17
- 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 -8
- data/spec/spec_helpers/dynamoid.rb +0 -35
- data/spec/spec_helpers/mongoid.rb +0 -26
- data/spec/spec_helpers/nobrainer.rb +0 -15
- data/spec/spec_helpers/redis.rb +0 -18
- 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/invoker_spec.rb +0 -189
- data/spec/unit/invokers/base_invoker_spec.rb +0 -72
- data/spec/unit/invokers/class_invoker_spec.rb +0 -95
- data/spec/unit/invokers/literal_invoker_spec.rb +0 -86
- data/spec/unit/invokers/proc_invoker_spec.rb +0 -86
- 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 -200
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -165
- data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +0 -198
- data/spec/unit/persistence/no_brainer_persistence_spec.rb +0 -158
- 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 -85
- 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,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AASM::Core::Invokers::ClassInvoker do
|
4
|
-
let(:target) { Class.new { def call; end } }
|
5
|
-
let(:record) { double }
|
6
|
-
let(:args) { [] }
|
7
|
-
|
8
|
-
subject { described_class.new(target, record, args) }
|
9
|
-
|
10
|
-
describe '#may_invoke?' do
|
11
|
-
context 'when subject is a Class and responds to #call' do
|
12
|
-
it 'then returns "true"' do
|
13
|
-
expect(subject.may_invoke?).to eq(true)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when subject is not a class or not respond to #call' do
|
18
|
-
let(:target) { Class.new {} }
|
19
|
-
|
20
|
-
it 'then returns "false"' do
|
21
|
-
expect(subject.may_invoke?).to eq(false)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#log_failure' do
|
27
|
-
context 'when subject respond to #source_location' do
|
28
|
-
it 'then adds "source_location" to a failures buffer' do
|
29
|
-
subject.log_failure
|
30
|
-
|
31
|
-
expect(subject.failures)
|
32
|
-
.to eq([target.instance_method(:call).source_location.join('#')])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'when subject does not respond to #source_location' do
|
37
|
-
before do
|
38
|
-
Method.__send__(:alias_method, :original_source_location, :source_location)
|
39
|
-
Method.__send__(:undef_method, :source_location)
|
40
|
-
end
|
41
|
-
|
42
|
-
after do
|
43
|
-
Method.__send__(
|
44
|
-
:define_method,
|
45
|
-
:source_location,
|
46
|
-
Method.instance_method(:original_source_location)
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'then adds the subject to a failures buffer' do
|
51
|
-
subject.log_failure
|
52
|
-
|
53
|
-
expect(subject.failures.first).to be_a(Method)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#invoke_subject' do
|
59
|
-
context 'when passing no arguments' do
|
60
|
-
let(:args) { [1, 2 ,3] }
|
61
|
-
let(:target) { Class.new { def call; end } }
|
62
|
-
|
63
|
-
it 'then correctly uses passed arguments' do
|
64
|
-
expect { subject.invoke_subject }.not_to raise_error
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'when passing single argument' do
|
69
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
70
|
-
let(:target) { Class.new { def initialize(_a); end; def call; end } }
|
71
|
-
|
72
|
-
it 'then correctly uses passed arguments' do
|
73
|
-
expect { subject.invoke_subject }.not_to raise_error
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when passing variable number arguments' do
|
78
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
79
|
-
let(:target) { Class.new { def initialize(_a, _b, *_c); end; def call; end } }
|
80
|
-
|
81
|
-
it 'then correctly uses passed arguments' do
|
82
|
-
expect { subject.invoke_subject }.not_to raise_error
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'when passing one or more arguments' do
|
87
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
88
|
-
let(:target) { Class.new { def initialize(_a, _b, _c); end; def call; end } }
|
89
|
-
|
90
|
-
it 'then correctly uses passed arguments' do
|
91
|
-
expect { subject.invoke_subject }.not_to raise_error
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AASM::Core::Invokers::LiteralInvoker do
|
4
|
-
let(:target) { nil }
|
5
|
-
let(:record) { double }
|
6
|
-
let(:args) { [] }
|
7
|
-
|
8
|
-
subject { described_class.new(target, record, args) }
|
9
|
-
|
10
|
-
describe '#may_invoke?' do
|
11
|
-
context 'when subject is a Symbol' do
|
12
|
-
let(:target) { :i_am_symbol }
|
13
|
-
|
14
|
-
it 'then returns "true"' do
|
15
|
-
expect(subject.may_invoke?).to eq(true)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context 'when subject is a String' do
|
20
|
-
let(:target) { 'i_am_string' }
|
21
|
-
|
22
|
-
it 'then returns "true"' do
|
23
|
-
expect(subject.may_invoke?).to eq(true)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'when subject is neither a String nor Symbol' do
|
28
|
-
let(:target) { double }
|
29
|
-
|
30
|
-
it 'then returns "false"' do
|
31
|
-
expect(subject.may_invoke?).to eq(false)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#log_failure' do
|
37
|
-
let(:target) { Proc.new { false } }
|
38
|
-
|
39
|
-
it 'then adds the subject to a failures buffer' do
|
40
|
-
subject.log_failure
|
41
|
-
|
42
|
-
expect(subject.failures).to eq([target])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe '#invoke_subject' do
|
47
|
-
context 'when passing no arguments' do
|
48
|
-
let(:record) { Class.new { def my_method; end }.new }
|
49
|
-
let(:args) { [1, 2 ,3] }
|
50
|
-
let(:target) { :my_method }
|
51
|
-
|
52
|
-
it 'then correctly uses passed arguments' do
|
53
|
-
expect { subject.invoke_subject }.not_to raise_error
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'when passing variable number arguments' do
|
58
|
-
let(:record) { Class.new { def my_method(_a, _b, *_c); end }.new }
|
59
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
60
|
-
let(:target) { :my_method }
|
61
|
-
|
62
|
-
it 'then correctly uses passed arguments' do
|
63
|
-
expect { subject.invoke_subject }.not_to raise_error
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'when passing one or more arguments' do
|
68
|
-
let(:record) { Class.new { def my_method(_a, _b, _c); end }.new }
|
69
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
70
|
-
let(:target) { :my_method }
|
71
|
-
|
72
|
-
it 'then correctly uses passed arguments' do
|
73
|
-
expect { subject.invoke_subject }.not_to raise_error
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when record does not respond to subject' do
|
78
|
-
let(:record) { Class.new { }.new }
|
79
|
-
let(:target) { :my_method }
|
80
|
-
|
81
|
-
it 'then raises uses passed arguments' do
|
82
|
-
expect { subject.invoke_subject }.to raise_error(NoMethodError)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AASM::Core::Invokers::ProcInvoker do
|
4
|
-
let(:target) { Proc.new {} }
|
5
|
-
let(:record) { double }
|
6
|
-
let(:args) { [] }
|
7
|
-
|
8
|
-
subject { described_class.new(target, record, args) }
|
9
|
-
|
10
|
-
describe '#may_invoke?' do
|
11
|
-
context 'when subject is a Proc' do
|
12
|
-
it 'then returns "true"' do
|
13
|
-
expect(subject.may_invoke?).to eq(true)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when subject is not a Proc' do
|
18
|
-
let(:target) { nil }
|
19
|
-
|
20
|
-
it 'then returns "false"' do
|
21
|
-
expect(subject.may_invoke?).to eq(false)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#log_failure' do
|
27
|
-
context 'when subject respond to #source_location' do
|
28
|
-
it 'then adds "source_location" to a failures buffer' do
|
29
|
-
subject.log_failure
|
30
|
-
|
31
|
-
expect(subject.failures)
|
32
|
-
.to eq([target.source_location.join('#')])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context 'when subject does not respond to #source_location' do
|
37
|
-
before do
|
38
|
-
Method.__send__(:alias_method, :original_source_location, :source_location)
|
39
|
-
Method.__send__(:undef_method, :source_location)
|
40
|
-
end
|
41
|
-
|
42
|
-
after do
|
43
|
-
Method.__send__(
|
44
|
-
:define_method,
|
45
|
-
:source_location,
|
46
|
-
Method.instance_method(:original_source_location)
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'then adds the subject to a failures buffer' do
|
51
|
-
subject.log_failure
|
52
|
-
|
53
|
-
expect(subject.failures).to eq([target])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#invoke_subject' do
|
59
|
-
context 'when passing no arguments' do
|
60
|
-
let(:args) { [1, 2 ,3] }
|
61
|
-
let(:target) { ->() {} }
|
62
|
-
|
63
|
-
it 'then correctly uses passed arguments' do
|
64
|
-
expect { subject.invoke_subject }.not_to raise_error
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'when passing variable number arguments' do
|
69
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
70
|
-
let(:target) { ->(_a, _b, *_c) {} }
|
71
|
-
|
72
|
-
it 'then correctly uses passed arguments' do
|
73
|
-
expect { subject.invoke_subject }.not_to raise_error
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when passing one or more arguments' do
|
78
|
-
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
79
|
-
let(:target) { ->(_a, _b, _c) {} }
|
80
|
-
|
81
|
-
it 'then correctly uses passed arguments' do
|
82
|
-
expect { subject.invoke_subject }.not_to raise_error
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
data/spec/unit/localizer_spec.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined?(ActiceRecord)
|
4
|
-
require 'i18n'
|
5
|
-
|
6
|
-
I18n.enforce_available_locales = false
|
7
|
-
load_schema
|
8
|
-
|
9
|
-
describe AASM::Localizer, "new style" do
|
10
|
-
before(:all) do
|
11
|
-
I18n.load_path << 'spec/en.yml'
|
12
|
-
I18n.default_locale = :en
|
13
|
-
I18n.reload!
|
14
|
-
end
|
15
|
-
|
16
|
-
after(:all) do
|
17
|
-
I18n.load_path.clear
|
18
|
-
end
|
19
|
-
|
20
|
-
let (:foo_opened) { LocalizerTestModel.new }
|
21
|
-
let (:foo_closed) { LocalizerTestModel.new.tap { |x| x.aasm_state = :closed } }
|
22
|
-
|
23
|
-
context 'aasm.human_state' do
|
24
|
-
it 'should return translated state value' do
|
25
|
-
expect(foo_opened.aasm.human_state).to eq("It's open now!")
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'should return humanized value if not localized' do
|
29
|
-
expect(foo_closed.aasm.human_state).to eq("Closed")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'aasm.human_event_name' do
|
34
|
-
it 'should return translated event name' do
|
35
|
-
expect(LocalizerTestModel.aasm.human_event_name(:close)).to eq("Let's close it!")
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'should return humanized event name' do
|
39
|
-
expect(LocalizerTestModel.aasm.human_event_name(:open)).to eq("Open")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe AASM::Localizer, "deprecated style" do
|
45
|
-
before(:all) do
|
46
|
-
I18n.load_path << 'spec/en_deprecated_style.yml'
|
47
|
-
I18n.default_locale = :en
|
48
|
-
I18n.reload!
|
49
|
-
end
|
50
|
-
|
51
|
-
after(:all) do
|
52
|
-
I18n.load_path.clear
|
53
|
-
end
|
54
|
-
|
55
|
-
let (:foo_opened) { LocalizerTestModel.new }
|
56
|
-
let (:foo_closed) { LocalizerTestModel.new.tap { |x| x.aasm_state = :closed } }
|
57
|
-
|
58
|
-
context 'aasm.human_state' do
|
59
|
-
it 'should return translated state value' do
|
60
|
-
expect(foo_opened.aasm.human_state).to eq("It's open now!")
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should return humanized value if not localized' do
|
64
|
-
expect(foo_closed.aasm.human_state).to eq("Closed")
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'aasm.human_event_name' do
|
69
|
-
it 'should return translated event name' do
|
70
|
-
expect(LocalizerTestModel.aasm.human_event_name(:close)).to eq("Let's close it!")
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'should return humanized event name' do
|
74
|
-
expect(LocalizerTestModel.aasm.human_event_name(:open)).to eq("Open")
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# require 'spec_helper'
|
2
|
-
|
3
|
-
# describe "state machines" do
|
4
|
-
|
5
|
-
# def number_of_objects(klass)
|
6
|
-
# ObjectSpace.each_object(klass) {}
|
7
|
-
# end
|
8
|
-
|
9
|
-
# def machines
|
10
|
-
# AASM::StateMachineStore.instance_variable_get("@stores")
|
11
|
-
# end
|
12
|
-
|
13
|
-
# it "should be created without memory leak" do
|
14
|
-
# machines_count = machines.size
|
15
|
-
# state_count = number_of_objects(AASM::Core::State)
|
16
|
-
# event_count = number_of_objects(AASM::Core::Event)
|
17
|
-
# puts "event_count = #{event_count}"
|
18
|
-
# transition_count = number_of_objects(AASM::Core::Transition)
|
19
|
-
|
20
|
-
# load File.expand_path(File.dirname(__FILE__) + '/../models/not_auto_loaded/process.rb')
|
21
|
-
# machines.size.should == machines_count + 1 # + Process
|
22
|
-
# number_of_objects(Models::Process).should == 0
|
23
|
-
# number_of_objects(AASM::Core::State).should == state_count + 3 # + Process
|
24
|
-
# puts "event_count = #{number_of_objects(AASM::Core::Event)}"
|
25
|
-
# number_of_objects(AASM::Core::Event).should == event_count + 2 # + Process
|
26
|
-
# number_of_objects(AASM::Core::Transition).should == transition_count + 2 # + Process
|
27
|
-
|
28
|
-
# Models.send(:remove_const, "Process") if Models.const_defined?("Process")
|
29
|
-
# load File.expand_path(File.dirname(__FILE__) + '/../models/not_auto_loaded/process.rb')
|
30
|
-
# machines.size.should == machines_count + 1 # + Process
|
31
|
-
# number_of_objects(AASM::Core::State).should == state_count + 3 # + Process
|
32
|
-
# # ObjectSpace.each_object(AASM::Core::Event) {|o| puts o.inspect}
|
33
|
-
# puts "event_count = #{number_of_objects(AASM::Core::Event)}"
|
34
|
-
# number_of_objects(AASM::Core::Event).should == event_count + 2 # + Process
|
35
|
-
# number_of_objects(AASM::Core::Transition).should == transition_count + 2 # + Process
|
36
|
-
# end
|
37
|
-
|
38
|
-
# end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "multiple transitions that differ only by guard" do
|
4
|
-
let(:job) { MultipleTransitionsThatDifferOnlyByGuard.new }
|
5
|
-
|
6
|
-
it 'does not follow the first transition if its guard fails' do
|
7
|
-
expect{job.go}.not_to raise_error
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'executes the second transition\'s callbacks' do
|
11
|
-
job.go
|
12
|
-
expect(job.executed_second).to be_truthy
|
13
|
-
end
|
14
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'state machine' do
|
4
|
-
let(:namespaced) { NamespacedMultipleExample.new }
|
5
|
-
|
6
|
-
it 'starts with an initial state' do
|
7
|
-
expect(namespaced.aasm(:status).current_state).to eq(:unapproved)
|
8
|
-
expect(namespaced).to respond_to(:unapproved?)
|
9
|
-
expect(namespaced).to be_unapproved
|
10
|
-
|
11
|
-
expect(namespaced.aasm(:review_status).current_state).to eq(:unapproved)
|
12
|
-
expect(namespaced).to respond_to(:review_unapproved?)
|
13
|
-
expect(namespaced).to be_review_unapproved
|
14
|
-
|
15
|
-
expect(namespaced.aasm(:car).current_state).to eq(:unsold)
|
16
|
-
expect(namespaced).to respond_to(:car_unsold?)
|
17
|
-
expect(namespaced).to be_car_unsold
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'allows transitions to other states' do
|
21
|
-
expect(namespaced).to respond_to(:approve)
|
22
|
-
expect(namespaced).to respond_to(:approve!)
|
23
|
-
namespaced.approve!
|
24
|
-
expect(namespaced).to respond_to(:approved?)
|
25
|
-
expect(namespaced).to be_approved
|
26
|
-
|
27
|
-
expect(namespaced).to respond_to(:approve_review)
|
28
|
-
expect(namespaced).to respond_to(:approve_review!)
|
29
|
-
namespaced.approve_review!
|
30
|
-
expect(namespaced).to respond_to(:review_approved?)
|
31
|
-
expect(namespaced).to be_review_approved
|
32
|
-
|
33
|
-
expect(namespaced).to respond_to(:sell_car)
|
34
|
-
expect(namespaced).to respond_to(:sell_car!)
|
35
|
-
namespaced.sell_car!
|
36
|
-
expect(namespaced).to respond_to(:car_sold?)
|
37
|
-
expect(namespaced).to be_car_sold
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'denies transitions to other states' do
|
41
|
-
expect {namespaced.unapprove}.to raise_error(AASM::InvalidTransition)
|
42
|
-
expect {namespaced.unapprove!}.to raise_error(AASM::InvalidTransition)
|
43
|
-
namespaced.approve
|
44
|
-
expect {namespaced.approve}.to raise_error(AASM::InvalidTransition)
|
45
|
-
expect {namespaced.approve!}.to raise_error(AASM::InvalidTransition)
|
46
|
-
namespaced.unapprove
|
47
|
-
|
48
|
-
expect {namespaced.unapprove_review}.to raise_error(AASM::InvalidTransition)
|
49
|
-
expect {namespaced.unapprove_review!}.to raise_error(AASM::InvalidTransition)
|
50
|
-
namespaced.approve_review
|
51
|
-
expect {namespaced.approve_review}.to raise_error(AASM::InvalidTransition)
|
52
|
-
expect {namespaced.approve_review!}.to raise_error(AASM::InvalidTransition)
|
53
|
-
namespaced.unapprove_review
|
54
|
-
|
55
|
-
expect {namespaced.return_car}.to raise_error(AASM::InvalidTransition)
|
56
|
-
expect {namespaced.return_car!}.to raise_error(AASM::InvalidTransition)
|
57
|
-
namespaced.sell_car
|
58
|
-
expect {namespaced.sell_car}.to raise_error(AASM::InvalidTransition)
|
59
|
-
expect {namespaced.sell_car!}.to raise_error(AASM::InvalidTransition)
|
60
|
-
namespaced.return_car
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'defines constants for each state name' do
|
64
|
-
expect(NamespacedMultipleExample::STATE_UNAPPROVED).to eq(:unapproved)
|
65
|
-
expect(NamespacedMultipleExample::STATE_APPROVED).to eq(:approved)
|
66
|
-
|
67
|
-
expect(NamespacedMultipleExample::STATE_REVIEW_UNAPPROVED).to eq(:unapproved)
|
68
|
-
expect(NamespacedMultipleExample::STATE_REVIEW_APPROVED).to eq(:approved)
|
69
|
-
|
70
|
-
expect(NamespacedMultipleExample::STATE_CAR_UNSOLD).to eq(:unsold)
|
71
|
-
expect(NamespacedMultipleExample::STATE_CAR_SOLD).to eq(:sold)
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
end
|
data/spec/unit/new_dsl_spec.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "the new dsl" do
|
4
|
-
|
5
|
-
let(:process) {ProcessWithNewDsl.new}
|
6
|
-
|
7
|
-
it 'should not conflict with other event or state methods' do
|
8
|
-
expect {ProcessWithNewDsl.state}.to raise_error(RuntimeError, "wrong state method")
|
9
|
-
expect {ProcessWithNewDsl.event}.to raise_error(RuntimeError, "wrong event method")
|
10
|
-
end
|
11
|
-
|
12
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'warns when overrides a method' do
|
4
|
-
before do
|
5
|
-
AASM::Configuration.hide_warnings = false
|
6
|
-
end
|
7
|
-
|
8
|
-
after do
|
9
|
-
AASM::Configuration.hide_warnings = true
|
10
|
-
end
|
11
|
-
|
12
|
-
module Clumsy
|
13
|
-
def self.included base
|
14
|
-
base.send :include, AASM
|
15
|
-
|
16
|
-
base.aasm do
|
17
|
-
state :valid
|
18
|
-
event(:save) { }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
module WithEnumBase
|
24
|
-
def self.included base
|
25
|
-
base.send :include, AASM
|
26
|
-
base.instance_eval do
|
27
|
-
def defined_enums
|
28
|
-
{ 'state' => { 'valid' => 0, 'invalid' => 1 } }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
base.aasm enum: true do
|
32
|
-
state :valid
|
33
|
-
event(:save) { }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe 'state' do
|
39
|
-
let(:base_klass) do
|
40
|
-
Class.new do
|
41
|
-
def valid?; end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
subject { base_klass.send :include, Clumsy }
|
46
|
-
|
47
|
-
it 'should log to warn' do
|
48
|
-
expect_any_instance_of(Logger).to receive(:warn).with(": overriding method 'valid?'!")
|
49
|
-
subject
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'enum' do
|
54
|
-
let(:enum_base_klass) do
|
55
|
-
Class.new do
|
56
|
-
def valid?; end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
subject { enum_base_klass.send :include, WithEnumBase }
|
61
|
-
|
62
|
-
it 'should not log to warn' do
|
63
|
-
expect_any_instance_of(Logger).to receive(:warn).never
|
64
|
-
subject
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe 'event' do
|
69
|
-
context 'may?' do
|
70
|
-
let(:base_klass) do
|
71
|
-
Class.new do
|
72
|
-
def may_save?; end
|
73
|
-
def save!; end
|
74
|
-
def save; end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
subject { base_klass.send :include, Clumsy }
|
79
|
-
|
80
|
-
it 'should log to warn' do
|
81
|
-
expect_any_instance_of(Logger).to receive(:warn).exactly(3).times do |logger, message|
|
82
|
-
expect(
|
83
|
-
[
|
84
|
-
": overriding method 'may_save?'!",
|
85
|
-
": overriding method 'save!'!",
|
86
|
-
": overriding method 'save'!"
|
87
|
-
]
|
88
|
-
).to include(message)
|
89
|
-
end
|
90
|
-
subject
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|