aasm 4.5.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 (186) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/README.md +809 -129
  4. data/lib/aasm/aasm.rb +74 -37
  5. data/lib/aasm/base.rb +188 -41
  6. data/lib/aasm/configuration.rb +27 -2
  7. data/lib/aasm/core/event.rb +75 -47
  8. data/lib/aasm/core/invoker.rb +129 -0
  9. data/lib/aasm/core/invokers/base_invoker.rb +75 -0
  10. data/lib/aasm/core/invokers/class_invoker.rb +52 -0
  11. data/lib/aasm/core/invokers/literal_invoker.rb +49 -0
  12. data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
  13. data/lib/aasm/core/state.rb +22 -13
  14. data/lib/aasm/core/transition.rb +30 -23
  15. data/lib/aasm/dsl_helper.rb +24 -22
  16. data/lib/aasm/errors.rb +8 -5
  17. data/lib/aasm/instance_base.rb +63 -15
  18. data/lib/aasm/localizer.rb +13 -3
  19. data/lib/aasm/minitest/allow_event.rb +13 -0
  20. data/lib/aasm/minitest/allow_transition_to.rb +13 -0
  21. data/lib/aasm/minitest/have_state.rb +13 -0
  22. data/lib/aasm/minitest/transition_from.rb +21 -0
  23. data/lib/aasm/minitest.rb +5 -0
  24. data/lib/aasm/minitest_spec.rb +15 -0
  25. data/lib/aasm/persistence/active_record_persistence.rb +87 -79
  26. data/lib/aasm/persistence/base.rb +30 -30
  27. data/lib/aasm/persistence/core_data_query_persistence.rb +94 -0
  28. data/lib/aasm/persistence/dynamoid_persistence.rb +92 -0
  29. data/lib/aasm/persistence/mongoid_persistence.rb +49 -35
  30. data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
  31. data/lib/aasm/persistence/orm.rb +154 -0
  32. data/lib/aasm/persistence/plain_persistence.rb +2 -1
  33. data/lib/aasm/persistence/redis_persistence.rb +112 -0
  34. data/lib/aasm/persistence/sequel_persistence.rb +37 -67
  35. data/lib/aasm/persistence.rb +20 -5
  36. data/lib/aasm/rspec/allow_event.rb +5 -1
  37. data/lib/aasm/rspec/allow_transition_to.rb +5 -1
  38. data/lib/aasm/rspec/transition_from.rb +8 -4
  39. data/lib/aasm/state_machine.rb +6 -12
  40. data/lib/aasm/state_machine_store.rb +76 -0
  41. data/lib/aasm/version.rb +1 -1
  42. data/lib/aasm.rb +8 -2
  43. data/lib/generators/aasm/aasm_generator.rb +16 -0
  44. data/lib/generators/aasm/orm_helpers.rb +41 -0
  45. data/lib/generators/active_record/aasm_generator.rb +40 -0
  46. data/lib/generators/active_record/templates/migration.rb +8 -0
  47. data/lib/generators/active_record/templates/migration_existing.rb +5 -0
  48. data/lib/generators/mongoid/aasm_generator.rb +28 -0
  49. data/lib/generators/nobrainer/aasm_generator.rb +28 -0
  50. data/lib/motion-aasm.rb +37 -0
  51. metadata +104 -259
  52. data/.document +0 -6
  53. data/.gitignore +0 -19
  54. data/.travis.yml +0 -37
  55. data/API +0 -34
  56. data/CHANGELOG.md +0 -272
  57. data/CODE_OF_CONDUCT.md +0 -13
  58. data/Gemfile +0 -15
  59. data/HOWTO +0 -12
  60. data/PLANNED_CHANGES.md +0 -11
  61. data/README_FROM_VERSION_3_TO_4.md +0 -240
  62. data/Rakefile +0 -26
  63. data/aasm.gemspec +0 -31
  64. data/callbacks.txt +0 -51
  65. data/gemfiles/rails_3.2.gemfile +0 -14
  66. data/gemfiles/rails_4.0.gemfile +0 -12
  67. data/gemfiles/rails_4.0_mongo_mapper.gemfile +0 -14
  68. data/gemfiles/rails_4.1.gemfile +0 -12
  69. data/gemfiles/rails_4.1_mongo_mapper.gemfile +0 -14
  70. data/gemfiles/rails_4.2.gemfile +0 -12
  71. data/gemfiles/rails_4.2_mongo_mapper.gemfile +0 -14
  72. data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -12
  73. data/lib/aasm/persistence/mongo_mapper_persistence.rb +0 -157
  74. data/spec/database.rb +0 -63
  75. data/spec/database.yml +0 -3
  76. data/spec/en.yml +0 -9
  77. data/spec/en_deprecated_style.yml +0 -10
  78. data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
  79. data/spec/models/active_record/complex_active_record_example.rb +0 -33
  80. data/spec/models/active_record/derivate_new_dsl.rb +0 -7
  81. data/spec/models/active_record/false_state.rb +0 -35
  82. data/spec/models/active_record/gate.rb +0 -39
  83. data/spec/models/active_record/localizer_test_model.rb +0 -34
  84. data/spec/models/active_record/no_direct_assignment.rb +0 -21
  85. data/spec/models/active_record/no_scope.rb +0 -21
  86. data/spec/models/active_record/persisted_state.rb +0 -12
  87. data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
  88. data/spec/models/active_record/reader.rb +0 -7
  89. data/spec/models/active_record/readme_job.rb +0 -21
  90. data/spec/models/active_record/simple_new_dsl.rb +0 -17
  91. data/spec/models/active_record/thief.rb +0 -29
  92. data/spec/models/active_record/transient.rb +0 -6
  93. data/spec/models/active_record/with_enum.rb +0 -39
  94. data/spec/models/active_record/with_false_enum.rb +0 -31
  95. data/spec/models/active_record/with_true_enum.rb +0 -39
  96. data/spec/models/active_record/writer.rb +0 -6
  97. data/spec/models/basic_two_state_machines_example.rb +0 -25
  98. data/spec/models/callbacks/basic.rb +0 -78
  99. data/spec/models/callbacks/basic_multiple.rb +0 -75
  100. data/spec/models/callbacks/guard_within_block.rb +0 -66
  101. data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
  102. data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -65
  103. data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
  104. data/spec/models/callbacks/private_method.rb +0 -44
  105. data/spec/models/callbacks/private_method_multiple.rb +0 -44
  106. data/spec/models/callbacks/with_args.rb +0 -61
  107. data/spec/models/callbacks/with_args_multiple.rb +0 -61
  108. data/spec/models/callbacks/with_state_arg.rb +0 -26
  109. data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
  110. data/spec/models/complex_example.rb +0 -222
  111. data/spec/models/conversation.rb +0 -93
  112. data/spec/models/default_state.rb +0 -12
  113. data/spec/models/double_definer.rb +0 -21
  114. data/spec/models/foo.rb +0 -92
  115. data/spec/models/foo_callback_multiple.rb +0 -45
  116. data/spec/models/guardian.rb +0 -48
  117. data/spec/models/guardian_multiple.rb +0 -48
  118. data/spec/models/initial_state_proc.rb +0 -31
  119. data/spec/models/invalid_persistor.rb +0 -31
  120. data/spec/models/mongo_mapper/complex_mongo_mapper_example.rb +0 -37
  121. data/spec/models/mongo_mapper/no_scope_mongo_mapper.rb +0 -21
  122. data/spec/models/mongo_mapper/simple_mongo_mapper.rb +0 -23
  123. data/spec/models/mongo_mapper/simple_new_dsl_mongo_mapper.rb +0 -25
  124. data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
  125. data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
  126. data/spec/models/mongoid/simple_mongoid.rb +0 -23
  127. data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
  128. data/spec/models/no_initial_state.rb +0 -25
  129. data/spec/models/not_auto_loaded/process.rb +0 -21
  130. data/spec/models/parametrised_event.rb +0 -29
  131. data/spec/models/parametrised_event_multiple.rb +0 -29
  132. data/spec/models/process_with_new_dsl.rb +0 -31
  133. data/spec/models/provided_state.rb +0 -24
  134. data/spec/models/sequel/complex_sequel_example.rb +0 -45
  135. data/spec/models/sequel/sequel_multiple.rb +0 -25
  136. data/spec/models/sequel/sequel_simple.rb +0 -25
  137. data/spec/models/silencer.rb +0 -27
  138. data/spec/models/simple_example.rb +0 -15
  139. data/spec/models/simple_multiple_example.rb +0 -30
  140. data/spec/models/state_machine_with_failed_event.rb +0 -12
  141. data/spec/models/sub_class.rb +0 -7
  142. data/spec/models/sub_class_with_more_states.rb +0 -18
  143. data/spec/models/sub_classing.rb +0 -3
  144. data/spec/models/super_class.rb +0 -46
  145. data/spec/models/this_name_better_not_be_in_use.rb +0 -11
  146. data/spec/models/transactor.rb +0 -53
  147. data/spec/models/valid_state_name.rb +0 -23
  148. data/spec/models/validator.rb +0 -79
  149. data/spec/models/worker.rb +0 -2
  150. data/spec/spec_helper.rb +0 -25
  151. data/spec/unit/api_spec.rb +0 -77
  152. data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
  153. data/spec/unit/callback_multiple_spec.rb +0 -295
  154. data/spec/unit/callbacks_spec.rb +0 -296
  155. data/spec/unit/complex_example_spec.rb +0 -84
  156. data/spec/unit/complex_multiple_example_spec.rb +0 -99
  157. data/spec/unit/edge_cases_spec.rb +0 -16
  158. data/spec/unit/event_multiple_spec.rb +0 -73
  159. data/spec/unit/event_naming_spec.rb +0 -11
  160. data/spec/unit/event_spec.rb +0 -322
  161. data/spec/unit/guard_multiple_spec.rb +0 -60
  162. data/spec/unit/guard_spec.rb +0 -60
  163. data/spec/unit/initial_state_multiple_spec.rb +0 -15
  164. data/spec/unit/initial_state_spec.rb +0 -12
  165. data/spec/unit/inspection_multiple_spec.rb +0 -201
  166. data/spec/unit/inspection_spec.rb +0 -111
  167. data/spec/unit/localizer_spec.rb +0 -76
  168. data/spec/unit/memory_leak_spec.rb +0 -38
  169. data/spec/unit/new_dsl_spec.rb +0 -12
  170. data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -573
  171. data/spec/unit/persistence/active_record_persistence_spec.rb +0 -552
  172. data/spec/unit/persistence/mongo_mapper_persistence_multiple_spec.rb +0 -146
  173. data/spec/unit/persistence/mongo_mapper_persistence_spec.rb +0 -93
  174. data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -127
  175. data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -79
  176. data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -153
  177. data/spec/unit/persistence/sequel_persistence_spec.rb +0 -100
  178. data/spec/unit/readme_spec.rb +0 -42
  179. data/spec/unit/reloading_spec.rb +0 -15
  180. data/spec/unit/rspec_matcher_spec.rb +0 -79
  181. data/spec/unit/simple_example_spec.rb +0 -42
  182. data/spec/unit/simple_multiple_example_spec.rb +0 -63
  183. data/spec/unit/state_spec.rb +0 -89
  184. data/spec/unit/subclassing_multiple_spec.rb +0 -39
  185. data/spec/unit/subclassing_spec.rb +0 -31
  186. data/spec/unit/transition_spec.rb +0 -291
