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.
Files changed (218) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +284 -119
  3. data/lib/aasm/aasm.rb +30 -27
  4. data/lib/aasm/base.rb +61 -11
  5. data/lib/aasm/configuration.rb +3 -0
  6. data/lib/aasm/core/event.rb +26 -30
  7. data/lib/aasm/core/invoker.rb +129 -0
  8. data/lib/aasm/core/invokers/base_invoker.rb +75 -0
  9. data/lib/aasm/core/invokers/class_invoker.rb +52 -0
  10. data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
  11. data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
  12. data/lib/aasm/core/state.rb +16 -14
  13. data/lib/aasm/core/transition.rb +8 -69
  14. data/lib/aasm/dsl_helper.rb +24 -22
  15. data/lib/aasm/errors.rb +5 -3
  16. data/lib/aasm/instance_base.rb +28 -5
  17. data/lib/aasm/localizer.rb +13 -3
  18. data/lib/aasm/persistence/active_record_persistence.rb +25 -5
  19. data/lib/aasm/persistence/base.rb +14 -3
  20. data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
  21. data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
  22. data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
  23. data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
  24. data/lib/aasm/persistence/orm.rb +23 -19
  25. data/lib/aasm/persistence/plain_persistence.rb +2 -1
  26. data/lib/aasm/persistence/redis_persistence.rb +1 -1
  27. data/lib/aasm/persistence/sequel_persistence.rb +0 -1
  28. data/lib/aasm/persistence.rb +3 -0
  29. data/lib/aasm/rspec/allow_event.rb +5 -1
  30. data/lib/aasm/rspec/allow_transition_to.rb +5 -1
  31. data/lib/aasm/rspec/transition_from.rb +5 -1
  32. data/lib/aasm/version.rb +1 -1
  33. data/lib/aasm.rb +5 -2
  34. data/lib/generators/aasm/orm_helpers.rb +7 -1
  35. data/lib/generators/active_record/aasm_generator.rb +3 -1
  36. data/lib/generators/active_record/templates/migration.rb +1 -1
  37. data/lib/generators/nobrainer/aasm_generator.rb +28 -0
  38. data/lib/motion-aasm.rb +1 -0
  39. metadata +42 -344
  40. data/.document +0 -6
  41. data/.gitignore +0 -20
  42. data/.travis.yml +0 -52
  43. data/API +0 -34
  44. data/Appraisals +0 -43
  45. data/CHANGELOG.md +0 -370
  46. data/CODE_OF_CONDUCT.md +0 -13
  47. data/CONTRIBUTING.md +0 -24
  48. data/Gemfile +0 -7
  49. data/Gemfile.lock_old +0 -151
  50. data/HOWTO +0 -12
  51. data/PLANNED_CHANGES.md +0 -11
  52. data/README_FROM_VERSION_3_TO_4.md +0 -240
  53. data/Rakefile +0 -31
  54. data/TESTING.md +0 -25
  55. data/aasm.gemspec +0 -35
  56. data/callbacks.txt +0 -51
  57. data/gemfiles/rails_3.2.gemfile +0 -13
  58. data/gemfiles/rails_4.0.gemfile +0 -15
  59. data/gemfiles/rails_4.2.gemfile +0 -16
  60. data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
  61. data/gemfiles/rails_5.0.gemfile +0 -14
  62. data/spec/database.rb +0 -44
  63. data/spec/database.yml +0 -3
  64. data/spec/en.yml +0 -12
  65. data/spec/en_deprecated_style.yml +0 -10
  66. data/spec/generators/active_record_generator_spec.rb +0 -47
  67. data/spec/generators/mongoid_generator_spec.rb +0 -31
  68. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
  69. data/spec/models/active_record/complex_active_record_example.rb +0 -37
  70. data/spec/models/active_record/derivate_new_dsl.rb +0 -7
  71. data/spec/models/active_record/false_state.rb +0 -35
  72. data/spec/models/active_record/gate.rb +0 -39
  73. data/spec/models/active_record/invalid_persistor.rb +0 -29
  74. data/spec/models/active_record/localizer_test_model.rb +0 -34
  75. data/spec/models/active_record/no_direct_assignment.rb +0 -21
  76. data/spec/models/active_record/no_scope.rb +0 -21
  77. data/spec/models/active_record/persisted_state.rb +0 -12
  78. data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
  79. data/spec/models/active_record/reader.rb +0 -7
  80. data/spec/models/active_record/readme_job.rb +0 -21
  81. data/spec/models/active_record/silent_persistor.rb +0 -29
  82. data/spec/models/active_record/simple_new_dsl.rb +0 -17
  83. data/spec/models/active_record/thief.rb +0 -29
  84. data/spec/models/active_record/transactor.rb +0 -124
  85. data/spec/models/active_record/transient.rb +0 -6
  86. data/spec/models/active_record/validator.rb +0 -118
  87. data/spec/models/active_record/with_enum.rb +0 -39
  88. data/spec/models/active_record/with_enum_without_column.rb +0 -38
  89. data/spec/models/active_record/with_false_enum.rb +0 -31
  90. data/spec/models/active_record/with_true_enum.rb +0 -39
  91. data/spec/models/active_record/worker.rb +0 -2
  92. data/spec/models/active_record/writer.rb +0 -6
  93. data/spec/models/basic_two_state_machines_example.rb +0 -25
  94. data/spec/models/callbacks/basic.rb +0 -98
  95. data/spec/models/callbacks/basic_multiple.rb +0 -75
  96. data/spec/models/callbacks/guard_within_block.rb +0 -67
  97. data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
  98. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
  99. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
  100. data/spec/models/callbacks/private_method.rb +0 -44
  101. data/spec/models/callbacks/private_method_multiple.rb +0 -44
  102. data/spec/models/callbacks/with_args.rb +0 -62
  103. data/spec/models/callbacks/with_args_multiple.rb +0 -61
  104. data/spec/models/callbacks/with_state_arg.rb +0 -30
  105. data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
  106. data/spec/models/complex_example.rb +0 -222
  107. data/spec/models/conversation.rb +0 -93
  108. data/spec/models/default_state.rb +0 -12
  109. data/spec/models/double_definer.rb +0 -21
  110. data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
  111. data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
  112. data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
  113. data/spec/models/foo.rb +0 -106
  114. data/spec/models/foo_callback_multiple.rb +0 -45
  115. data/spec/models/guard_arguments_check.rb +0 -17
  116. data/spec/models/guard_with_params.rb +0 -24
  117. data/spec/models/guard_with_params_multiple.rb +0 -18
  118. data/spec/models/guardian.rb +0 -58
  119. data/spec/models/guardian_multiple.rb +0 -48
  120. data/spec/models/guardian_without_from_specified.rb +0 -18
  121. data/spec/models/initial_state_proc.rb +0 -31
  122. data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
  123. data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
  124. data/spec/models/mongoid/mongoid_relationships.rb +0 -26
  125. data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
  126. data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
  127. data/spec/models/mongoid/simple_mongoid.rb +0 -23
  128. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
  129. data/spec/models/mongoid/validator_mongoid.rb +0 -100
  130. data/spec/models/multi_transitioner.rb +0 -34
  131. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
  132. data/spec/models/namespaced_multiple_example.rb +0 -42
  133. data/spec/models/no_initial_state.rb +0 -25
  134. data/spec/models/not_auto_loaded/process.rb +0 -21
  135. data/spec/models/parametrised_event.rb +0 -42
  136. data/spec/models/parametrised_event_multiple.rb +0 -29
  137. data/spec/models/process_with_new_dsl.rb +0 -31
  138. data/spec/models/provided_state.rb +0 -24
  139. data/spec/models/redis/complex_redis_example.rb +0 -40
  140. data/spec/models/redis/redis_multiple.rb +0 -20
  141. data/spec/models/redis/redis_simple.rb +0 -20
  142. data/spec/models/sequel/complex_sequel_example.rb +0 -46
  143. data/spec/models/sequel/invalid_persistor.rb +0 -52
  144. data/spec/models/sequel/sequel_multiple.rb +0 -25
  145. data/spec/models/sequel/sequel_simple.rb +0 -26
  146. data/spec/models/sequel/silent_persistor.rb +0 -50
  147. data/spec/models/sequel/transactor.rb +0 -112
  148. data/spec/models/sequel/validator.rb +0 -93
  149. data/spec/models/sequel/worker.rb +0 -12
  150. data/spec/models/silencer.rb +0 -27
  151. data/spec/models/simple_custom_example.rb +0 -53
  152. data/spec/models/simple_example.rb +0 -15
  153. data/spec/models/simple_multiple_example.rb +0 -42
  154. data/spec/models/state_machine_with_failed_event.rb +0 -20
  155. data/spec/models/states_on_one_line_example.rb +0 -8
  156. data/spec/models/sub_class.rb +0 -41
  157. data/spec/models/sub_class_with_more_states.rb +0 -18
  158. data/spec/models/sub_classing.rb +0 -3
  159. data/spec/models/super_class.rb +0 -46
  160. data/spec/models/this_name_better_not_be_in_use.rb +0 -11
  161. data/spec/models/valid_state_name.rb +0 -23
  162. data/spec/spec_helper.rb +0 -26
  163. data/spec/spec_helpers/active_record.rb +0 -7
  164. data/spec/spec_helpers/dynamoid.rb +0 -33
  165. data/spec/spec_helpers/mongoid.rb +0 -7
  166. data/spec/spec_helpers/redis.rb +0 -15
  167. data/spec/spec_helpers/remove_warnings.rb +0 -1
  168. data/spec/spec_helpers/sequel.rb +0 -7
  169. data/spec/unit/api_spec.rb +0 -100
  170. data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
  171. data/spec/unit/callback_multiple_spec.rb +0 -300
  172. data/spec/unit/callbacks_spec.rb +0 -491
  173. data/spec/unit/complex_example_spec.rb +0 -94
  174. data/spec/unit/complex_multiple_example_spec.rb +0 -115
  175. data/spec/unit/edge_cases_spec.rb +0 -16
  176. data/spec/unit/event_multiple_spec.rb +0 -73
  177. data/spec/unit/event_naming_spec.rb +0 -16
  178. data/spec/unit/event_spec.rb +0 -381
  179. data/spec/unit/exception_spec.rb +0 -11
  180. data/spec/unit/guard_arguments_check_spec.rb +0 -9
  181. data/spec/unit/guard_multiple_spec.rb +0 -60
  182. data/spec/unit/guard_spec.rb +0 -89
  183. data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
  184. data/spec/unit/guard_with_params_spec.rb +0 -14
  185. data/spec/unit/guard_without_from_specified_spec.rb +0 -10
  186. data/spec/unit/initial_state_multiple_spec.rb +0 -15
  187. data/spec/unit/initial_state_spec.rb +0 -12
  188. data/spec/unit/inspection_multiple_spec.rb +0 -201
  189. data/spec/unit/inspection_spec.rb +0 -149
  190. data/spec/unit/localizer_spec.rb +0 -78
  191. data/spec/unit/memory_leak_spec.rb +0 -38
  192. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
  193. data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
  194. data/spec/unit/new_dsl_spec.rb +0 -12
  195. data/spec/unit/override_warning_spec.rb +0 -94
  196. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
  197. data/spec/unit/persistence/active_record_persistence_spec.rb +0 -735
  198. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
  199. data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
  200. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -204
  201. data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -169
  202. data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
  203. data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
  204. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
  205. data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
  206. data/spec/unit/readme_spec.rb +0 -41
  207. data/spec/unit/reloading_spec.rb +0 -15
  208. data/spec/unit/rspec_matcher_spec.rb +0 -79
  209. data/spec/unit/simple_custom_example_spec.rb +0 -39
  210. data/spec/unit/simple_example_spec.rb +0 -42
  211. data/spec/unit/simple_multiple_example_spec.rb +0 -91
  212. data/spec/unit/state_spec.rb +0 -89
  213. data/spec/unit/states_on_one_line_example_spec.rb +0 -16
  214. data/spec/unit/subclassing_multiple_spec.rb +0 -74
  215. data/spec/unit/subclassing_spec.rb +0 -46
  216. data/spec/unit/transition_spec.rb +0 -436
  217. data/test/minitest_helper.rb +0 -57
  218. 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
@@ -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