aasm 5.1.1 → 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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -15
  3. data/lib/aasm/base.rb +44 -12
  4. data/lib/aasm/configuration.rb +3 -0
  5. data/lib/aasm/core/event.rb +12 -6
  6. data/lib/aasm/core/invokers/class_invoker.rb +1 -1
  7. data/lib/aasm/core/invokers/literal_invoker.rb +3 -1
  8. data/lib/aasm/core/state.rb +6 -5
  9. data/lib/aasm/core/transition.rb +1 -1
  10. data/lib/aasm/dsl_helper.rb +24 -22
  11. data/lib/aasm/errors.rb +1 -0
  12. data/lib/aasm/instance_base.rb +14 -3
  13. data/lib/aasm/localizer.rb +13 -3
  14. data/lib/aasm/persistence/active_record_persistence.rb +1 -1
  15. data/lib/aasm/persistence/base.rb +13 -2
  16. data/lib/aasm/version.rb +1 -1
  17. data/lib/generators/aasm/orm_helpers.rb +1 -1
  18. data/lib/generators/active_record/templates/migration.rb +1 -1
  19. metadata +6 -402
  20. data/.document +0 -6
  21. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -27
  22. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  23. data/.gitignore +0 -20
  24. data/.travis.yml +0 -82
  25. data/API +0 -34
  26. data/Appraisals +0 -67
  27. data/CHANGELOG.md +0 -442
  28. data/CODE_OF_CONDUCT.md +0 -13
  29. data/CONTRIBUTING.md +0 -24
  30. data/Dockerfile +0 -44
  31. data/Gemfile +0 -6
  32. data/Gemfile.lock_old +0 -151
  33. data/HOWTO +0 -12
  34. data/PLANNED_CHANGES.md +0 -11
  35. data/README_FROM_VERSION_3_TO_4.md +0 -240
  36. data/Rakefile +0 -31
  37. data/TESTING.md +0 -25
  38. data/aasm.gemspec +0 -37
  39. data/docker-compose.yml +0 -40
  40. data/gemfiles/norails.gemfile +0 -10
  41. data/gemfiles/rails_4.2.gemfile +0 -17
  42. data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -12
  43. data/gemfiles/rails_4.2_nobrainer.gemfile +0 -9
  44. data/gemfiles/rails_5.0.gemfile +0 -14
  45. data/gemfiles/rails_5.0_nobrainer.gemfile +0 -9
  46. data/gemfiles/rails_5.1.gemfile +0 -14
  47. data/gemfiles/rails_5.2.gemfile +0 -14
  48. data/spec/database.rb +0 -59
  49. data/spec/database.yml +0 -3
  50. data/spec/en.yml +0 -9
  51. data/spec/generators/active_record_generator_spec.rb +0 -53
  52. data/spec/generators/mongoid_generator_spec.rb +0 -31
  53. data/spec/generators/no_brainer_generator_spec.rb +0 -29
  54. data/spec/localizer_test_model_deprecated_style.yml +0 -6
  55. data/spec/localizer_test_model_new_style.yml +0 -5
  56. data/spec/models/active_record/active_record_callback.rb +0 -93
  57. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
  58. data/spec/models/active_record/complex_active_record_example.rb +0 -37
  59. data/spec/models/active_record/derivate_new_dsl.rb +0 -7
  60. data/spec/models/active_record/false_state.rb +0 -35
  61. data/spec/models/active_record/gate.rb +0 -39
  62. data/spec/models/active_record/instance_level_skip_validation_example.rb +0 -19
  63. data/spec/models/active_record/invalid_persistor.rb +0 -29
  64. data/spec/models/active_record/localizer_test_model.rb +0 -34
  65. data/spec/models/active_record/no_direct_assignment.rb +0 -21
  66. data/spec/models/active_record/no_scope.rb +0 -21
  67. data/spec/models/active_record/persisted_state.rb +0 -12
  68. data/spec/models/active_record/person.rb +0 -23
  69. data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
  70. data/spec/models/active_record/reader.rb +0 -7
  71. data/spec/models/active_record/readme_job.rb +0 -21
  72. data/spec/models/active_record/silent_persistor.rb +0 -29
  73. data/spec/models/active_record/simple_new_dsl.rb +0 -32
  74. data/spec/models/active_record/thief.rb +0 -29
  75. data/spec/models/active_record/transactor.rb +0 -124
  76. data/spec/models/active_record/transient.rb +0 -6
  77. data/spec/models/active_record/validator.rb +0 -118
  78. data/spec/models/active_record/with_enum.rb +0 -39
  79. data/spec/models/active_record/with_enum_without_column.rb +0 -38
  80. data/spec/models/active_record/with_false_enum.rb +0 -31
  81. data/spec/models/active_record/with_true_enum.rb +0 -39
  82. data/spec/models/active_record/work.rb +0 -3
  83. data/spec/models/active_record/worker.rb +0 -2
  84. data/spec/models/active_record/writer.rb +0 -6
  85. data/spec/models/basic_two_state_machines_example.rb +0 -25
  86. data/spec/models/callbacks/basic.rb +0 -98
  87. data/spec/models/callbacks/basic_multiple.rb +0 -75
  88. data/spec/models/callbacks/guard_within_block.rb +0 -67
  89. data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
  90. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
  91. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
  92. data/spec/models/callbacks/private_method.rb +0 -44
  93. data/spec/models/callbacks/private_method_multiple.rb +0 -44
  94. data/spec/models/callbacks/with_args.rb +0 -62
  95. data/spec/models/callbacks/with_args_multiple.rb +0 -61
  96. data/spec/models/callbacks/with_state_arg.rb +0 -34
  97. data/spec/models/callbacks/with_state_arg_multiple.rb +0 -29
  98. data/spec/models/complex_example.rb +0 -222
  99. data/spec/models/conversation.rb +0 -93
  100. data/spec/models/default_state.rb +0 -12
  101. data/spec/models/double_definer.rb +0 -21
  102. data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
  103. data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
  104. data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
  105. data/spec/models/foo.rb +0 -106
  106. data/spec/models/foo_callback_multiple.rb +0 -45
  107. data/spec/models/guard_arguments_check.rb +0 -17
  108. data/spec/models/guard_with_params.rb +0 -24
  109. data/spec/models/guard_with_params_multiple.rb +0 -18
  110. data/spec/models/guardian.rb +0 -58
  111. data/spec/models/guardian_multiple.rb +0 -48
  112. data/spec/models/guardian_without_from_specified.rb +0 -18
  113. data/spec/models/initial_state_proc.rb +0 -31
  114. data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
  115. data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
  116. data/spec/models/mongoid/mongoid_relationships.rb +0 -26
  117. data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
  118. data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
  119. data/spec/models/mongoid/simple_mongoid.rb +0 -23
  120. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
  121. data/spec/models/mongoid/validator_mongoid.rb +0 -100
  122. data/spec/models/multi_transitioner.rb +0 -34
  123. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
  124. data/spec/models/namespaced_multiple_example.rb +0 -42
  125. data/spec/models/no_initial_state.rb +0 -25
  126. data/spec/models/nobrainer/complex_no_brainer_example.rb +0 -36
  127. data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +0 -39
  128. data/spec/models/nobrainer/no_scope_no_brainer.rb +0 -21
  129. data/spec/models/nobrainer/nobrainer_relationships.rb +0 -25
  130. data/spec/models/nobrainer/silent_persistor_no_brainer.rb +0 -39
  131. data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +0 -25
  132. data/spec/models/nobrainer/simple_no_brainer.rb +0 -23
  133. data/spec/models/nobrainer/validator_no_brainer.rb +0 -98
  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 -23
  153. data/spec/models/simple_example_with_guard_args.rb +0 -17
  154. data/spec/models/simple_multiple_example.rb +0 -42
  155. data/spec/models/state_machine_with_failed_event.rb +0 -20
  156. data/spec/models/states_on_one_line_example.rb +0 -8
  157. data/spec/models/sub_class.rb +0 -41
  158. data/spec/models/sub_class_with_more_states.rb +0 -18
  159. data/spec/models/sub_classing.rb +0 -3
  160. data/spec/models/super_class.rb +0 -46
  161. data/spec/models/this_name_better_not_be_in_use.rb +0 -11
  162. data/spec/models/valid_state_name.rb +0 -23
  163. data/spec/spec_helper.rb +0 -41
  164. data/spec/spec_helpers/active_record.rb +0 -8
  165. data/spec/spec_helpers/dynamoid.rb +0 -35
  166. data/spec/spec_helpers/mongoid.rb +0 -26
  167. data/spec/spec_helpers/nobrainer.rb +0 -15
  168. data/spec/spec_helpers/redis.rb +0 -18
  169. data/spec/spec_helpers/remove_warnings.rb +0 -1
  170. data/spec/spec_helpers/sequel.rb +0 -7
  171. data/spec/unit/abstract_class_spec.rb +0 -27
  172. data/spec/unit/api_spec.rb +0 -104
  173. data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
  174. data/spec/unit/callback_multiple_spec.rb +0 -304
  175. data/spec/unit/callbacks_spec.rb +0 -521
  176. data/spec/unit/complex_example_spec.rb +0 -93
  177. data/spec/unit/complex_multiple_example_spec.rb +0 -115
  178. data/spec/unit/edge_cases_spec.rb +0 -16
  179. data/spec/unit/event_multiple_spec.rb +0 -73
  180. data/spec/unit/event_naming_spec.rb +0 -16
  181. data/spec/unit/event_spec.rb +0 -394
  182. data/spec/unit/exception_spec.rb +0 -11
  183. data/spec/unit/guard_arguments_check_spec.rb +0 -9
  184. data/spec/unit/guard_multiple_spec.rb +0 -60
  185. data/spec/unit/guard_spec.rb +0 -89
  186. data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
  187. data/spec/unit/guard_with_params_spec.rb +0 -14
  188. data/spec/unit/guard_without_from_specified_spec.rb +0 -10
  189. data/spec/unit/initial_state_multiple_spec.rb +0 -15
  190. data/spec/unit/initial_state_spec.rb +0 -12
  191. data/spec/unit/inspection_multiple_spec.rb +0 -205
  192. data/spec/unit/inspection_spec.rb +0 -153
  193. data/spec/unit/invoker_spec.rb +0 -189
  194. data/spec/unit/invokers/base_invoker_spec.rb +0 -72
  195. data/spec/unit/invokers/class_invoker_spec.rb +0 -95
  196. data/spec/unit/invokers/literal_invoker_spec.rb +0 -86
  197. data/spec/unit/invokers/proc_invoker_spec.rb +0 -86
  198. data/spec/unit/localizer_spec.rb +0 -77
  199. data/spec/unit/memory_leak_spec.rb +0 -38
  200. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
  201. data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
  202. data/spec/unit/new_dsl_spec.rb +0 -12
  203. data/spec/unit/override_warning_spec.rb +0 -94
  204. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
  205. data/spec/unit/persistence/active_record_persistence_spec.rb +0 -840
  206. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
  207. data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
  208. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -200
  209. data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -165
  210. data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +0 -198
  211. data/spec/unit/persistence/no_brainer_persistence_spec.rb +0 -158
  212. data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
  213. data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
  214. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
  215. data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
  216. data/spec/unit/readme_spec.rb +0 -41
  217. data/spec/unit/reloading_spec.rb +0 -15
  218. data/spec/unit/rspec_matcher_spec.rb +0 -88
  219. data/spec/unit/simple_custom_example_spec.rb +0 -39
  220. data/spec/unit/simple_example_spec.rb +0 -57
  221. data/spec/unit/simple_multiple_example_spec.rb +0 -91
  222. data/spec/unit/state_spec.rb +0 -105
  223. data/spec/unit/states_on_one_line_example_spec.rb +0 -16
  224. data/spec/unit/subclassing_multiple_spec.rb +0 -74
  225. data/spec/unit/subclassing_spec.rb +0 -46
  226. data/spec/unit/transition_spec.rb +0 -436
  227. data/test/minitest_helper.rb +0 -57
  228. data/test/unit/minitest_matcher_test.rb +0 -80
