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,198 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(NoBrainer::Document)
4
- describe 'nobrainer' do
5
- Dir[File.dirname(__FILE__) + '/../../models/nobrainer/*.rb'].sort.each do |f|
6
- require File.expand_path(f)
7
- end
8
-
9
- before(:all) do
10
- # if you want to see the statements while running the spec enable the
11
- # following line
12
- # NoBrainer.configure do |config|
13
- # config.logger = Logger.new(STDERR)
14
- # end
15
- end
16
-
17
- after do
18
- NoBrainer.purge!
19
- end
20
-
21
- describe 'named scopes with the old DSL' do
22
- context 'Does not already respond_to? the scope name' do
23
- it 'should add a scope for each state' do
24
- expect(SimpleNoBrainerMultiple).to respond_to(:unknown_scope)
25
- expect(SimpleNoBrainerMultiple).to respond_to(:another_unknown_scope)
26
-
27
- expect(SimpleNoBrainerMultiple.unknown_scope.class).to eq(NoBrainer::Criteria)
28
- expect(SimpleNoBrainerMultiple.another_unknown_scope.class).to eq(NoBrainer::Criteria)
29
- end
30
- end
31
-
32
- context 'Already respond_to? the scope name' do
33
- it 'should not add a scope' do
34
- expect(SimpleNoBrainerMultiple).to respond_to(:new)
35
- expect(SimpleNoBrainerMultiple.new.class).to eq(SimpleNoBrainerMultiple)
36
- end
37
- end
38
-
39
- end
40
-
41
- describe 'named scopes with the new DSL' do
42
- context 'Does not already respond_to? the scope name' do
43
- it 'should add a scope' do
44
- expect(SimpleNewDslNoBrainerMultiple).to respond_to(:unknown_scope)
45
- expect(SimpleNewDslNoBrainerMultiple.unknown_scope.class).to eq(NoBrainer::Criteria)
46
- end
47
- end
48
-
49
- context 'Already respond_to? the scope name' do
50
- it 'should not add a scope' do
51
- expect(SimpleNewDslNoBrainerMultiple).to respond_to(:new)
52
- expect(SimpleNewDslNoBrainerMultiple.new.class).to eq(SimpleNewDslNoBrainerMultiple)
53
- end
54
- end
55
-
56
- it 'does not create scopes if requested' do
57
- expect(NoScopeNoBrainerMultiple).not_to respond_to(:ignored_scope)
58
- end
59
- end
60
-
61
- describe 'instance methods' do
62
- let(:simple) { SimpleNewDslNoBrainerMultiple.new }
63
-
64
- it 'should initialize the aasm state on instantiation' do
65
- expect(SimpleNewDslNoBrainerMultiple.new.status).to eql 'unknown_scope'
66
- expect(SimpleNewDslNoBrainerMultiple.new.aasm(:left).current_state).to eql :unknown_scope
67
- end
68
- end
69
-
70
- describe 'transitions with persistence' do
71
- it 'should work for valid models' do
72
- valid_object = MultipleValidatorNoBrainer.create(name: 'name')
73
- expect(valid_object).to be_sleeping
74
- valid_object.status = :running
75
- expect(valid_object).to be_running
76
- end
77
-
78
- it 'should not store states for invalid models' do
79
- validator = MultipleValidatorNoBrainer.create(name: 'name')
80
- expect(validator).to be_valid
81
- expect(validator).to be_sleeping
82
-
83
- validator.name = nil
84
- expect(validator).not_to be_valid
85
- expect { validator.run! }.to raise_error(NoBrainer::Error::DocumentInvalid)
86
- expect(validator).to be_sleeping
87
-
88
- validator.reload
89
- expect(validator).not_to be_running
90
- expect(validator).to be_sleeping
91
-
92
- validator.name = 'another name'
93
- expect(validator).to be_valid
94
- expect(validator.run!).to be_truthy
95
- expect(validator).to be_running
96
-
97
- validator.reload
98
- expect(validator).to be_running
99
- expect(validator).not_to be_sleeping
100
- end
101
-
102
- it 'should not store states for invalid models silently if configured' do
103
- validator = MultipleSilentPersistorNoBrainer.create(name: 'name')
104
- expect(validator).to be_valid
105
- expect(validator).to be_sleeping
106
-
107
- validator.name = nil
108
- expect(validator).not_to be_valid
109
- expect(validator.run!).to be_falsey
110
- expect(validator).to be_sleeping
111
-
112
- validator.reload
113
- expect(validator).not_to be_running
114
- expect(validator).to be_sleeping
115
-
116
- validator.name = 'another name'
117
- expect(validator).to be_valid
118
- expect(validator.run!).to be_truthy
119
- expect(validator).to be_running
120
-
121
- validator.reload
122
- expect(validator).to be_running
123
- expect(validator).not_to be_sleeping
124
- end
125
-
126
- it 'should store states for invalid models if configured' do
127
- persistor = MultipleInvalidPersistorNoBrainer.create(name: 'name')
128
- expect(persistor).to be_valid
129
- expect(persistor).to be_sleeping
130
-
131
- persistor.name = nil
132
- expect(persistor).not_to be_valid
133
- expect(persistor.run!).to be_truthy
134
- expect(persistor).to be_running
135
-
136
- persistor = MultipleInvalidPersistorNoBrainer.find(persistor.id)
137
- persistor.valid?
138
- expect(persistor).to be_valid
139
- expect(persistor).to be_running
140
- expect(persistor).not_to be_sleeping
141
-
142
- persistor.reload
143
- expect(persistor).to be_running
144
- expect(persistor).not_to be_sleeping
145
- end
146
- end
147
-
148
- describe 'complex example' do
149
- it 'works' do
150
- record = ComplexNoBrainerExample.new
151
- expect_aasm_states record, :one, :alpha
152
-
153
- record.save!
154
- expect_aasm_states record, :one, :alpha
155
- record.reload
156
- expect_aasm_states record, :one, :alpha
157
-
158
- record.increment!
159
- expect_aasm_states record, :two, :alpha
160
- record.reload
161
- expect_aasm_states record, :two, :alpha
162
-
163
- record.level_up!
164
- expect_aasm_states record, :two, :beta
165
- record.reload
166
- expect_aasm_states record, :two, :beta
167
-
168
- record.increment!
169
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
170
- expect_aasm_states record, :three, :beta
171
- record.reload
172
- expect_aasm_states record, :three, :beta
173
-
174
- record.level_up!
175
- expect_aasm_states record, :three, :gamma
176
- record.reload
177
- expect_aasm_states record, :three, :gamma
178
-
179
- record.level_down # without saving
180
- expect_aasm_states record, :three, :beta
181
- record.reload
182
- expect_aasm_states record, :three, :gamma
183
-
184
- record.level_down # without saving
185
- expect_aasm_states record, :three, :beta
186
- record.reset!
187
- expect_aasm_states record, :one, :beta
188
- end
189
-
190
- def expect_aasm_states(record, left_state, right_state)
191
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
192
- expect(record.left).to eql left_state.to_s
193
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
194
- expect(record.right).to eql right_state.to_s
195
- end
196
- end
197
- end
198
- end
@@ -1,158 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(NoBrainer::Document)
4
- describe 'nobrainer' do
5
- Dir[File.dirname(__FILE__) + '/../../models/nobrainer/*.rb'].sort.each do |f|
6
- require File.expand_path(f)
7
- end
8
-
9
- before(:all) do
10
- # if you want to see the statements while running the spec enable the
11
- # following line
12
- # NoBrainer.configure do |config|
13
- # config.logger = Logger.new(STDERR)
14
- # end
15
- end
16
-
17
- after do
18
- NoBrainer.purge!
19
- end
20
-
21
- describe 'named scopes with the old DSL' do
22
- context 'Does not already respond_to? the scope name' do
23
- it 'should add a scope for each state' do
24
- expect(SimpleNoBrainer).to respond_to(:unknown_scope)
25
- expect(SimpleNoBrainer).to respond_to(:another_unknown_scope)
26
-
27
- expect(SimpleNoBrainer.unknown_scope.class).to eq(NoBrainer::Criteria)
28
- expect(SimpleNoBrainer.another_unknown_scope.class).to eq(NoBrainer::Criteria)
29
- end
30
- end
31
-
32
- context 'Already respond_to? the scope name' do
33
- it 'should not add a scope' do
34
- expect(SimpleNoBrainer).to respond_to(:new)
35
- expect(SimpleNoBrainer.new.class).to eq(SimpleNoBrainer)
36
- end
37
- end
38
- end
39
-
40
- describe 'named scopes with the new DSL' do
41
- context 'Does not already respond_to? the scope name' do
42
- it 'should add a scope' do
43
- expect(SimpleNewDslNoBrainer).to respond_to(:unknown_scope)
44
- expect(SimpleNewDslNoBrainer.unknown_scope.class).to eq(NoBrainer::Criteria)
45
- end
46
- end
47
-
48
- context 'Already respond_to? the scope name' do
49
- it 'should not add a scope' do
50
- expect(SimpleNewDslNoBrainer).to respond_to(:new)
51
- expect(SimpleNewDslNoBrainer.new.class).to eq(SimpleNewDslNoBrainer)
52
- end
53
- end
54
-
55
- it 'does not create scopes if requested' do
56
- expect(NoScopeNoBrainer).not_to respond_to(:ignored_scope)
57
- end
58
- end
59
-
60
- describe 'instance methods' do
61
- let(:simple) { SimpleNewDslNoBrainer.new }
62
-
63
- it 'should initialize the aasm state on instantiation' do
64
- expect(SimpleNewDslNoBrainer.new.status).to eql 'unknown_scope'
65
- expect(SimpleNewDslNoBrainer.new.aasm.current_state).to eql :unknown_scope
66
- end
67
- end
68
-
69
- describe 'relations object' do
70
- it 'should load relations object ids' do
71
- parent = Parent.create
72
- child_1 = Child.create(parent_id: parent.id)
73
- child_2 = Child.create(parent_id: parent.id)
74
- expect(parent.childs.pluck(:id, :status).map(&:id)).to eql [child_1.id, child_2.id]
75
- end
76
- end
77
-
78
- describe 'transitions with persistence' do
79
- it 'should work for valid models' do
80
- valid_object = ValidatorNoBrainer.create(name: 'name')
81
- expect(valid_object).to be_sleeping
82
- valid_object.status = :running
83
- expect(valid_object).to be_running
84
- end
85
-
86
- it 'should not store states for invalid models' do
87
- validator = ValidatorNoBrainer.create(name: 'name')
88
- expect(validator).to be_valid
89
- expect(validator).to be_sleeping
90
-
91
- validator.name = nil
92
- expect(validator).not_to be_valid
93
- expect { validator.run! }.to raise_error(NoBrainer::Error::DocumentInvalid)
94
- expect(validator).to be_sleeping
95
-
96
- validator.reload
97
- expect(validator).not_to be_running
98
- expect(validator).to be_sleeping
99
-
100
- validator.name = 'another name'
101
- expect(validator).to be_valid
102
- expect(validator.run!).to be_truthy
103
- expect(validator).to be_running
104
-
105
- validator.reload
106
- expect(validator).to be_running
107
- expect(validator).not_to be_sleeping
108
- end
109
-
110
- it 'should not store states for invalid models silently if configured' do
111
- validator = SilentPersistorNoBrainer.create(name: 'name')
112
- expect(validator).to be_valid
113
- expect(validator).to be_sleeping
114
-
115
- validator.name = nil
116
- expect(validator).not_to be_valid
117
- expect(validator.run!).to be_falsey
118
- expect(validator).to be_sleeping
119
-
120
- validator.reload
121
- expect(validator).not_to be_running
122
- expect(validator).to be_sleeping
123
-
124
- validator.name = 'another name'
125
- expect(validator).to be_valid
126
- expect(validator.run!).to be_truthy
127
- expect(validator).to be_running
128
-
129
- validator.reload
130
- expect(validator).to be_running
131
- expect(validator).not_to be_sleeping
132
- end
133
-
134
- it 'should store states for invalid models if configured' do
135
- persistor = InvalidPersistorNoBrainer.create(name: 'name')
136
- expect(persistor).to be_valid
137
- expect(persistor).to be_sleeping
138
-
139
- persistor.name = nil
140
-
141
- expect(persistor).not_to be_valid
142
- expect(persistor.run!).to be_truthy
143
- expect(persistor).to be_running
144
-
145
- persistor = InvalidPersistorNoBrainer.find(persistor.id)
146
-
147
- persistor.valid?
148
- expect(persistor).to be_valid
149
- expect(persistor).to be_running
150
- expect(persistor).not_to be_sleeping
151
-
152
- persistor.reload
153
- expect(persistor).to be_running
154
- expect(persistor).not_to be_sleeping
155
- end
156
- end
157
- end
158
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Redis)
4
- describe 'redis' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/redis/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- @model = RedisMultiple
12
- end
13
-
14
- describe "instance methods" do
15
- let(:model) {@model.new}
16
-
17
- it "should respond to aasm persistence methods" do
18
- expect(model).to respond_to(:aasm_read_state)
19
- expect(model).to respond_to(:aasm_write_state)
20
- expect(model).to respond_to(:aasm_write_state_without_persistence)
21
- end
22
-
23
- it "should return the initial state when new and the aasm field is nil" do
24
- expect(model.aasm(:left).current_state).to eq(:alpha)
25
- end
26
-
27
- it "should save the initial state" do
28
- expect(model.status).to eq("alpha")
29
- end
30
-
31
- it "should return the aasm column the aasm field is not nil" do
32
- model.status = "beta"
33
- expect(model.aasm(:left).current_state).to eq(:beta)
34
- end
35
-
36
- it "should allow a nil state" do
37
- model.status = nil
38
- expect(model.aasm(:left).current_state).to be_nil
39
- end
40
- end
41
-
42
- describe 'subclasses' do
43
- it "should have the same states as its parent class" do
44
- expect(Class.new(@model).aasm(:left).states).to eq(@model.aasm(:left).states)
45
- end
46
-
47
- it "should have the same events as its parent class" do
48
- expect(Class.new(@model).aasm(:left).events).to eq(@model.aasm(:left).events)
49
- end
50
-
51
- it "should have the same column as its parent even for the new dsl" do
52
- expect(@model.aasm(:left).attribute_name).to eq(:status)
53
- expect(Class.new(@model).aasm(:left).attribute_name).to eq(:status)
54
- end
55
- end
56
-
57
- describe "complex example" do
58
- it "works" do
59
- record = RedisComplexExample.new
60
-
61
- expect(record.aasm(:left).current_state).to eql :one
62
- expect(record.aasm(:right).current_state).to eql :alpha
63
-
64
- expect_aasm_states record, :one, :alpha
65
-
66
- record.increment!
67
- expect_aasm_states record, :two, :alpha
68
-
69
- record.level_up!
70
- expect_aasm_states record, :two, :beta
71
-
72
- record.increment!
73
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
74
- expect_aasm_states record, :three, :beta
75
-
76
- record.level_up!
77
- expect_aasm_states record, :three, :gamma
78
- end
79
-
80
- def expect_aasm_states(record, left_state, right_state)
81
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
82
- expect(record.left.value.to_s).to eql left_state.to_s
83
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
84
- expect(record.right.value.to_s).to eql right_state.to_s
85
- end
86
- end
87
- end
88
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Redis::Objects)
4
- describe 'redis' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/redis/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- @model = RedisSimple
12
- end
13
-
14
- describe "instance methods" do
15
- let(:model) {@model.new}
16
-
17
- it "should respond to aasm persistence methods" do
18
- expect(model).to respond_to(:aasm_read_state)
19
- expect(model).to respond_to(:aasm_write_state)
20
- expect(model).to respond_to(:aasm_write_state_without_persistence)
21
- end
22
-
23
- it "should return the initial state when new and the aasm field is nil" do
24
- expect(model.aasm.current_state).to eq(:alpha)
25
- end
26
-
27
- it "should return the aasm column when new and the aasm field is not nil" do
28
- model.status = "beta"
29
- expect(model.aasm.current_state).to eq(:beta)
30
- end
31
-
32
- it "should allow a nil state" do
33
- model.status = nil
34
- expect(model.aasm.current_state).to be_nil
35
- end
36
- end
37
-
38
- describe 'subclasses' do
39
- it "should have the same states as its parent class" do
40
- expect(Class.new(@model).aasm.states).to eq(@model.aasm.states)
41
- end
42
-
43
- it "should have the same events as its parent class" do
44
- expect(Class.new(@model).aasm.events).to eq(@model.aasm.events)
45
- end
46
-
47
- it "should have the same column as its parent even for the new dsl" do
48
- expect(@model.aasm.attribute_name).to eq(:status)
49
- expect(Class.new(@model).aasm.attribute_name).to eq(:status)
50
- end
51
- end
52
- end
53
- end
@@ -1,148 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Sequel)
4
- describe 'sequel' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/sequel/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- @model = Sequel::Multiple
12
- end
13
-
14
- describe "instance methods" do
15
- let(:model) {@model.new}
16
-
17
- it "should respond to aasm persistence methods" do
18
- expect(model).to respond_to(:aasm_read_state)
19
- expect(model).to respond_to(:aasm_write_state)
20
- expect(model).to respond_to(:aasm_write_state_without_persistence)
21
- end
22
-
23
- it "should return the initial state when new and the aasm field is nil" do
24
- expect(model.aasm(:left).current_state).to eq(:alpha)
25
- end
26
-
27
- it "should save the initial state" do
28
- model.save
29
- expect(model.status).to eq("alpha")
30
- end
31
-
32
- it "should return the aasm column when new and the aasm field is not nil" do
33
- model.status = "beta"
34
- expect(model.aasm(:left).current_state).to eq(:beta)
35
- end
36
-
37
- it "should return the aasm column when not new and the aasm_column is not nil" do
38
- allow(model).to receive(:new?).and_return(false)
39
- model.status = "gamma"
40
- expect(model.aasm(:left).current_state).to eq(:gamma)
41
- end
42
-
43
- it "should allow a nil state" do
44
- allow(model).to receive(:new?).and_return(false)
45
- model.status = nil
46
- expect(model.aasm(:left).current_state).to be_nil
47
- end
48
-
49
- it "should not change the state if state is not loaded" do
50
- model.release
51
- model.save
52
- model.class.select(:id).first.save
53
- model.reload
54
- expect(model.aasm(:left).current_state).to eq(:beta)
55
- end
56
-
57
- it "should call aasm_ensure_initial_state on validation before create" do
58
- expect(model).to receive(:aasm_ensure_initial_state).and_return(true)
59
- model.valid?
60
- end
61
-
62
- it "should call aasm_ensure_initial_state before create, even if skipping validations" do
63
- expect(model).to receive(:aasm_ensure_initial_state).and_return(true)
64
- model.save(:validate => false)
65
- end
66
- end
67
-
68
- describe 'subclasses' do
69
- it "should have the same states as its parent class" do
70
- expect(Class.new(@model).aasm(:left).states).to eq(@model.aasm(:left).states)
71
- end
72
-
73
- it "should have the same events as its parent class" do
74
- expect(Class.new(@model).aasm(:left).events).to eq(@model.aasm(:left).events)
75
- end
76
-
77
- it "should have the same column as its parent even for the new dsl" do
78
- expect(@model.aasm(:left).attribute_name).to eq(:status)
79
- expect(Class.new(@model).aasm(:left).attribute_name).to eq(:status)
80
- end
81
- end
82
-
83
- describe 'initial states' do
84
- it 'should support conditions' do
85
- @model.aasm(:left) do
86
- initial_state lambda{ |m| m.default }
87
- end
88
-
89
- expect(@model.new(:default => :beta).aasm(:left).current_state).to eq(:beta)
90
- expect(@model.new(:default => :gamma).aasm(:left).current_state).to eq(:gamma)
91
- end
92
- end
93
-
94
- describe "complex example" do
95
- it "works" do
96
- record = Sequel::ComplexExample.new
97
- expect(record.aasm(:left).current_state).to eql :one
98
- expect(record.left).to be_nil
99
- expect(record.aasm(:right).current_state).to eql :alpha
100
- expect(record.right).to be_nil
101
-
102
- record.save
103
- expect_aasm_states record, :one, :alpha
104
- record.reload
105
- expect_aasm_states record, :one, :alpha
106
-
107
- record.increment!
108
- expect_aasm_states record, :two, :alpha
109
- record.reload
110
- expect_aasm_states record, :two, :alpha
111
-
112
- record.level_up!
113
- expect_aasm_states record, :two, :beta
114
- record.reload
115
- expect_aasm_states record, :two, :beta
116
-
117
- record.increment!
118
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
119
- expect_aasm_states record, :three, :beta
120
- record.reload
121
- expect_aasm_states record, :three, :beta
122
-
123
- record.level_up!
124
- expect_aasm_states record, :three, :gamma
125
- record.reload
126
- expect_aasm_states record, :three, :gamma
127
-
128
- record.level_down # without saving
129
- expect_aasm_states record, :three, :beta
130
- record.reload
131
- expect_aasm_states record, :three, :gamma
132
-
133
- record.level_down # without saving
134
- expect_aasm_states record, :three, :beta
135
- record.reset!
136
- expect_aasm_states record, :one, :beta
137
- end
138
-
139
- def expect_aasm_states(record, left_state, right_state)
140
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
141
- expect(record.left).to eql left_state.to_s
142
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
143
- expect(record.right).to eql right_state.to_s
144
- end
145
- end
146
-
147
- end
148
- end