@@ -1,30 +0,0 @@
1
- class SimpleMultipleExample
2
- include AASM
3
- aasm(:move) do
4
- state :standing, :initial => true
5
- state :walking
6
- state :running
7
-
8
- event :walk do
9
- transitions :from => :standing, :to => :walking
10
- end
11
- event :run do
12
- transitions :from => [:standing, :walking], :to => :running
13
- end
14
- event :hold do
15
- transitions :from => [:walking, :running], :to => :standing
16
- end
17
- end
18
-
19
- aasm(:work) do
20
- state :sleeping, :initial => true
21
- state :processing
22
-
23
- event :start do
24
- transitions :from => :sleeping, :to => :processing
25
- end
26
- event :stop do
27
- transitions :from => :processing, :to => :sleeping
28
- end
29
- end
30
- end
@@ -1,12 +0,0 @@
1
- class StateMachineWithFailedEvent
2
- include AASM
3
-
4
- aasm do
5
- state :init, :initial => true
6
- state :failed
7
-
8
- event :failed do
9
- transitions :from => :init, :to => :failed
10
- end
11
- end
12
- end
@@ -1,7 +0,0 @@
1
- require_relative 'super_class'
2
-
3
- class SubClass < SuperClass
4
- end
5
-
6
- class SubClassMultiple < SuperClassMultiple
7
- end
@@ -1,18 +0,0 @@
1
- require_relative 'super_class'
2
-
3
- class SubClassWithMoreStates < SuperClass
4
- include AASM
5
- aasm do
6
- state :foo
7
- end
8
- end
9
-
10
- class SubClassWithMoreStatesMultiple < SuperClassMultiple
11
- include AASM
12
- aasm(:left) do
13
- state :foo
14
- end
15
- aasm(:right) do
16
- state :archived
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- class SubClassing < Silencer
2
-
3
- end
@@ -1,46 +0,0 @@
1
- class SuperClass
2
- include AASM
3
-
4
- aasm do
5
- state :read
6
- state :ended
7
-
8
- event :foo do
9
- transitions :to => :ended, :from => [:read]
10
- end
11
- end
12
-
13
- def update_state
14
- if may_foo?
15
- foo!
16
- end
17
- end
18
- end
19
-
20
- class SuperClassMultiple
21
- include AASM
22
-
23
- aasm(:left) do
24
- state :read
25
- state :ended
26
-
27
- event :foo do
28
- transitions :to => :ended, :from => [:read]
29
- end
30
- end
31
-
32
- aasm(:right) do
33
- state :opened
34
- state :closed
35
-
36
- event :close do
37
- transitions :to => :closed, :from => [:opened]
38
- end
39
- end
40
-
41
- def update_state
42
- if may_foo?
43
- foo!
44
- end
45
- end
46
- end
@@ -1,11 +0,0 @@
1
- class ThisNameBetterNotBeInUse
2
- include AASM
3
-
4
- aasm do
5
- state :initial
6
- state :symbol
7
- state :string
8
- state :array
9
- state :proc
10
- end
11
- end
@@ -1,53 +0,0 @@
1
- require 'active_record'
2
-
3
- class Transactor < ActiveRecord::Base
4
-
5
- belongs_to :worker
6
-
7
- include AASM
8
- aasm :column => :status do
9
- state :sleeping, :initial => true
10
- state :running, :before_enter => :start_worker, :after_enter => :fail
11
-
12
- event :run do
13
- transitions :to => :running, :from => :sleeping
14
- end
15
- end
16
-
17
- private
18
-
19
- def start_worker
20
- worker.update_attribute(:status, 'running')
21
- end
22
-
23
- def fail
24
- raise StandardError.new('failed on purpose')
25
- end
26
-
27
- end
28
-
29
- class MultipleTransactor < ActiveRecord::Base
30
-
31
- belongs_to :worker
32
-
33
- include AASM
34
- aasm :left, :column => :status do
35
- state :sleeping, :initial => true
36
- state :running, :before_enter => :start_worker, :after_enter => :fail
37
-
38
- event :run do
39
- transitions :to => :running, :from => :sleeping
40
- end
41
- end
42
-
43
- private
44
-
45
- def start_worker
46
- worker.update_attribute(:status, 'running')
47
- end
48
-
49
- def fail
50
- raise StandardError.new('failed on purpose')
51
- end
52
-
53
- end
@@ -1,23 +0,0 @@
1
- class ValidStateName
2
- include AASM
3
- aasm do
4
- state :invalid, :initial => true
5
- state :valid
6
-
7
- event :valid do
8
- transitions :to => :valid, :from => [:invalid]
9
- end
10
- end
11
- end
12
-
13
- class ValidStateNameMultiple
14
- include AASM
15
- aasm(:left) do
16
- state :invalid, :initial => true
17
- state :valid
18
-
19
- event :valid do
20
- transitions :to => :valid, :from => [:invalid]
21
- end
22
- end
23
- end
@@ -1,79 +0,0 @@
1
- require 'active_record'
2
-
3
- class Validator < ActiveRecord::Base
4
-
5
- include AASM
6
- aasm :column => :status do
7
- state :sleeping, :initial => true
8
- state :running
9
- state :failed, :after_enter => :fail
10
-
11
- event :run, :after_commit => :change_name! do
12
- transitions :to => :running, :from => :sleeping
13
- end
14
- event :sleep do
15
- after_commit do |name|
16
- change_name_on_sleep name
17
- end
18
- transitions :to => :sleeping, :from => :running
19
- end
20
- event :fail do
21
- transitions :to => :failed, :from => [:sleeping, :running]
22
- end
23
- end
24
-
25
- validates_presence_of :name
26
-
27
- def change_name!
28
- self.name = "name changed"
29
- save!
30
- end
31
-
32
- def change_name_on_sleep name
33
- self.name = name
34
- save!
35
- end
36
-
37
- def fail
38
- raise StandardError.new('failed on purpose')
39
- end
40
- end
41
-
42
- class MultipleValidator < ActiveRecord::Base
43
-
44
- include AASM
45
- aasm :left, :column => :status do
46
- state :sleeping, :initial => true
47
- state :running
48
- state :failed, :after_enter => :fail
49
-
50
- event :run, :after_commit => :change_name! do
51
- transitions :to => :running, :from => :sleeping
52
- end
53
- event :sleep do
54
- after_commit do |name|
55
- change_name_on_sleep name
56
- end
57
- transitions :to => :sleeping, :from => :running
58
- end
59
- event :fail do
60
- transitions :to => :failed, :from => [:sleeping, :running]
61
- end
62
- end
63
-
64
- validates_presence_of :name
65
-
66
- def change_name!
67
- self.name = "name changed"
68
- save!
69
- end
70
-
71
- def change_name_on_sleep name
72
- self.name = name
73
- save!
74
- end
75
-
76
- def fail
77
- raise StandardError.new('failed on purpose')
78
- end
79
- end
@@ -1,2 +0,0 @@
1
- class Worker < ActiveRecord::Base
2
- end
data/spec/spec_helper.rb DELETED
@@ -1,25 +0,0 @@
1
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
2
- $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
3
- require 'aasm'
4
- require 'rspec'
5
- require 'aasm/rspec'
6
-
7
- # require 'ruby-debug'; Debugger.settings[:autoeval] = true; debugger; rubys_debugger = 'annoying'
8
- # require 'ruby-debug/completion'
9
- # require 'pry'
10
-
11
- SEQUEL_DB = defined?(JRUBY_VERSION) ? 'jdbc:sqlite::memory:' : 'sqlite:/'
12
-
13
- def load_schema
14
- require 'logger'
15
- config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
16
- ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
17
- ActiveRecord::Base.establish_connection(config['sqlite3'])
18
- require File.dirname(__FILE__) + "/database.rb"
19
- end
20
-
21
- # custom spec helpers
22
- Dir[File.dirname(__FILE__) + "/spec_helpers/**/*.rb"].sort.each { |f| require File.expand_path(f) }
23
-
24
- # example model classes
25
- Dir[File.dirname(__FILE__) + "/models/*.rb"].sort.each { |f| require File.expand_path(f) }
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
- require 'models/default_state.rb'
3
- require 'models/provided_state.rb'
4
- require 'models/active_record/persisted_state.rb'
5
- require 'models/active_record/provided_and_persisted_state.rb'
6
-
7
- load_schema
8
-
9
- describe "reading the current state" do
10
- it "uses the AASM default" do
11
- expect(DefaultState.new.aasm.current_state).to eql :alpha
12
- end
13
-
14
- it "uses the provided method" do
15
- expect(ProvidedState.new.aasm.current_state).to eql :beta
16
- end
17
-
18
- it "uses the persistence storage" do
19
- expect(PersistedState.new.aasm.current_state).to eql :alpha
20
- end
21
-
22
- it "uses the provided method even if persisted" do
23
- expect(ProvidedAndPersistedState.new.aasm.current_state).to eql :gamma
24
- end
25
- end
26
-
27
- describe "writing and persisting the current state" do
28
- it "uses the AASM default" do
29
- o = DefaultState.new
30
- o.release!
31
- expect(o.persisted_store).to be_nil
32
- end
33
-
34
- it "uses the provided method" do
35
- o = ProvidedState.new
36
- o.release!
37
- expect(o.persisted_store).to eql :beta
38
- end
39
-
40
- it "uses the persistence storage" do
41
- o = PersistedState.new
42
- o.release!
43
- expect(o.persisted_store).to be_nil
44
- end
45
-
46
- it "uses the provided method even if persisted" do
47
- o = ProvidedAndPersistedState.new
48
- o.release!
49
- expect(o.persisted_store).to eql :beta
50
- end
51
- end
52
-
53
- describe "writing the current state without persisting it" do
54
- it "uses the AASM default" do
55
- o = DefaultState.new
56
- o.release
57
- expect(o.transient_store).to be_nil
58
- end
59
-
60
- it "uses the provided method" do
61
- o = ProvidedState.new
62
- o.release
63
- expect(o.transient_store).to eql :beta
64
- end
65
-
66
- it "uses the persistence storage" do
67
- o = PersistedState.new
68
- o.release
69
- expect(o.transient_store).to be_nil
70
- end
71
-
72
- it "uses the provided method even if persisted" do
73
- o = ProvidedAndPersistedState.new
74
- o.release
75
- expect(o.transient_store).to eql :beta
76
- end
77
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'on initialization' do
4
- let(:example) { BasicTwoStateMachinesExample.new }
5
-
6
- it 'should be in the initial state' do
7
- expect(example.aasm(:search).current_state).to eql :initialised
8
- expect(example.aasm(:sync).current_state).to eql :unsynced
9
- end
10
- end