aasm 5.0.8 → 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 +4 -4
- data/README.md +108 -17
- data/lib/aasm/base.rb +44 -12
- data/lib/aasm/configuration.rb +3 -0
- data/lib/aasm/core/event.rb +12 -6
- 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 +1 -0
- data/lib/aasm/instance_base.rb +15 -4
- data/lib/aasm/localizer.rb +13 -3
- data/lib/aasm/persistence/active_record_persistence.rb +18 -0
- data/lib/aasm/persistence/base.rb +13 -2
- data/lib/aasm/persistence/orm.rb +23 -19
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +0 -2
- data/lib/generators/aasm/orm_helpers.rb +1 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- metadata +9 -397
- data/.document +0 -6
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -27
- data/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- data/.gitignore +0 -20
- data/.travis.yml +0 -100
- data/API +0 -34
- data/Appraisals +0 -71
- data/CHANGELOG.md +0 -431
- 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 -37
- data/callbacks.txt +0 -51
- data/docker-compose.yml +0 -40
- data/gemfiles/norails.gemfile +0 -10
- data/gemfiles/rails_3.2.gemfile +0 -14
- 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/gemfiles/rails_5.2.gemfile +0 -13
- data/spec/database.rb +0 -59
- 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 -53
- 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/instance_level_skip_validation_example.rb +0 -19
- 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/person.rb +0 -23
- 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 -32
- 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/work.rb +0 -3
- 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 -34
- data/spec/models/callbacks/with_state_arg_multiple.rb +0 -29
- 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 -23
- 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 -36
- 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/abstract_class_spec.rb +0 -27
- 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 -304
- data/spec/unit/callbacks_spec.rb +0 -521
- data/spec/unit/complex_example_spec.rb +0 -93
- 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 -394
- 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 -773
- 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 -88
- data/spec/unit/simple_custom_example_spec.rb +0 -39
- data/spec/unit/simple_example_spec.rb +0 -57
- 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,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,23 +0,0 @@
|
|
1
|
-
class SimpleExample
|
2
|
-
include AASM
|
3
|
-
aasm do
|
4
|
-
state :initialised, :initial => true
|
5
|
-
state :filled_out
|
6
|
-
state :denied
|
7
|
-
state :authorised
|
8
|
-
|
9
|
-
event :fill_out do
|
10
|
-
transitions :from => :initialised, :to => :filled_out
|
11
|
-
end
|
12
|
-
|
13
|
-
event :deny do
|
14
|
-
transitions from: :initialised, to: :denied
|
15
|
-
end
|
16
|
-
|
17
|
-
event :authorise do
|
18
|
-
transitions :from => :filled_out, :to => :authorised
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class SimpleExampleWithGuardArgs
|
2
|
-
include AASM
|
3
|
-
aasm do
|
4
|
-
state :initialised, :initial => true
|
5
|
-
state :filled_out_with_args
|
6
|
-
|
7
|
-
event :fill_out_with_args do
|
8
|
-
transitions :guard => [:arg_is_valid?],
|
9
|
-
:from => :initialised,
|
10
|
-
:to => :filled_out_with_args
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def arg_is_valid?(arg)
|
15
|
-
return arg
|
16
|
-
end
|
17
|
-
end
|
@@ -1,42 +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
|
-
|
31
|
-
aasm(:question) do
|
32
|
-
state :answered, :initial => true
|
33
|
-
state :asked
|
34
|
-
|
35
|
-
event :ask, :binding_event => :start do
|
36
|
-
transitions :from => :answered, :to => :asked
|
37
|
-
end
|
38
|
-
event :answer, :binding_event => :stop do
|
39
|
-
transitions :from => :asked, :to => :answered
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class StateMachineWithFailedEvent
|
2
|
-
include AASM
|
3
|
-
|
4
|
-
aasm do
|
5
|
-
state :init, :initial => true
|
6
|
-
state :failed
|
7
|
-
state :sent
|
8
|
-
|
9
|
-
event :failed do
|
10
|
-
transitions :from => :init, :to => :failed
|
11
|
-
end
|
12
|
-
event :send, :before => :callback do
|
13
|
-
transitions :from => :init, :to => :sent
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def callback
|
18
|
-
true
|
19
|
-
end
|
20
|
-
end
|
data/spec/models/sub_class.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require_relative 'super_class'
|
2
|
-
|
3
|
-
class SubClass < SuperClass
|
4
|
-
# Add an after callback that is not defined in the parent
|
5
|
-
aasm.state_machine.events[:foo].options[:after] = [:after_foo_event]
|
6
|
-
|
7
|
-
# Add global callback that is not defined in the parent
|
8
|
-
aasm.state_machine.global_callbacks[:after_all_transitions] = :after_all_event
|
9
|
-
|
10
|
-
attr_accessor :called_after
|
11
|
-
|
12
|
-
def after_foo_event
|
13
|
-
self.called_after = true
|
14
|
-
end
|
15
|
-
|
16
|
-
def after_all_event; end
|
17
|
-
end
|
18
|
-
|
19
|
-
class SubClassMultiple < SuperClassMultiple
|
20
|
-
# Add after callbacks that are not defined in the parent
|
21
|
-
aasm(:left).state_machine.events[:foo].options[:after] = [:left_after_foo_event]
|
22
|
-
aasm(:right).state_machine.events[:close].options[:after] = [:right_after_close_event]
|
23
|
-
|
24
|
-
# Add global callback that is not defined in the parent
|
25
|
-
aasm(:left).state_machine.global_callbacks[:after_all_transitions] = :left_after_all_event
|
26
|
-
aasm(:right).state_machine.global_callbacks[:after_all_transitions] = :right_after_all_event
|
27
|
-
|
28
|
-
attr_accessor :left_called_after, :right_called_after
|
29
|
-
|
30
|
-
def left_after_foo_event
|
31
|
-
self.left_called_after = true
|
32
|
-
end
|
33
|
-
|
34
|
-
def right_after_close_event
|
35
|
-
self.right_called_after = true
|
36
|
-
end
|
37
|
-
|
38
|
-
def left_after_all_event; end
|
39
|
-
|
40
|
-
def right_after_all_event; end
|
41
|
-
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
|
data/spec/models/sub_classing.rb
DELETED
data/spec/models/super_class.rb
DELETED
@@ -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,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
|
data/spec/spec_helper.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start do
|
3
|
-
add_filter '/spec/'
|
4
|
-
end
|
5
|
-
|
6
|
-
if ENV['CI'] == 'true'
|
7
|
-
require 'codecov'
|
8
|
-
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
9
|
-
end
|
10
|
-
|
11
|
-
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
|
12
|
-
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
|
13
|
-
require 'aasm'
|
14
|
-
require 'rspec'
|
15
|
-
require 'aasm/rspec'
|
16
|
-
require 'pry'
|
17
|
-
|
18
|
-
# require 'ruby-debug'; Debugger.settings[:autoeval] = true; debugger; rubys_debugger = 'annoying'
|
19
|
-
# require 'ruby-debug/completion'
|
20
|
-
# require 'pry'
|
21
|
-
|
22
|
-
SEQUEL_DB = defined?(JRUBY_VERSION) ? 'jdbc:sqlite::memory:' : 'sqlite:/'
|
23
|
-
|
24
|
-
def load_schema
|
25
|
-
require 'logger'
|
26
|
-
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
27
|
-
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
28
|
-
ActiveRecord::Base.establish_connection(config['sqlite3'])
|
29
|
-
require File.dirname(__FILE__) + "/database.rb"
|
30
|
-
end
|
31
|
-
|
32
|
-
# custom spec helpers
|
33
|
-
Dir[File.dirname(__FILE__) + "/spec_helpers/**/*.rb"].sort.each { |f| require File.expand_path(f) }
|
34
|
-
|
35
|
-
# example model classes
|
36
|
-
Dir[File.dirname(__FILE__) + "/models/*.rb"].sort.each { |f| require File.expand_path(f) }
|
@@ -1,8 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
begin
|
3
|
-
require 'active_record'
|
4
|
-
|
5
|
-
puts "active_record #{ActiveRecord::VERSION::STRING} gem found, running ActiveRecord specs \e[32m#{'✔'}\e[0m"
|
6
|
-
rescue LoadError
|
7
|
-
puts "active_record gem not found, not running ActiveRecord specs \e[31m#{'✖'}\e[0m"
|
8
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'dynamoid'
|
5
|
-
require 'aws-sdk-resources'
|
6
|
-
puts "dynamoid #{Dynamoid::VERSION} gem found, running Dynamoid specs \e[32m#{'✔'}\e[0m"
|
7
|
-
|
8
|
-
ENV['ACCESS_KEY'] ||= 'abcd'
|
9
|
-
ENV['SECRET_KEY'] ||= '1234'
|
10
|
-
|
11
|
-
Aws.config.update(
|
12
|
-
region: 'us-west-2',
|
13
|
-
credentials: Aws::Credentials.new(ENV['ACCESS_KEY'], ENV['SECRET_KEY'])
|
14
|
-
)
|
15
|
-
|
16
|
-
Dynamoid.configure do |config|
|
17
|
-
config.namespace = 'dynamoid_tests'
|
18
|
-
config.endpoint = "http://#{ENV['DYNAMODB_HOST'] || '127.0.0.1'}:" \
|
19
|
-
"#{ENV['DYNAMODB_PORT'] || 30180}"
|
20
|
-
config.warn_on_scan = false
|
21
|
-
end
|
22
|
-
|
23
|
-
Dynamoid.logger.level = Logger::FATAL
|
24
|
-
|
25
|
-
RSpec.configure do |c|
|
26
|
-
c.before(:each) do
|
27
|
-
Dynamoid.adapter.list_tables.each do |table|
|
28
|
-
Dynamoid.adapter.delete_table(table) if table =~ /^#{Dynamoid::Config.namespace}/
|
29
|
-
end
|
30
|
-
Dynamoid.adapter.tables.clear
|
31
|
-
end
|
32
|
-
end
|
33
|
-
rescue LoadError
|
34
|
-
puts "dynamoid gem not found, not running Dynamoid specs \e[31m#{'✖'}\e[0m"
|
35
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'mongoid'
|
5
|
-
puts "mongoid #{Mongoid::VERSION} gem found, running mongoid specs \e[32m#{'✔'}\e[0m"
|
6
|
-
|
7
|
-
if Mongoid::VERSION.to_f <= 5
|
8
|
-
Mongoid::Config.sessions = {
|
9
|
-
default: {
|
10
|
-
database: "mongoid_#{Process.pid}",
|
11
|
-
hosts: ["#{ENV['MONGODB_HOST'] || 'localhost'}:" \
|
12
|
-
"#{ENV['MONGODB_PORT'] || 27017}"]
|
13
|
-
}
|
14
|
-
}
|
15
|
-
else
|
16
|
-
Mongoid::Config.send(:clients=, {
|
17
|
-
default: {
|
18
|
-
database: "mongoid_#{Process.pid}",
|
19
|
-
hosts: ["#{ENV['MONGODB_HOST'] || 'localhost'}:" \
|
20
|
-
"#{ENV['MONGODB_PORT'] || 27017}"]
|
21
|
-
}
|
22
|
-
})
|
23
|
-
end
|
24
|
-
rescue LoadError
|
25
|
-
puts "mongoid gem not found, not running mongoid specs \e[31m#{'✖'}\e[0m"
|
26
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'nobrainer'
|
5
|
-
|
6
|
-
NoBrainer.configure do |config|
|
7
|
-
config.app_name = :aasm
|
8
|
-
config.environment = :test
|
9
|
-
config.warn_on_active_record = false
|
10
|
-
end
|
11
|
-
|
12
|
-
puts "nobrainer #{Gem.loaded_specs['nobrainer'].version} gem found, running nobrainer specs \e[32m#{'✔'}\e[0m"
|
13
|
-
rescue LoadError
|
14
|
-
puts "nobrainer gem not found, not running nobrainer specs \e[31m#{'✖'}\e[0m"
|
15
|
-
end
|