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