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.
- checksums.yaml +5 -5
- data/README.md +243 -118
- data/lib/aasm/aasm.rb +29 -27
- data/lib/aasm/base.rb +61 -11
- data/lib/aasm/configuration.rb +3 -0
- data/lib/aasm/core/event.rb +21 -9
- data/lib/aasm/core/invokers/class_invoker.rb +1 -1
- data/lib/aasm/core/invokers/literal_invoker.rb +3 -1
- data/lib/aasm/core/state.rb +6 -5
- data/lib/aasm/core/transition.rb +1 -1
- data/lib/aasm/dsl_helper.rb +24 -22
- data/lib/aasm/errors.rb +3 -1
- data/lib/aasm/instance_base.rb +28 -5
- data/lib/aasm/localizer.rb +13 -3
- data/lib/aasm/persistence/active_record_persistence.rb +25 -5
- data/lib/aasm/persistence/base.rb +14 -3
- data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
- data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
- data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
- data/lib/aasm/persistence/no_brainer_persistence.rb +1 -1
- data/lib/aasm/persistence/orm.rb +23 -19
- data/lib/aasm/persistence/redis_persistence.rb +1 -1
- data/lib/aasm/rspec/transition_from.rb +5 -1
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +0 -2
- data/lib/generators/aasm/orm_helpers.rb +7 -1
- data/lib/generators/active_record/aasm_generator.rb +3 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- metadata +35 -385
- data/.document +0 -6
- data/.gitignore +0 -20
- data/.travis.yml +0 -54
- data/API +0 -34
- data/Appraisals +0 -66
- data/CHANGELOG.md +0 -377
- data/CODE_OF_CONDUCT.md +0 -13
- data/CONTRIBUTING.md +0 -24
- data/Dockerfile +0 -44
- data/Gemfile +0 -6
- data/Gemfile.lock_old +0 -151
- data/HOWTO +0 -12
- data/PLANNED_CHANGES.md +0 -11
- data/README_FROM_VERSION_3_TO_4.md +0 -240
- data/Rakefile +0 -31
- data/TESTING.md +0 -25
- data/aasm.gemspec +0 -35
- data/callbacks.txt +0 -51
- data/docker-compose.yml +0 -40
- data/gemfiles/rails_3.2.gemfile +0 -13
- data/gemfiles/rails_4.0.gemfile +0 -15
- data/gemfiles/rails_4.2.gemfile +0 -16
- data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
- data/gemfiles/rails_4.2_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.0.gemfile +0 -13
- data/gemfiles/rails_5.0_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.1.gemfile +0 -13
- data/spec/database.rb +0 -44
- data/spec/database.yml +0 -3
- data/spec/en.yml +0 -12
- data/spec/en_deprecated_style.yml +0 -10
- data/spec/generators/active_record_generator_spec.rb +0 -47
- data/spec/generators/mongoid_generator_spec.rb +0 -31
- data/spec/generators/no_brainer_generator_spec.rb +0 -29
- data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
- data/spec/models/active_record/complex_active_record_example.rb +0 -37
- data/spec/models/active_record/derivate_new_dsl.rb +0 -7
- data/spec/models/active_record/false_state.rb +0 -35
- data/spec/models/active_record/gate.rb +0 -39
- data/spec/models/active_record/invalid_persistor.rb +0 -29
- data/spec/models/active_record/localizer_test_model.rb +0 -34
- data/spec/models/active_record/no_direct_assignment.rb +0 -21
- data/spec/models/active_record/no_scope.rb +0 -21
- data/spec/models/active_record/persisted_state.rb +0 -12
- data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
- data/spec/models/active_record/reader.rb +0 -7
- data/spec/models/active_record/readme_job.rb +0 -21
- data/spec/models/active_record/silent_persistor.rb +0 -29
- data/spec/models/active_record/simple_new_dsl.rb +0 -17
- data/spec/models/active_record/thief.rb +0 -29
- data/spec/models/active_record/transactor.rb +0 -124
- data/spec/models/active_record/transient.rb +0 -6
- data/spec/models/active_record/validator.rb +0 -118
- data/spec/models/active_record/with_enum.rb +0 -39
- data/spec/models/active_record/with_enum_without_column.rb +0 -38
- data/spec/models/active_record/with_false_enum.rb +0 -31
- data/spec/models/active_record/with_true_enum.rb +0 -39
- data/spec/models/active_record/worker.rb +0 -2
- data/spec/models/active_record/writer.rb +0 -6
- data/spec/models/basic_two_state_machines_example.rb +0 -25
- data/spec/models/callbacks/basic.rb +0 -98
- data/spec/models/callbacks/basic_multiple.rb +0 -75
- data/spec/models/callbacks/guard_within_block.rb +0 -67
- data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
- data/spec/models/callbacks/private_method.rb +0 -44
- data/spec/models/callbacks/private_method_multiple.rb +0 -44
- data/spec/models/callbacks/with_args.rb +0 -62
- data/spec/models/callbacks/with_args_multiple.rb +0 -61
- data/spec/models/callbacks/with_state_arg.rb +0 -30
- data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
- data/spec/models/complex_example.rb +0 -222
- data/spec/models/conversation.rb +0 -93
- data/spec/models/default_state.rb +0 -12
- data/spec/models/double_definer.rb +0 -21
- data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
- data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
- data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
- data/spec/models/foo.rb +0 -106
- data/spec/models/foo_callback_multiple.rb +0 -45
- data/spec/models/guard_arguments_check.rb +0 -17
- data/spec/models/guard_with_params.rb +0 -24
- data/spec/models/guard_with_params_multiple.rb +0 -18
- data/spec/models/guardian.rb +0 -58
- data/spec/models/guardian_multiple.rb +0 -48
- data/spec/models/guardian_without_from_specified.rb +0 -18
- data/spec/models/initial_state_proc.rb +0 -31
- data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
- data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/mongoid_relationships.rb +0 -26
- data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
- data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/simple_mongoid.rb +0 -23
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
- data/spec/models/mongoid/validator_mongoid.rb +0 -100
- data/spec/models/multi_transitioner.rb +0 -34
- data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
- data/spec/models/namespaced_multiple_example.rb +0 -42
- data/spec/models/no_initial_state.rb +0 -25
- data/spec/models/nobrainer/complex_no_brainer_example.rb +0 -36
- data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/no_scope_no_brainer.rb +0 -21
- data/spec/models/nobrainer/nobrainer_relationships.rb +0 -25
- data/spec/models/nobrainer/silent_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +0 -25
- data/spec/models/nobrainer/simple_no_brainer.rb +0 -23
- data/spec/models/nobrainer/validator_no_brainer.rb +0 -98
- data/spec/models/not_auto_loaded/process.rb +0 -21
- data/spec/models/parametrised_event.rb +0 -42
- data/spec/models/parametrised_event_multiple.rb +0 -29
- data/spec/models/process_with_new_dsl.rb +0 -31
- data/spec/models/provided_state.rb +0 -24
- data/spec/models/redis/complex_redis_example.rb +0 -40
- data/spec/models/redis/redis_multiple.rb +0 -20
- data/spec/models/redis/redis_simple.rb +0 -20
- data/spec/models/sequel/complex_sequel_example.rb +0 -46
- data/spec/models/sequel/invalid_persistor.rb +0 -52
- data/spec/models/sequel/sequel_multiple.rb +0 -25
- data/spec/models/sequel/sequel_simple.rb +0 -26
- data/spec/models/sequel/silent_persistor.rb +0 -50
- data/spec/models/sequel/transactor.rb +0 -112
- data/spec/models/sequel/validator.rb +0 -93
- data/spec/models/sequel/worker.rb +0 -12
- data/spec/models/silencer.rb +0 -27
- data/spec/models/simple_custom_example.rb +0 -53
- data/spec/models/simple_example.rb +0 -17
- data/spec/models/simple_example_with_guard_args.rb +0 -17
- data/spec/models/simple_multiple_example.rb +0 -42
- data/spec/models/state_machine_with_failed_event.rb +0 -20
- data/spec/models/states_on_one_line_example.rb +0 -8
- data/spec/models/sub_class.rb +0 -41
- data/spec/models/sub_class_with_more_states.rb +0 -18
- data/spec/models/sub_classing.rb +0 -3
- data/spec/models/super_class.rb +0 -46
- data/spec/models/this_name_better_not_be_in_use.rb +0 -11
- data/spec/models/valid_state_name.rb +0 -23
- data/spec/spec_helper.rb +0 -26
- data/spec/spec_helpers/active_record.rb +0 -8
- data/spec/spec_helpers/dynamoid.rb +0 -35
- data/spec/spec_helpers/mongoid.rb +0 -26
- data/spec/spec_helpers/nobrainer.rb +0 -15
- data/spec/spec_helpers/redis.rb +0 -18
- data/spec/spec_helpers/remove_warnings.rb +0 -1
- data/spec/spec_helpers/sequel.rb +0 -7
- data/spec/unit/api_spec.rb +0 -100
- data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
- data/spec/unit/callback_multiple_spec.rb +0 -300
- data/spec/unit/callbacks_spec.rb +0 -491
- data/spec/unit/complex_example_spec.rb +0 -94
- data/spec/unit/complex_multiple_example_spec.rb +0 -115
- data/spec/unit/edge_cases_spec.rb +0 -16
- data/spec/unit/event_multiple_spec.rb +0 -73
- data/spec/unit/event_naming_spec.rb +0 -16
- data/spec/unit/event_spec.rb +0 -381
- data/spec/unit/exception_spec.rb +0 -11
- data/spec/unit/guard_arguments_check_spec.rb +0 -9
- data/spec/unit/guard_multiple_spec.rb +0 -60
- data/spec/unit/guard_spec.rb +0 -89
- data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
- data/spec/unit/guard_with_params_spec.rb +0 -14
- data/spec/unit/guard_without_from_specified_spec.rb +0 -10
- data/spec/unit/initial_state_multiple_spec.rb +0 -15
- data/spec/unit/initial_state_spec.rb +0 -12
- data/spec/unit/inspection_multiple_spec.rb +0 -201
- data/spec/unit/inspection_spec.rb +0 -149
- data/spec/unit/invoker_spec.rb +0 -189
- data/spec/unit/invokers/base_invoker_spec.rb +0 -72
- data/spec/unit/invokers/class_invoker_spec.rb +0 -95
- data/spec/unit/invokers/literal_invoker_spec.rb +0 -86
- data/spec/unit/invokers/proc_invoker_spec.rb +0 -86
- data/spec/unit/localizer_spec.rb +0 -78
- data/spec/unit/memory_leak_spec.rb +0 -38
- data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
- data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
- data/spec/unit/new_dsl_spec.rb +0 -12
- data/spec/unit/override_warning_spec.rb +0 -94
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
- data/spec/unit/persistence/active_record_persistence_spec.rb +0 -735
- data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
- data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -200
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -165
- data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +0 -198
- data/spec/unit/persistence/no_brainer_persistence_spec.rb +0 -158
- data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
- data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
- data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
- data/spec/unit/readme_spec.rb +0 -41
- data/spec/unit/reloading_spec.rb +0 -15
- data/spec/unit/rspec_matcher_spec.rb +0 -85
- data/spec/unit/simple_custom_example_spec.rb +0 -39
- data/spec/unit/simple_example_spec.rb +0 -42
- data/spec/unit/simple_multiple_example_spec.rb +0 -91
- data/spec/unit/state_spec.rb +0 -89
- data/spec/unit/states_on_one_line_example_spec.rb +0 -16
- data/spec/unit/subclassing_multiple_spec.rb +0 -74
- data/spec/unit/subclassing_spec.rb +0 -46
- data/spec/unit/transition_spec.rb +0 -436
- data/test/minitest_helper.rb +0 -57
- data/test/unit/minitest_matcher_test.rb +0 -80
@@ -1,29 +0,0 @@
|
|
1
|
-
class ParametrisedEventMultiple
|
2
|
-
include AASM
|
3
|
-
aasm(:left) do
|
4
|
-
state :sleeping, :initial => true
|
5
|
-
state :showering
|
6
|
-
state :working
|
7
|
-
state :dating
|
8
|
-
state :prettying_up
|
9
|
-
|
10
|
-
event :wakeup do
|
11
|
-
transitions :from => :sleeping, :to => [:showering, :working]
|
12
|
-
end
|
13
|
-
|
14
|
-
event :dress do
|
15
|
-
transitions :from => :sleeping, :to => :working, :after => :wear_clothes
|
16
|
-
transitions :from => :showering, :to => [:working, :dating], :after => Proc.new { |*args| wear_clothes(*args) }
|
17
|
-
transitions :from => :showering, :to => :prettying_up, :after => [:condition_hair, :fix_hair]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def wear_clothes(shirt_color, trouser_type=nil)
|
22
|
-
end
|
23
|
-
|
24
|
-
def condition_hair
|
25
|
-
end
|
26
|
-
|
27
|
-
def fix_hair
|
28
|
-
end
|
29
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
class ProcessWithNewDsl
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
def self.state(*args)
|
5
|
-
raise "wrong state method"
|
6
|
-
end
|
7
|
-
|
8
|
-
attr_accessor :flagged
|
9
|
-
|
10
|
-
aasm do
|
11
|
-
state :sleeping, :initial => true
|
12
|
-
state :running, :after_enter => :flag
|
13
|
-
state :suspended
|
14
|
-
|
15
|
-
event :start do
|
16
|
-
transitions :from => :sleeping, :to => :running
|
17
|
-
end
|
18
|
-
event :stop do
|
19
|
-
transitions :from => :running, :to => :suspended
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def flag
|
24
|
-
self.flagged = true
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.event(*args)
|
28
|
-
raise "wrong event method"
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
class ProvidedState
|
2
|
-
attr_accessor :transient_store, :persisted_store
|
3
|
-
include AASM
|
4
|
-
aasm do
|
5
|
-
state :alpha, :initial => true
|
6
|
-
state :beta
|
7
|
-
state :gamma
|
8
|
-
event :release do
|
9
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def aasm_read_state(*args)
|
14
|
-
:beta
|
15
|
-
end
|
16
|
-
|
17
|
-
def aasm_write_state(new_state, *args)
|
18
|
-
@persisted_store = new_state
|
19
|
-
end
|
20
|
-
|
21
|
-
def aasm_write_state_without_persistence(new_state, *args)
|
22
|
-
@transient_store = new_state
|
23
|
-
end
|
24
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
class RedisComplexExample
|
2
|
-
include Redis::Objects
|
3
|
-
include AASM
|
4
|
-
|
5
|
-
value :left
|
6
|
-
value :right
|
7
|
-
|
8
|
-
def id
|
9
|
-
1
|
10
|
-
end
|
11
|
-
|
12
|
-
aasm :left, :column => 'left' do
|
13
|
-
state :one, :initial => true
|
14
|
-
state :two
|
15
|
-
state :three
|
16
|
-
|
17
|
-
event :increment do
|
18
|
-
transitions :from => :one, :to => :two
|
19
|
-
transitions :from => :two, :to => :three
|
20
|
-
end
|
21
|
-
event :reset do
|
22
|
-
transitions :from => :three, :to => :one
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
aasm :right, :column => 'right' do
|
27
|
-
state :alpha, :initial => true
|
28
|
-
state :beta
|
29
|
-
state :gamma
|
30
|
-
|
31
|
-
event :level_up do
|
32
|
-
transitions :from => :alpha, :to => :beta
|
33
|
-
transitions :from => :beta, :to => :gamma
|
34
|
-
end
|
35
|
-
event :level_down do
|
36
|
-
transitions :from => :gamma, :to => :beta
|
37
|
-
transitions :from => :beta, :to => :alpha
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class RedisMultiple
|
2
|
-
include Redis::Objects
|
3
|
-
include AASM
|
4
|
-
|
5
|
-
value :status
|
6
|
-
|
7
|
-
def id
|
8
|
-
1
|
9
|
-
end
|
10
|
-
|
11
|
-
aasm :left, :column => :status
|
12
|
-
aasm :left do
|
13
|
-
state :alpha, :initial => true
|
14
|
-
state :beta
|
15
|
-
state :gamma
|
16
|
-
event :release do
|
17
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class RedisSimple
|
2
|
-
include Redis::Objects
|
3
|
-
include AASM
|
4
|
-
|
5
|
-
value :status
|
6
|
-
|
7
|
-
def id
|
8
|
-
1
|
9
|
-
end
|
10
|
-
|
11
|
-
aasm :column => :status
|
12
|
-
aasm do
|
13
|
-
state :alpha, :initial => true
|
14
|
-
state :beta
|
15
|
-
state :gamma
|
16
|
-
event :release do
|
17
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
# if you want to see the statements while running the spec enable the following line
|
4
|
-
# db.loggers << Logger.new($stderr)
|
5
|
-
db.create_table(:complex_sequel_examples) do
|
6
|
-
primary_key :id
|
7
|
-
String :left
|
8
|
-
String :right
|
9
|
-
end
|
10
|
-
|
11
|
-
module Sequel
|
12
|
-
class ComplexExample < Sequel::Model(:complex_sequel_examples)
|
13
|
-
|
14
|
-
include AASM
|
15
|
-
|
16
|
-
aasm :left, :column => 'left' do
|
17
|
-
state :one, :initial => true
|
18
|
-
state :two
|
19
|
-
state :three
|
20
|
-
|
21
|
-
event :increment do
|
22
|
-
transitions :from => :one, :to => :two
|
23
|
-
transitions :from => :two, :to => :three
|
24
|
-
end
|
25
|
-
event :reset do
|
26
|
-
transitions :from => :three, :to => :one
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
aasm :right, :column => 'right' do
|
31
|
-
state :alpha, :initial => true
|
32
|
-
state :beta
|
33
|
-
state :gamma
|
34
|
-
|
35
|
-
event :level_up do
|
36
|
-
transitions :from => :alpha, :to => :beta
|
37
|
-
transitions :from => :beta, :to => :gamma
|
38
|
-
end
|
39
|
-
event :level_down do
|
40
|
-
transitions :from => :gamma, :to => :beta
|
41
|
-
transitions :from => :beta, :to => :alpha
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
[:invalid_persistors, :multiple_invalid_persistors].each do |table_name|
|
4
|
-
db.create_table(table_name) do
|
5
|
-
primary_key :id
|
6
|
-
String "name"
|
7
|
-
String "status"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module Sequel
|
12
|
-
class InvalidPersistor < Sequel::Model(:invalid_persistors)
|
13
|
-
plugin :validation_helpers
|
14
|
-
|
15
|
-
include AASM
|
16
|
-
aasm :column => :status, :skip_validation_on_save => true do
|
17
|
-
state :sleeping, :initial => true
|
18
|
-
state :running
|
19
|
-
event :run do
|
20
|
-
transitions :to => :running, :from => :sleeping
|
21
|
-
end
|
22
|
-
event :sleep do
|
23
|
-
transitions :to => :sleeping, :from => :running
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def validate
|
28
|
-
super
|
29
|
-
validates_presence :name
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class MultipleInvalidPersistor < Sequel::Model(:multiple_invalid_persistors)
|
34
|
-
plugin :validation_helpers
|
35
|
-
|
36
|
-
include AASM
|
37
|
-
aasm :left, :column => :status, :skip_validation_on_save => true do
|
38
|
-
state :sleeping, :initial => true
|
39
|
-
state :running
|
40
|
-
event :run do
|
41
|
-
transitions :to => :running, :from => :sleeping
|
42
|
-
end
|
43
|
-
event :sleep do
|
44
|
-
transitions :to => :sleeping, :from => :running
|
45
|
-
end
|
46
|
-
end
|
47
|
-
def validate
|
48
|
-
super
|
49
|
-
validates_presence :name
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
# if you want to see the statements while running the spec enable the following line
|
4
|
-
# db.loggers << Logger.new($stderr)
|
5
|
-
db.create_table(:multiples) do
|
6
|
-
primary_key :id
|
7
|
-
String :status
|
8
|
-
end
|
9
|
-
module Sequel
|
10
|
-
class Multiple < Sequel::Model(:multiples)
|
11
|
-
include AASM
|
12
|
-
|
13
|
-
attr_accessor :default
|
14
|
-
|
15
|
-
aasm :left, :column => :status
|
16
|
-
aasm :left do
|
17
|
-
state :alpha, :initial => true
|
18
|
-
state :beta
|
19
|
-
state :gamma
|
20
|
-
event :release do
|
21
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
# if you want to see the statements while running the spec enable the following line
|
4
|
-
# db.loggers << Logger.new($stderr)
|
5
|
-
db.create_table(:simples) do
|
6
|
-
primary_key :id
|
7
|
-
String :status
|
8
|
-
end
|
9
|
-
|
10
|
-
module Sequel
|
11
|
-
class Simple < Sequel::Model(:simples)
|
12
|
-
include AASM
|
13
|
-
|
14
|
-
attr_accessor :default
|
15
|
-
|
16
|
-
aasm :column => :status
|
17
|
-
aasm do
|
18
|
-
state :alpha, :initial => true
|
19
|
-
state :beta
|
20
|
-
state :gamma
|
21
|
-
event :release do
|
22
|
-
transitions :from => [:alpha, :beta, :gamma], :to => :beta
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
[:silent_persistors, :multiple_silent_persistors].each do |t|
|
4
|
-
db.create_table(t) do
|
5
|
-
primary_key :id
|
6
|
-
String "name"
|
7
|
-
String "status"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module Sequel
|
12
|
-
class SilentPersistor < Sequel::Model(:silent_persistors)
|
13
|
-
plugin :validation_helpers
|
14
|
-
|
15
|
-
include AASM
|
16
|
-
aasm :column => :status, :whiny_persistence => false do
|
17
|
-
state :sleeping, :initial => true
|
18
|
-
state :running
|
19
|
-
event :run do
|
20
|
-
transitions :to => :running, :from => :sleeping
|
21
|
-
end
|
22
|
-
event :sleep do
|
23
|
-
transitions :to => :sleeping, :from => :running
|
24
|
-
end
|
25
|
-
end
|
26
|
-
def validate
|
27
|
-
validates_presence :name
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class MultipleSilentPersistor< Sequel::Model(:multiple_silent_persistors)
|
32
|
-
plugin :validation_helpers
|
33
|
-
|
34
|
-
include AASM
|
35
|
-
aasm :left, :column => :status, :whiny_persistence => false do
|
36
|
-
state :sleeping, :initial => true
|
37
|
-
state :running
|
38
|
-
event :run do
|
39
|
-
transitions :to => :running, :from => :sleeping
|
40
|
-
end
|
41
|
-
event :sleep do
|
42
|
-
transitions :to => :sleeping, :from => :running
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def validate
|
47
|
-
validates_presence :name
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
[:transactors, :no_lock_transactors, :lock_transactors, :lock_no_wait_transactors, :multiple_transactors].each do |table_name|
|
4
|
-
db.create_table(table_name) do
|
5
|
-
primary_key :id
|
6
|
-
String "name"
|
7
|
-
String "status"
|
8
|
-
Fixnum "worker_id"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
module Sequel
|
13
|
-
class Transactor < Sequel::Model(:transactors)
|
14
|
-
|
15
|
-
many_to_one :worker, class: 'Sequel::Worker'
|
16
|
-
|
17
|
-
include AASM
|
18
|
-
aasm :column => :status do
|
19
|
-
state :sleeping, :initial => true
|
20
|
-
state :running, :before_enter => :start_worker, :after_enter => :fail
|
21
|
-
|
22
|
-
event :run do
|
23
|
-
transitions :to => :running, :from => :sleeping
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def start_worker
|
30
|
-
worker.update(status: 'running')
|
31
|
-
end
|
32
|
-
|
33
|
-
def fail
|
34
|
-
raise StandardError.new('failed on purpose')
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
class NoLockTransactor < Sequel::Model(:no_lock_transactors)
|
40
|
-
|
41
|
-
many_to_one :worker, class: 'Sequel::Worker'
|
42
|
-
|
43
|
-
include AASM
|
44
|
-
|
45
|
-
aasm :column => :status do
|
46
|
-
state :sleeping, :initial => true
|
47
|
-
state :running
|
48
|
-
|
49
|
-
event :run do
|
50
|
-
transitions :to => :running, :from => :sleeping
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class LockTransactor < Sequel::Model(:lock_transactors)
|
56
|
-
|
57
|
-
many_to_one :worker, class: 'Sequel::Worker'
|
58
|
-
|
59
|
-
include AASM
|
60
|
-
|
61
|
-
aasm :column => :status, requires_lock: true do
|
62
|
-
state :sleeping, :initial => true
|
63
|
-
state :running
|
64
|
-
|
65
|
-
event :run do
|
66
|
-
transitions :to => :running, :from => :sleeping
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
class LockNoWaitTransactor < Sequel::Model(:lock_no_wait_transactors)
|
72
|
-
|
73
|
-
many_to_one :worker, class: 'Sequel::Worker'
|
74
|
-
|
75
|
-
include AASM
|
76
|
-
|
77
|
-
aasm :column => :status, requires_lock: 'FOR UPDATE NOWAIT' do
|
78
|
-
state :sleeping, :initial => true
|
79
|
-
state :running
|
80
|
-
|
81
|
-
event :run do
|
82
|
-
transitions :to => :running, :from => :sleeping
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class MultipleTransactor < Sequel::Model(:multiple_transactors)
|
88
|
-
|
89
|
-
many_to_one :worker, class: 'Sequel::Worker'
|
90
|
-
|
91
|
-
include AASM
|
92
|
-
aasm :left, :column => :status do
|
93
|
-
state :sleeping, :initial => true
|
94
|
-
state :running, :before_enter => :start_worker, :after_enter => :fail
|
95
|
-
|
96
|
-
event :run do
|
97
|
-
transitions :to => :running, :from => :sleeping
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
def start_worker
|
104
|
-
worker.update(:status, 'running')
|
105
|
-
end
|
106
|
-
|
107
|
-
def fail
|
108
|
-
raise StandardError.new('failed on purpose')
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
db = Sequel::DATABASES.first || Sequel.connect(SEQUEL_DB)
|
2
|
-
|
3
|
-
db.create_table(:validators) do
|
4
|
-
primary_key :id
|
5
|
-
String "name"
|
6
|
-
String "status"
|
7
|
-
Fixnum "worker_id"
|
8
|
-
end
|
9
|
-
|
10
|
-
module Sequel
|
11
|
-
class Validator < Sequel::Model(:validators)
|
12
|
-
plugin :validation_helpers
|
13
|
-
|
14
|
-
attr_accessor :after_all_transactions_performed,
|
15
|
-
:after_transaction_performed_on_fail,
|
16
|
-
:after_transaction_performed_on_run,
|
17
|
-
:before_all_transactions_performed,
|
18
|
-
:before_transaction_performed_on_fail,
|
19
|
-
:before_transaction_performed_on_run,
|
20
|
-
:invalid
|
21
|
-
|
22
|
-
def validate
|
23
|
-
super
|
24
|
-
errors.add(:validator, "invalid") if invalid
|
25
|
-
validates_presence :name
|
26
|
-
end
|
27
|
-
|
28
|
-
include AASM
|
29
|
-
|
30
|
-
aasm :column => :status, :whiny_persistence => true do
|
31
|
-
before_all_transactions :before_all_transactions
|
32
|
-
after_all_transactions :after_all_transactions
|
33
|
-
|
34
|
-
state :sleeping, :initial => true
|
35
|
-
state :running
|
36
|
-
state :failed, :after_enter => :fail
|
37
|
-
|
38
|
-
event :run, :after_commit => :change_name! do
|
39
|
-
after_transaction do
|
40
|
-
@after_transaction_performed_on_run = true
|
41
|
-
end
|
42
|
-
|
43
|
-
before_transaction do
|
44
|
-
@before_transaction_performed_on_run = true
|
45
|
-
end
|
46
|
-
|
47
|
-
transitions :to => :running, :from => :sleeping
|
48
|
-
end
|
49
|
-
|
50
|
-
event :sleep do
|
51
|
-
after_commit do |name|
|
52
|
-
change_name_on_sleep name
|
53
|
-
end
|
54
|
-
transitions :to => :sleeping, :from => :running
|
55
|
-
end
|
56
|
-
|
57
|
-
event :fail do
|
58
|
-
after_transaction do
|
59
|
-
@after_transaction_performed_on_fail = true
|
60
|
-
end
|
61
|
-
|
62
|
-
before_transaction do
|
63
|
-
@before_transaction_performed_on_fail = true
|
64
|
-
end
|
65
|
-
|
66
|
-
transitions :to => :failed, :from => [:sleeping, :running]
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def change_name!
|
71
|
-
self.name = "name changed"
|
72
|
-
save(raise_on_failure: true)
|
73
|
-
end
|
74
|
-
|
75
|
-
def change_name_on_sleep name
|
76
|
-
self.name = name
|
77
|
-
save(raise_on_failure: true)
|
78
|
-
end
|
79
|
-
|
80
|
-
def fail
|
81
|
-
raise StandardError.new('failed on purpose')
|
82
|
-
end
|
83
|
-
|
84
|
-
def after_all_transactions
|
85
|
-
@after_all_transactions_performed = true
|
86
|
-
end
|
87
|
-
|
88
|
-
def before_all_transactions
|
89
|
-
@before_all_transactions_performed = true
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
data/spec/models/silencer.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
class Silencer
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
# yes, this line is here on purpose
|
5
|
-
# by this, we test if overriding configuration options works if
|
6
|
-
# the state machine is "re-opened"
|
7
|
-
aasm :whiny_transitions => true
|
8
|
-
|
9
|
-
aasm :whiny_transitions => false do
|
10
|
-
state :silent, :initial => true
|
11
|
-
state :crying
|
12
|
-
state :smiling
|
13
|
-
|
14
|
-
event :cry do
|
15
|
-
transitions :from => :silent, :to => :crying
|
16
|
-
end
|
17
|
-
|
18
|
-
event :smile do
|
19
|
-
transitions :from => :crying, :to => :smiling
|
20
|
-
end
|
21
|
-
|
22
|
-
event :smile_any do
|
23
|
-
transitions :to => :smiling
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
class CustomAASMBase < AASM::Base
|
2
|
-
# A custom transiton that we want available across many AASM models.
|
3
|
-
def count_transitions!
|
4
|
-
klass.class_eval do
|
5
|
-
aasm :with_klass => CustomAASMBase do
|
6
|
-
after_all_transitions :increment_transition_count
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# A custom annotation that we want available across many AASM models.
|
12
|
-
def requires_guards!
|
13
|
-
klass.class_eval do
|
14
|
-
attr_reader :authorizable_called,
|
15
|
-
:transition_count,
|
16
|
-
:fillable_called
|
17
|
-
|
18
|
-
def authorizable?
|
19
|
-
@authorizable_called = true
|
20
|
-
end
|
21
|
-
|
22
|
-
def fillable?
|
23
|
-
@fillable_called = true
|
24
|
-
end
|
25
|
-
|
26
|
-
def increment_transition_count
|
27
|
-
@transition_count ||= 0
|
28
|
-
@transition_count += 1
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class SimpleCustomExample
|
35
|
-
include AASM
|
36
|
-
|
37
|
-
# Let's build an AASM state machine with our custom class.
|
38
|
-
aasm :with_klass => CustomAASMBase do
|
39
|
-
requires_guards!
|
40
|
-
count_transitions!
|
41
|
-
|
42
|
-
state :initialised, :initial => true
|
43
|
-
state :filled_out
|
44
|
-
state :authorised
|
45
|
-
|
46
|
-
event :fill_out do
|
47
|
-
transitions :from => :initialised, :to => :filled_out, :guard => :fillable?
|
48
|
-
end
|
49
|
-
event :authorise do
|
50
|
-
transitions :from => :filled_out, :to => :authorised, :guard => :authorizable?
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class SimpleExample
|
2
|
-
include AASM
|
3
|
-
aasm do
|
4
|
-
state :initialised, :initial => true
|
5
|
-
state :filled_out
|
6
|
-
state :authorised
|
7
|
-
|
8
|
-
event :fill_out do
|
9
|
-
transitions :from => :initialised, :to => :filled_out
|
10
|
-
end
|
11
|
-
event :authorise do
|
12
|
-
transitions :from => :filled_out, :to => :authorised
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|