@@ -1,189 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe AASM::Core::Invoker do
4
- let(:target) { nil }
5
- let(:record) { double }
6
- let(:args) { [] }
7
-
8
- subject { described_class.new(target, record, args) }
9
-
10
- describe '#with_options' do
11
- context 'when passing array as a subject' do
12
- context 'and "guard" option is set to true' do
13
- let(:target) { [subject_1, subject_2] }
14
-
15
- before { subject.with_options(guard: true) }
16
-
17
- context 'and all the subjects are truthy' do
18
- let(:subject_1) { Proc.new { true } }
19
- let(:subject_2) { Proc.new { true } }
20
-
21
- it 'then returns "true" while invoking' do
22
- expect(subject.invoke).to eq(true)
23
- end
24
- end
25
-
26
- context 'and any subject is falsely' do
27
- let(:subject_1) { Proc.new { false } }
28
- let(:subject_2) { Proc.new { true } }
29
-
30
- it 'then returns "false" while invoking' do
31
- expect(subject.invoke).to eq(false)
32
- end
33
- end
34
- end
35
-
36
- context 'and "unless" option is set to true' do
37
- let(:target) { [subject_1, subject_2] }
38
-
39
- before { subject.with_options(unless: true) }
40
-
41
- context 'and all the subjects are falsely' do
42
- let(:subject_1) { Proc.new { false } }
43
- let(:subject_2) { Proc.new { false } }
44
-
45
- it 'then returns "true" while invoking' do
46
- expect(subject.invoke).to eq(true)
47
- end
48
- end
49
-
50
- context 'and any subject is truthy' do
51
- let(:subject_1) { Proc.new { false } }
52
- let(:subject_2) { Proc.new { true } }
53
-
54
- it 'then returns "false" while invoking' do
55
- expect(subject.invoke).to eq(false)
56
- end
57
- end
58
- end
59
- end
60
- end
61
-
62
- describe '#with_failures' do
63
- let(:concrete_invoker) { AASM::Core::Invokers::ProcInvoker }
64
- let(:target) { Proc.new {} }
65
-
66
- it 'then sets failures buffer for concrete invokers' do
67
- expect_any_instance_of(concrete_invoker)
68
- .to receive(:with_failures)
69
- .and_call_original
70
-
71
- subject.invoke
72
- end
73
- end
74
-
75
- describe '#with_default_return_value' do
76
- context 'when return value is "true"' do
77
- before { subject.with_default_return_value(true) }
78
-
79
- it 'then returns "true" when was not picked up by any invoker' do
80
- expect(subject.invoke).to eq(true)
81
- end
82
- end
83
-
84
- context 'when return value is "false"' do
85
- before { subject.with_default_return_value(false) }
86
-
87
- it 'then returns "false" when was not picked up by any invoker' do
88
- expect(subject.invoke).to eq(false)
89
- end
90
- end
91
- end
92
-
93
- describe '#invoke' do
94
- context 'when subject is a proc' do
95
- let(:concrete_invoker) { AASM::Core::Invokers::ProcInvoker }
96
- let(:target) { Proc.new {} }
97
-
98
- it 'then calls proc invoker' do
99
- expect_any_instance_of(concrete_invoker)
100
- .to receive(:invoke)
101
- .and_call_original
102
-
103
- expect(record).to receive(:instance_exec)
104
-
105
- subject.invoke
106
- end
107
- end
108
-
109
- context 'when subject is a class' do
110
- let(:concrete_invoker) { AASM::Core::Invokers::ClassInvoker }
111
- let(:target) { Class.new { def call; end } }
112
-
113
- it 'then calls proc invoker' do
114
- expect_any_instance_of(concrete_invoker)
115
- .to receive(:invoke)
116
- .and_call_original
117
-
118
- expect_any_instance_of(target).to receive(:call)
119
-
120
- subject.invoke
121
- end
122
- end
123
-
124
- context 'when subject is a literal' do
125
- let(:concrete_invoker) { AASM::Core::Invokers::LiteralInvoker }
126
- let(:record) { double(invoke_me: nil) }
127
- let(:target) { :invoke_me }
128
-
129
- it 'then calls literal invoker' do
130
- expect_any_instance_of(concrete_invoker)
131
- .to receive(:invoke)
132
- .and_call_original
133
-
134
- expect(record).to receive(:invoke_me)
135
-
136
- subject.invoke
137
- end
138
- end
139
-
140
- context 'when subject is an array of procs' do
141
- let(:subject_1) { Proc.new {} }
142
- let(:subject_2) { Proc.new {} }
143
- let(:target) { [subject_1, subject_2] }
144
-
145
- it 'then calls each proc' do
146
- expect(record).to receive(:instance_exec).twice
147
-
148
- subject.invoke
149
- end
150
- end
151
-
152
- context 'when subject is an array of classes' do
153
- let(:subject_1) { Class.new { def call; end } }
154
- let(:subject_2) { Class.new { def call; end } }
155
- let(:target) { [subject_1, subject_2] }
156
-
157
- it 'then calls each class' do
158
- expect_any_instance_of(subject_1).to receive(:call)
159
-
160
- expect_any_instance_of(subject_2).to receive(:call)
161
-
162
- subject.invoke
163
- end
164
- end
165
-
166
- context 'when subject is an array of literals' do
167
- let(:subject_1) { :method_one }
168
- let(:subject_2) { :method_two }
169
- let(:record) { double(method_one: nil, method_two: nil) }
170
- let(:target) { [subject_1, subject_2] }
171
-
172
- it 'then calls each class' do
173
- expect(record).to receive(:method_one)
174
-
175
- expect(record).to receive(:method_two)
176
-
177
- subject.invoke
178
- end
179
- end
180
-
181
- context 'when subject is not supported' do
182
- let(:target) { nil }
183
-
184
- it 'then just returns default value' do
185
- expect(subject.invoke).to eq(described_class::DEFAULT_RETURN_VALUE)
186
- end
187
- end
188
- end
189
- end
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe AASM::Core::Invokers::BaseInvoker do
4
- let(:target) { double }
5
- let(:record) { double }
6
- let(:args) { [] }
7
-
8
- subject { described_class.new(target, record, args) }
9
-
10
- describe '#may_invoke?' do
11
- it 'then raises NoMethodError' do
12
- expect { subject.may_invoke? }.to raise_error(NoMethodError)
13
- end
14
- end
15
-
16
- describe '#log_failure' do
17
- it 'then raises NoMethodError' do
18
- expect { subject.log_failure }.to raise_error(NoMethodError)
19
- end
20
- end
21
-
22
- describe '#invoke_subject' do
23
- it 'then raises NoMethodError' do
24
- expect { subject.log_failure }.to raise_error(NoMethodError)
25
- end
26
- end
27
-
28
- describe '#with_failures' do
29
- it 'then sets failures buffer' do
30
- buffer = [1, 2, 3]
31
- subject.with_failures(buffer)
32
-
33
- expect(subject.failures).to eq(buffer)
34
- end
35
- end
36
-
37
- describe '#invoke' do
38
- context 'when #may_invoke? respond with "false"' do
39
- before { allow(subject).to receive(:may_invoke?).and_return(false) }
40
-
41
- it 'then returns "nil"' do
42
- expect(subject.invoke).to eq(nil)
43
- end
44
- end
45
-
46
- context 'when #invoke_subject respond with "false"' do
47
- before do
48
- allow(subject).to receive(:may_invoke?).and_return(true)
49
- allow(subject).to receive(:invoke_subject).and_return(false)
50
- end
51
-
52
- it 'then calls #log_failure' do
53
- expect(subject).to receive(:log_failure)
54
-
55
- subject.invoke
56
- end
57
- end
58
-
59
- context 'when #invoke_subject succeed' do
60
- before do
61
- allow(subject).to receive(:may_invoke?).and_return(true)
62
- allow(subject).to receive(:invoke_subject).and_return(true)
63
- end
64
-
65
- it 'then returns result' do
66
- expect(subject).to receive(:result)
67
-
68
- subject.invoke
69
- end
70
- end
71
- end
72
- end
@@ -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,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(ActiveRecord)
4
- require 'models/active_record/localizer_test_model'
5
- load_schema
6
-
7
- describe AASM::Localizer, "new style" do
8
- before(:all) do
9
- I18n.load_path << 'spec/localizer_test_model_new_style.yml'
10
- I18n.reload!
11
- end
12
-
13
- after(:all) do
14
- I18n.load_path.delete('spec/localizer_test_model_new_style.yml')
15
- I18n.backend.load_translations
16
- end
17
-
18
- let (:foo_opened) { LocalizerTestModel.new }
19
- let (:foo_closed) { LocalizerTestModel.new.tap { |x| x.aasm_state = :closed } }
20
-
21
- context 'aasm.human_state' do
22
- it 'should return translated state value' do
23
- expect(foo_opened.aasm.human_state).to eq("It's open now!")
24
- end
25
-
26
- it 'should return humanized value if not localized' do
27
- expect(foo_closed.aasm.human_state).to eq("Closed")
28
- end
29
- end
30
-
31
- context 'aasm.human_event_name' do
32
- it 'should return translated event name' do
33
- expect(LocalizerTestModel.aasm.human_event_name(:close)).to eq("Let's close it!")
34
- end
35
-
36
- it 'should return humanized event name' do
37
- expect(LocalizerTestModel.aasm.human_event_name(:open)).to eq("Open")
38
- end
39
- end
40
- end
41
-
42
- describe AASM::Localizer, "deprecated style" do
43
- before(:all) do
44
- I18n.load_path << 'spec/localizer_test_model_deprecated_style.yml'
45
- I18n.reload!
46
- I18n.backend.load_translations
47
- end
48
-
49
- after(:all) do
50
- I18n.load_path.delete('spec/localizer_test_model_deprecated_style.yml')
51
- I18n.backend.load_translations
52
- end
53
-
54
- let (:foo_opened) { LocalizerTestModel.new }
55
- let (:foo_closed) { LocalizerTestModel.new.tap { |x| x.aasm_state = :closed } }
56
-
57
- context 'aasm.human_state' do
58
- it 'should return translated state value' do
59
- expect(foo_opened.aasm.human_state).to eq("It's open now!")
60
- end
61
-
62
- it 'should return humanized value if not localized' do
63
- expect(foo_closed.aasm.human_state).to eq("Closed")
64
- end
65
- end
66
-
67
- context 'aasm.human_event_name' do
68
- it 'should return translated event name' do
69
- expect(LocalizerTestModel.aasm.human_event_name(:close)).to eq("Let's close it!")
70
- end
71
-
72
- it 'should return humanized event name' do
73
- expect(LocalizerTestModel.aasm.human_event_name(:open)).to eq("Open")
74
- end
75
- end
76
- end
77
- 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