aasm 4.12.3 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +284 -119
  3. data/lib/aasm/aasm.rb +30 -27
  4. data/lib/aasm/base.rb +61 -11
  5. data/lib/aasm/configuration.rb +3 -0
  6. data/lib/aasm/core/event.rb +26 -30
  7. data/lib/aasm/core/invoker.rb +129 -0
  8. data/lib/aasm/core/invokers/base_invoker.rb +75 -0
  9. data/lib/aasm/core/invokers/class_invoker.rb +52 -0
  10. data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
  11. data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
  12. data/lib/aasm/core/state.rb +16 -14
  13. data/lib/aasm/core/transition.rb +8 -69
  14. data/lib/aasm/dsl_helper.rb +24 -22
  15. data/lib/aasm/errors.rb +5 -3
  16. data/lib/aasm/instance_base.rb +28 -5
  17. data/lib/aasm/localizer.rb +13 -3
  18. data/lib/aasm/persistence/active_record_persistence.rb +25 -5
  19. data/lib/aasm/persistence/base.rb +14 -3
  20. data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
  21. data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
  22. data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
  23. data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
  24. data/lib/aasm/persistence/orm.rb +23 -19
  25. data/lib/aasm/persistence/plain_persistence.rb +2 -1
  26. data/lib/aasm/persistence/redis_persistence.rb +1 -1
  27. data/lib/aasm/persistence/sequel_persistence.rb +0 -1
  28. data/lib/aasm/persistence.rb +3 -0
  29. data/lib/aasm/rspec/allow_event.rb +5 -1
  30. data/lib/aasm/rspec/allow_transition_to.rb +5 -1
  31. data/lib/aasm/rspec/transition_from.rb +5 -1
  32. data/lib/aasm/version.rb +1 -1
  33. data/lib/aasm.rb +5 -2
  34. data/lib/generators/aasm/orm_helpers.rb +7 -1
  35. data/lib/generators/active_record/aasm_generator.rb +3 -1
  36. data/lib/generators/active_record/templates/migration.rb +1 -1
  37. data/lib/generators/nobrainer/aasm_generator.rb +28 -0
  38. data/lib/motion-aasm.rb +1 -0
  39. metadata +42 -344
  40. data/.document +0 -6
  41. data/.gitignore +0 -20
  42. data/.travis.yml +0 -52
  43. data/API +0 -34
  44. data/Appraisals +0 -43
  45. data/CHANGELOG.md +0 -370
  46. data/CODE_OF_CONDUCT.md +0 -13
  47. data/CONTRIBUTING.md +0 -24
  48. data/Gemfile +0 -7
  49. data/Gemfile.lock_old +0 -151
  50. data/HOWTO +0 -12
  51. data/PLANNED_CHANGES.md +0 -11
  52. data/README_FROM_VERSION_3_TO_4.md +0 -240
  53. data/Rakefile +0 -31
  54. data/TESTING.md +0 -25
  55. data/aasm.gemspec +0 -35
  56. data/callbacks.txt +0 -51
  57. data/gemfiles/rails_3.2.gemfile +0 -13
  58. data/gemfiles/rails_4.0.gemfile +0 -15
  59. data/gemfiles/rails_4.2.gemfile +0 -16
  60. data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
  61. data/gemfiles/rails_5.0.gemfile +0 -14
  62. data/spec/database.rb +0 -44
  63. data/spec/database.yml +0 -3
  64. data/spec/en.yml +0 -12
  65. data/spec/en_deprecated_style.yml +0 -10
  66. data/spec/generators/active_record_generator_spec.rb +0 -47
  67. data/spec/generators/mongoid_generator_spec.rb +0 -31
  68. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
  69. data/spec/models/active_record/complex_active_record_example.rb +0 -37
  70. data/spec/models/active_record/derivate_new_dsl.rb +0 -7
  71. data/spec/models/active_record/false_state.rb +0 -35
  72. data/spec/models/active_record/gate.rb +0 -39
  73. data/spec/models/active_record/invalid_persistor.rb +0 -29
  74. data/spec/models/active_record/localizer_test_model.rb +0 -34
  75. data/spec/models/active_record/no_direct_assignment.rb +0 -21
  76. data/spec/models/active_record/no_scope.rb +0 -21
  77. data/spec/models/active_record/persisted_state.rb +0 -12
  78. data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
  79. data/spec/models/active_record/reader.rb +0 -7
  80. data/spec/models/active_record/readme_job.rb +0 -21
  81. data/spec/models/active_record/silent_persistor.rb +0 -29
  82. data/spec/models/active_record/simple_new_dsl.rb +0 -17
  83. data/spec/models/active_record/thief.rb +0 -29
  84. data/spec/models/active_record/transactor.rb +0 -124
  85. data/spec/models/active_record/transient.rb +0 -6
  86. data/spec/models/active_record/validator.rb +0 -118
  87. data/spec/models/active_record/with_enum.rb +0 -39
  88. data/spec/models/active_record/with_enum_without_column.rb +0 -38
  89. data/spec/models/active_record/with_false_enum.rb +0 -31
  90. data/spec/models/active_record/with_true_enum.rb +0 -39
  91. data/spec/models/active_record/worker.rb +0 -2
  92. data/spec/models/active_record/writer.rb +0 -6
  93. data/spec/models/basic_two_state_machines_example.rb +0 -25
  94. data/spec/models/callbacks/basic.rb +0 -98
  95. data/spec/models/callbacks/basic_multiple.rb +0 -75
  96. data/spec/models/callbacks/guard_within_block.rb +0 -67
  97. data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
  98. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
  99. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
  100. data/spec/models/callbacks/private_method.rb +0 -44
  101. data/spec/models/callbacks/private_method_multiple.rb +0 -44
  102. data/spec/models/callbacks/with_args.rb +0 -62
  103. data/spec/models/callbacks/with_args_multiple.rb +0 -61
  104. data/spec/models/callbacks/with_state_arg.rb +0 -30
  105. data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
  106. data/spec/models/complex_example.rb +0 -222
  107. data/spec/models/conversation.rb +0 -93
  108. data/spec/models/default_state.rb +0 -12
  109. data/spec/models/double_definer.rb +0 -21
  110. data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
  111. data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
  112. data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
  113. data/spec/models/foo.rb +0 -106
  114. data/spec/models/foo_callback_multiple.rb +0 -45
  115. data/spec/models/guard_arguments_check.rb +0 -17
  116. data/spec/models/guard_with_params.rb +0 -24
  117. data/spec/models/guard_with_params_multiple.rb +0 -18
  118. data/spec/models/guardian.rb +0 -58
  119. data/spec/models/guardian_multiple.rb +0 -48
  120. data/spec/models/guardian_without_from_specified.rb +0 -18
  121. data/spec/models/initial_state_proc.rb +0 -31
  122. data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
  123. data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
  124. data/spec/models/mongoid/mongoid_relationships.rb +0 -26
  125. data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
  126. data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
  127. data/spec/models/mongoid/simple_mongoid.rb +0 -23
  128. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
  129. data/spec/models/mongoid/validator_mongoid.rb +0 -100
  130. data/spec/models/multi_transitioner.rb +0 -34
  131. data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
  132. data/spec/models/namespaced_multiple_example.rb +0 -42
  133. data/spec/models/no_initial_state.rb +0 -25
  134. data/spec/models/not_auto_loaded/process.rb +0 -21
  135. data/spec/models/parametrised_event.rb +0 -42
  136. data/spec/models/parametrised_event_multiple.rb +0 -29
  137. data/spec/models/process_with_new_dsl.rb +0 -31
  138. data/spec/models/provided_state.rb +0 -24
  139. data/spec/models/redis/complex_redis_example.rb +0 -40
  140. data/spec/models/redis/redis_multiple.rb +0 -20
  141. data/spec/models/redis/redis_simple.rb +0 -20
  142. data/spec/models/sequel/complex_sequel_example.rb +0 -46
  143. data/spec/models/sequel/invalid_persistor.rb +0 -52
  144. data/spec/models/sequel/sequel_multiple.rb +0 -25
  145. data/spec/models/sequel/sequel_simple.rb +0 -26
  146. data/spec/models/sequel/silent_persistor.rb +0 -50
  147. data/spec/models/sequel/transactor.rb +0 -112
  148. data/spec/models/sequel/validator.rb +0 -93
  149. data/spec/models/sequel/worker.rb +0 -12
  150. data/spec/models/silencer.rb +0 -27
  151. data/spec/models/simple_custom_example.rb +0 -53
  152. data/spec/models/simple_example.rb +0 -15
  153. data/spec/models/simple_multiple_example.rb +0 -42
  154. data/spec/models/state_machine_with_failed_event.rb +0 -20
  155. data/spec/models/states_on_one_line_example.rb +0 -8
  156. data/spec/models/sub_class.rb +0 -41
  157. data/spec/models/sub_class_with_more_states.rb +0 -18
  158. data/spec/models/sub_classing.rb +0 -3
  159. data/spec/models/super_class.rb +0 -46
  160. data/spec/models/this_name_better_not_be_in_use.rb +0 -11
  161. data/spec/models/valid_state_name.rb +0 -23
  162. data/spec/spec_helper.rb +0 -26
  163. data/spec/spec_helpers/active_record.rb +0 -7
  164. data/spec/spec_helpers/dynamoid.rb +0 -33
  165. data/spec/spec_helpers/mongoid.rb +0 -7
  166. data/spec/spec_helpers/redis.rb +0 -15
  167. data/spec/spec_helpers/remove_warnings.rb +0 -1
  168. data/spec/spec_helpers/sequel.rb +0 -7
  169. data/spec/unit/api_spec.rb +0 -100
  170. data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
  171. data/spec/unit/callback_multiple_spec.rb +0 -300
  172. data/spec/unit/callbacks_spec.rb +0 -491
  173. data/spec/unit/complex_example_spec.rb +0 -94
  174. data/spec/unit/complex_multiple_example_spec.rb +0 -115
  175. data/spec/unit/edge_cases_spec.rb +0 -16
  176. data/spec/unit/event_multiple_spec.rb +0 -73
  177. data/spec/unit/event_naming_spec.rb +0 -16
  178. data/spec/unit/event_spec.rb +0 -381
  179. data/spec/unit/exception_spec.rb +0 -11
  180. data/spec/unit/guard_arguments_check_spec.rb +0 -9
  181. data/spec/unit/guard_multiple_spec.rb +0 -60
  182. data/spec/unit/guard_spec.rb +0 -89
  183. data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
  184. data/spec/unit/guard_with_params_spec.rb +0 -14
  185. data/spec/unit/guard_without_from_specified_spec.rb +0 -10
  186. data/spec/unit/initial_state_multiple_spec.rb +0 -15
  187. data/spec/unit/initial_state_spec.rb +0 -12
  188. data/spec/unit/inspection_multiple_spec.rb +0 -201
  189. data/spec/unit/inspection_spec.rb +0 -149
  190. data/spec/unit/localizer_spec.rb +0 -78
  191. data/spec/unit/memory_leak_spec.rb +0 -38
  192. data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
  193. data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
  194. data/spec/unit/new_dsl_spec.rb +0 -12
  195. data/spec/unit/override_warning_spec.rb +0 -94
  196. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
  197. data/spec/unit/persistence/active_record_persistence_spec.rb +0 -735
  198. data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
  199. data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
  200. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -204
  201. data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -169
  202. data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
  203. data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
  204. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
  205. data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
  206. data/spec/unit/readme_spec.rb +0 -41
  207. data/spec/unit/reloading_spec.rb +0 -15
  208. data/spec/unit/rspec_matcher_spec.rb +0 -79
  209. data/spec/unit/simple_custom_example_spec.rb +0 -39
  210. data/spec/unit/simple_example_spec.rb +0 -42
  211. data/spec/unit/simple_multiple_example_spec.rb +0 -91
  212. data/spec/unit/state_spec.rb +0 -89
  213. data/spec/unit/states_on_one_line_example_spec.rb +0 -16
  214. data/spec/unit/subclassing_multiple_spec.rb +0 -74
  215. data/spec/unit/subclassing_spec.rb +0 -46
  216. data/spec/unit/transition_spec.rb +0 -436
  217. data/test/minitest_helper.rb +0 -57
  218. data/test/unit/minitest_matcher_test.rb +0 -80
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Dynamoid)
4
- describe 'dynamoid' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/dynamoid/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- @model = DynamoidMultiple
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
- model.save
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
- model.save
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.reload
53
- expect(model.aasm(:left).current_state).to eq(:beta)
54
- end
55
- end
56
-
57
- describe 'subclasses' do
58
- it "should have the same states as its parent class" do
59
- expect(Class.new(@model).aasm(:left).states).to eq(@model.aasm(:left).states)
60
- end
61
-
62
- it "should have the same events as its parent class" do
63
- expect(Class.new(@model).aasm(:left).events).to eq(@model.aasm(:left).events)
64
- end
65
-
66
- it "should have the same column as its parent even for the new dsl" do
67
- expect(@model.aasm(:left).attribute_name).to eq(:status)
68
- expect(Class.new(@model).aasm(:left).attribute_name).to eq(:status)
69
- end
70
- end
71
-
72
- describe 'initial states' do
73
- it 'should support conditions' do
74
- @model.aasm(:left) do
75
- initial_state lambda{ |m| m.default }
76
- end
77
-
78
- expect(@model.new(:default => :beta).aasm(:left).current_state).to eq(:beta)
79
- expect(@model.new(:default => :gamma).aasm(:left).current_state).to eq(:gamma)
80
- end
81
- end
82
-
83
- describe "complex example" do
84
- it "works" do
85
- record = ComplexDynamoidExample.new
86
- expect(record.aasm(:left).current_state).to eql :one
87
- expect(record.aasm(:right).current_state).to eql :alpha
88
-
89
- record.save
90
- expect_aasm_states record, :one, :alpha
91
- record.reload
92
- expect_aasm_states record, :one, :alpha
93
-
94
- record.increment!
95
- expect_aasm_states record, :two, :alpha
96
- record.reload
97
- expect_aasm_states record, :two, :alpha
98
-
99
- record.level_up!
100
- expect_aasm_states record, :two, :beta
101
- record.reload
102
- expect_aasm_states record, :two, :beta
103
-
104
- record.increment!
105
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
106
- expect_aasm_states record, :three, :beta
107
- record.reload
108
- expect_aasm_states record, :three, :beta
109
-
110
- record.level_up!
111
- expect_aasm_states record, :three, :gamma
112
- record.reload
113
- expect_aasm_states record, :three, :gamma
114
-
115
- record.level_down # without saving
116
- expect_aasm_states record, :three, :beta
117
- record.reload
118
- expect_aasm_states record, :three, :gamma
119
-
120
- record.level_down # without saving
121
- expect_aasm_states record, :three, :beta
122
- record.reset!
123
- expect_aasm_states record, :one, :beta
124
- end
125
-
126
- def expect_aasm_states(record, left_state, right_state)
127
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
128
- expect(record.left).to eql left_state.to_s
129
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
130
- expect(record.right).to eql right_state.to_s
131
- end
132
- end
133
-
134
- end
135
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Dynamoid)
4
- describe 'dynamoid' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/dynamoid/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- @model = DynamoidSimple
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 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.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
- model.save
39
- model.status = "gamma"
40
- expect(model.aasm.current_state).to eq(:gamma)
41
- end
42
-
43
- it "should allow a nil state" do
44
- model.save
45
- model.status = nil
46
- expect(model.aasm.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.reload
53
- expect(model.aasm.current_state).to eq(:beta)
54
- end
55
- end
56
-
57
- describe 'subclasses' do
58
- it "should have the same states as its parent class" do
59
- expect(Class.new(@model).aasm.states).to eq(@model.aasm.states)
60
- end
61
-
62
- it "should have the same events as its parent class" do
63
- expect(Class.new(@model).aasm.events).to eq(@model.aasm.events)
64
- end
65
-
66
- it "should have the same column as its parent even for the new dsl" do
67
- expect(@model.aasm.attribute_name).to eq(:status)
68
- expect(Class.new(@model).aasm.attribute_name).to eq(:status)
69
- end
70
- end
71
-
72
- describe 'initial states' do
73
- it 'should support conditions' do
74
- @model.aasm do
75
- initial_state lambda{ |m| m.default }
76
- end
77
-
78
- expect(@model.new(:default => :beta).aasm.current_state).to eq(:beta)
79
- expect(@model.new(:default => :gamma).aasm.current_state).to eq(:gamma)
80
- end
81
- end
82
-
83
- end
84
- end
@@ -1,204 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Mongoid::Document)
4
- describe 'mongoid' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/mongoid/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- # if you want to see the statements while running the spec enable the following line
12
- # Mongoid.logger = Logger.new(STDERR)
13
-
14
- Mongoid.configure do |config|
15
- config.connect_to "mongoid_#{Process.pid}"
16
- end
17
- end
18
-
19
- after do
20
- Mongoid.purge!
21
- end
22
-
23
- describe "named scopes with the old DSL" do
24
-
25
- context "Does not already respond_to? the scope name" do
26
- it "should add a scope for each state" do
27
- expect(SimpleMongoidMultiple).to respond_to(:unknown_scope)
28
- expect(SimpleMongoidMultiple).to respond_to(:another_unknown_scope)
29
-
30
- expect(SimpleMongoidMultiple.unknown_scope.class).to eq(Mongoid::Criteria)
31
- expect(SimpleMongoidMultiple.another_unknown_scope.class).to eq(Mongoid::Criteria)
32
- end
33
- end
34
-
35
- context "Already respond_to? the scope name" do
36
- it "should not add a scope" do
37
- expect(SimpleMongoidMultiple).to respond_to(:new)
38
- expect(SimpleMongoidMultiple.new.class).to eq(SimpleMongoidMultiple)
39
- end
40
- end
41
-
42
- end
43
-
44
- describe "named scopes with the new DSL" do
45
- context "Does not already respond_to? the scope name" do
46
- it "should add a scope" do
47
- expect(SimpleNewDslMongoidMultiple).to respond_to(:unknown_scope)
48
- expect(SimpleNewDslMongoidMultiple.unknown_scope.class).to eq(Mongoid::Criteria)
49
- end
50
- end
51
-
52
- context "Already respond_to? the scope name" do
53
- it "should not add a scope" do
54
- expect(SimpleNewDslMongoidMultiple).to respond_to(:new)
55
- expect(SimpleNewDslMongoidMultiple.new.class).to eq(SimpleNewDslMongoidMultiple)
56
- end
57
- end
58
-
59
- it "does not create scopes if requested" do
60
- expect(NoScopeMongoidMultiple).not_to respond_to(:ignored_scope)
61
- end
62
- end
63
-
64
- describe "instance methods" do
65
- let(:simple) {SimpleNewDslMongoidMultiple.new}
66
-
67
- it "should initialize the aasm state on instantiation" do
68
- expect(SimpleNewDslMongoidMultiple.new.status).to eql 'unknown_scope'
69
- expect(SimpleNewDslMongoidMultiple.new.aasm(:left).current_state).to eql :unknown_scope
70
- end
71
-
72
- end
73
-
74
- describe 'transitions with persistence' do
75
-
76
- it "should work for valid models" do
77
- valid_object = MultipleValidatorMongoid.create(:name => 'name')
78
- expect(valid_object).to be_sleeping
79
- valid_object.status = :running
80
- expect(valid_object).to be_running
81
- end
82
-
83
- it 'should not store states for invalid models' do
84
- validator = MultipleValidatorMongoid.create(:name => 'name')
85
- expect(validator).to be_valid
86
- expect(validator).to be_sleeping
87
-
88
- validator.name = nil
89
- expect(validator).not_to be_valid
90
- expect { validator.run! }.to raise_error(Mongoid::Errors::Validations)
91
- expect(validator).to be_sleeping
92
-
93
- validator.reload
94
- expect(validator).not_to be_running
95
- expect(validator).to be_sleeping
96
-
97
- validator.name = 'another name'
98
- expect(validator).to be_valid
99
- expect(validator.run!).to be_truthy
100
- expect(validator).to be_running
101
-
102
- validator.reload
103
- expect(validator).to be_running
104
- expect(validator).not_to be_sleeping
105
- end
106
-
107
- it 'should not store states for invalid models silently if configured' do
108
- validator = MultipleSilentPersistorMongoid.create(:name => 'name')
109
- expect(validator).to be_valid
110
- expect(validator).to be_sleeping
111
-
112
- validator.name = nil
113
- expect(validator).not_to be_valid
114
- expect(validator.run!).to be_falsey
115
- expect(validator).to be_sleeping
116
-
117
- validator.reload
118
- expect(validator).not_to be_running
119
- expect(validator).to be_sleeping
120
-
121
- validator.name = 'another name'
122
- expect(validator).to be_valid
123
- expect(validator.run!).to be_truthy
124
- expect(validator).to be_running
125
-
126
- validator.reload
127
- expect(validator).to be_running
128
- expect(validator).not_to be_sleeping
129
- end
130
-
131
- it 'should store states for invalid models if configured' do
132
- persistor = MultipleInvalidPersistorMongoid.create(:name => 'name')
133
- expect(persistor).to be_valid
134
- expect(persistor).to be_sleeping
135
-
136
- persistor.name = nil
137
- expect(persistor).not_to be_valid
138
- expect(persistor.run!).to be_truthy
139
- expect(persistor).to be_running
140
-
141
- persistor = MultipleInvalidPersistorMongoid.find(persistor.id)
142
- persistor.valid?
143
- expect(persistor).to be_valid
144
- expect(persistor).to be_running
145
- expect(persistor).not_to be_sleeping
146
-
147
- persistor.reload
148
- expect(persistor).to be_running
149
- expect(persistor).not_to be_sleeping
150
- end
151
- end
152
-
153
- describe "complex example" do
154
- it "works" do
155
- record = ComplexMongoidExample.new
156
- expect_aasm_states record, :one, :alpha
157
-
158
- record.save!
159
- expect_aasm_states record, :one, :alpha
160
- record.reload
161
- expect_aasm_states record, :one, :alpha
162
-
163
- record.increment!
164
- expect_aasm_states record, :two, :alpha
165
- record.reload
166
- expect_aasm_states record, :two, :alpha
167
-
168
- record.level_up!
169
- expect_aasm_states record, :two, :beta
170
- record.reload
171
- expect_aasm_states record, :two, :beta
172
-
173
- record.increment!
174
- expect { record.increment! }.to raise_error(AASM::InvalidTransition)
175
- expect_aasm_states record, :three, :beta
176
- record.reload
177
- expect_aasm_states record, :three, :beta
178
-
179
- record.level_up!
180
- expect_aasm_states record, :three, :gamma
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.reload
187
- expect_aasm_states record, :three, :gamma
188
-
189
- record.level_down # without saving
190
- expect_aasm_states record, :three, :beta
191
- record.reset!
192
- expect_aasm_states record, :one, :beta
193
- end
194
-
195
- def expect_aasm_states(record, left_state, right_state)
196
- expect(record.aasm(:left).current_state).to eql left_state.to_sym
197
- expect(record.left).to eql left_state.to_s
198
- expect(record.aasm(:right).current_state).to eql right_state.to_sym
199
- expect(record.right).to eql right_state.to_s
200
- end
201
- end
202
-
203
- end
204
- end
@@ -1,169 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if defined?(Mongoid::Document)
4
- describe 'mongoid' do
5
-
6
- Dir[File.dirname(__FILE__) + "/../../models/mongoid/*.rb"].sort.each do |f|
7
- require File.expand_path(f)
8
- end
9
-
10
- before(:all) do
11
- # if you want to see the statements while running the spec enable the following line
12
- # Mongoid.logger = Logger.new(STDERR)
13
-
14
- Mongoid.configure do |config|
15
- config.connect_to "mongoid_#{Process.pid}"
16
- end
17
- end
18
-
19
- after do
20
- Mongoid.purge!
21
- end
22
-
23
- describe "named scopes with the old DSL" do
24
-
25
- context "Does not already respond_to? the scope name" do
26
- it "should add a scope for each state" do
27
- expect(SimpleMongoid).to respond_to(:unknown_scope)
28
- expect(SimpleMongoid).to respond_to(:another_unknown_scope)
29
-
30
- expect(SimpleMongoid.unknown_scope.class).to eq(Mongoid::Criteria)
31
- expect(SimpleMongoid.another_unknown_scope.class).to eq(Mongoid::Criteria)
32
- end
33
- end
34
-
35
- context "Already respond_to? the scope name" do
36
- it "should not add a scope" do
37
- expect(SimpleMongoid).to respond_to(:new)
38
- expect(SimpleMongoid.new.class).to eq(SimpleMongoid)
39
- end
40
- end
41
-
42
- end
43
-
44
- describe "named scopes with the new DSL" do
45
-
46
- context "Does not already respond_to? the scope name" do
47
- it "should add a scope" do
48
- expect(SimpleNewDslMongoid).to respond_to(:unknown_scope)
49
- expect(SimpleNewDslMongoid.unknown_scope.class).to eq(Mongoid::Criteria)
50
- end
51
- end
52
-
53
- context "Already respond_to? the scope name" do
54
- it "should not add a scope" do
55
- expect(SimpleNewDslMongoid).to respond_to(:new)
56
- expect(SimpleNewDslMongoid.new.class).to eq(SimpleNewDslMongoid)
57
- end
58
- end
59
-
60
- it "does not create scopes if requested" do
61
- expect(NoScopeMongoid).not_to respond_to(:ignored_scope)
62
- end
63
-
64
- end
65
-
66
- describe "instance methods" do
67
- let(:simple) {SimpleNewDslMongoid.new}
68
-
69
- it "should initialize the aasm state on instantiation" do
70
- expect(SimpleNewDslMongoid.new.status).to eql 'unknown_scope'
71
- expect(SimpleNewDslMongoid.new.aasm.current_state).to eql :unknown_scope
72
- end
73
-
74
- end
75
-
76
- describe "relations object" do
77
-
78
- it "should load relations object ids" do
79
- parent = Parent.create
80
- child_1 = Child.create(parent_id: parent.id)
81
- child_2 = Child.create(parent_id: parent.id)
82
- expect(parent.child_ids).to eql [child_1.id, child_2.id]
83
- end
84
-
85
- end
86
-
87
- describe 'transitions with persistence' do
88
-
89
- it 'should work for valid models' do
90
- valid_object = ValidatorMongoid.create(:name => 'name')
91
- expect(valid_object).to be_sleeping
92
- valid_object.status = :running
93
- expect(valid_object).to be_running
94
- end
95
-
96
- it 'should not store states for invalid models' do
97
- validator = ValidatorMongoid.create(:name => 'name')
98
- expect(validator).to be_valid
99
- expect(validator).to be_sleeping
100
-
101
- validator.name = nil
102
- expect(validator).not_to be_valid
103
- expect { validator.run! }.to raise_error(Mongoid::Errors::Validations)
104
- expect(validator).to be_sleeping
105
-
106
- validator.reload
107
- expect(validator).not_to be_running
108
- expect(validator).to be_sleeping
109
-
110
- validator.name = 'another name'
111
- expect(validator).to be_valid
112
- expect(validator.run!).to be_truthy
113
- expect(validator).to be_running
114
-
115
- validator.reload
116
- expect(validator).to be_running
117
- expect(validator).not_to be_sleeping
118
- end
119
-
120
- it 'should not store states for invalid models silently if configured' do
121
- validator = SilentPersistorMongoid.create(:name => 'name')
122
- expect(validator).to be_valid
123
- expect(validator).to be_sleeping
124
-
125
- validator.name = nil
126
- expect(validator).not_to be_valid
127
- expect(validator.run!).to be_falsey
128
- expect(validator).to be_sleeping
129
-
130
- validator.reload
131
- expect(validator).not_to be_running
132
- expect(validator).to be_sleeping
133
-
134
- validator.name = 'another name'
135
- expect(validator).to be_valid
136
- expect(validator.run!).to be_truthy
137
- expect(validator).to be_running
138
-
139
- validator.reload
140
- expect(validator).to be_running
141
- expect(validator).not_to be_sleeping
142
- end
143
-
144
- it 'should store states for invalid models if configured' do
145
- persistor = InvalidPersistorMongoid.create(:name => 'name')
146
- expect(persistor).to be_valid
147
- expect(persistor).to be_sleeping
148
-
149
- persistor.name = nil
150
-
151
- expect(persistor).not_to be_valid
152
- expect(persistor.run!).to be_truthy
153
- expect(persistor).to be_running
154
-
155
- persistor = InvalidPersistorMongoid.find(persistor.id)
156
-
157
- persistor.valid?
158
- expect(persistor).to be_valid
159
- expect(persistor).to be_running
160
- expect(persistor).not_to be_sleeping
161
-
162
- persistor.reload
163
- expect(persistor).to be_running
164
- expect(persistor).not_to be_sleeping
165
- end
166
- end
167
-
168
- end
169
- 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