aasm 5.2.0 → 5.4.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 +20 -14
- data/lib/aasm/base.rb +14 -1
- data/lib/aasm/core/event.rb +5 -4
- data/lib/aasm/errors.rb +1 -0
- data/lib/aasm/instance_base.rb +14 -3
- data/lib/aasm/version.rb +1 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- metadata +3 -405
- 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 -82
- data/API +0 -34
- data/Appraisals +0 -67
- data/CHANGELOG.md +0 -453
- 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/docker-compose.yml +0 -40
- data/gemfiles/norails.gemfile +0 -10
- data/gemfiles/rails_4.2.gemfile +0 -17
- data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -12
- data/gemfiles/rails_4.2_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.0.gemfile +0 -14
- data/gemfiles/rails_5.0_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.1.gemfile +0 -14
- data/gemfiles/rails_5.2.gemfile +0 -14
- data/spec/database.rb +0 -57
- data/spec/database.yml +0 -3
- data/spec/en.yml +0 -9
- 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/localizer_test_model_deprecated_style.yml +0 -13
- data/spec/localizer_test_model_new_style.yml +0 -11
- data/spec/models/active_record/active_record_callback.rb +0 -93
- 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 -42
- data/spec/models/active_record/namespaced.rb +0 -16
- 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/timestamp_example.rb +0 -16
- 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/timestamp_example_mongoid.rb +0 -20
- 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/timestamps_example.rb +0 -19
- data/spec/models/timestamps_with_named_machine_example.rb +0 -13
- data/spec/models/valid_state_name.rb +0 -23
- data/spec/spec_helper.rb +0 -41
- 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 -104
- 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 -205
- data/spec/unit/inspection_spec.rb +0 -153
- 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 -109
- 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 -635
- data/spec/unit/persistence/active_record_persistence_spec.rb +0 -852
- 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 -177
- 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 -105
- 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/timestamps_spec.rb +0 -32
- data/spec/unit/transition_spec.rb +0 -436
- data/test/minitest_helper.rb +0 -57
- data/test/unit/minitest_matcher_test.rb +0 -80
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d206aa3c586ccaa0d24a9096e78bf0fbb8a80b4e981538a7e1b016a389e8edc
|
|
4
|
+
data.tar.gz: 64f6da6f80a5f7e76aed9cc422c9c401fa62ba30f02493e24d78caf58a6a4de2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d1f425fa7bdf12b633f97621e28d0376c1582bb2cc131d96a9c7d1df1550e2c68a9019e7a28d5c56fa6fa9099ce4a021d5b1e6003ccfb364125688f78ea4f4a
|
|
7
|
+
data.tar.gz: 78819143fc5c9bf3d52ec545a9a8d2ab174bbff1ac4eb3ff38e4a49524654c24aa585c43b9f9e39440284612b8a72913927ebb3eb0fd7392ca197270fd02ad9f
|
data/README.md
CHANGED
|
@@ -221,18 +221,18 @@ You can pass parameters to events:
|
|
|
221
221
|
job.run(:defragmentation)
|
|
222
222
|
```
|
|
223
223
|
|
|
224
|
-
All guards and after callbacks will receive these parameters. In this case `set_process` would be called with
|
|
224
|
+
All guards and after callbacks will receive these parameters. In this case `set_process` would be called with
|
|
225
225
|
`:defragmentation` argument.
|
|
226
226
|
|
|
227
|
-
If the first argument to the event is a state (e.g. `:running` or `:finished`), the first argument is consumed and
|
|
228
|
-
the state machine will attempt to transition to that state. Add comma separated parameter for
|
|
227
|
+
If the first argument to the event is a state (e.g. `:running` or `:finished`), the first argument is consumed and
|
|
228
|
+
the state machine will attempt to transition to that state. Add comma separated parameter for guards and callbacks
|
|
229
229
|
|
|
230
230
|
```ruby
|
|
231
231
|
job = Job.new
|
|
232
232
|
job.run(:running, :defragmentation)
|
|
233
233
|
```
|
|
234
|
-
In this case `set_process` won't be called, job will transition to running state and callback will receive
|
|
235
|
-
|
|
234
|
+
In this case `set_process` won't be called, job will transition to running state and callback will receive
|
|
235
|
+
`:defragmentation` as parameter
|
|
236
236
|
|
|
237
237
|
#### Error Handling
|
|
238
238
|
In case of an error during the event processing the error is rescued and passed to `:error`
|
|
@@ -321,7 +321,7 @@ and then
|
|
|
321
321
|
Let's assume you want to allow particular transitions only if a defined condition is
|
|
322
322
|
given. For this you can set up a guard per transition, which will run before actually
|
|
323
323
|
running the transition. If the guard returns `false` the transition will be
|
|
324
|
-
denied (raising `AASM::InvalidTransition`
|
|
324
|
+
denied (raising `AASM::InvalidTransition`):
|
|
325
325
|
|
|
326
326
|
```ruby
|
|
327
327
|
class Cleaner
|
|
@@ -364,7 +364,7 @@ job.clean # => raises AASM::InvalidTransition
|
|
|
364
364
|
job.may_clean_if_needed? # => true
|
|
365
365
|
job.clean_if_needed! # idle
|
|
366
366
|
|
|
367
|
-
job.clean_if_dirty(:clean) # =>
|
|
367
|
+
job.clean_if_dirty(:clean) # => raises AASM::InvalidTransition
|
|
368
368
|
job.clean_if_dirty(:dirty) # => true
|
|
369
369
|
```
|
|
370
370
|
|
|
@@ -400,7 +400,7 @@ If you prefer a more Ruby-like guard syntax, you can use `if` and `unless` as we
|
|
|
400
400
|
end
|
|
401
401
|
```
|
|
402
402
|
|
|
403
|
-
You can invoke a Class instead a method
|
|
403
|
+
You can invoke a Class instead of a method if the Class responds to `call`
|
|
404
404
|
|
|
405
405
|
```ruby
|
|
406
406
|
event :sleep do
|
|
@@ -758,7 +758,7 @@ job.aasm.fire!(:run) # saved
|
|
|
758
758
|
|
|
759
759
|
Saving includes running all validations on the `Job` class. If
|
|
760
760
|
`whiny_persistence` flag is set to `true`, exception is raised in case of
|
|
761
|
-
failure. If `whiny_persistence` flag is set to false
|
|
761
|
+
failure. If `whiny_persistence` flag is set to `false`, methods with a bang return
|
|
762
762
|
`true` if the state transition is successful or `false` if an error occurs.
|
|
763
763
|
|
|
764
764
|
If you want make sure the state gets saved without running validations (and
|
|
@@ -786,7 +786,7 @@ class Job < ActiveRecord::Base
|
|
|
786
786
|
end
|
|
787
787
|
```
|
|
788
788
|
|
|
789
|
-
Also
|
|
789
|
+
Also, you can skip the validation at instance level with `some_event_name_without_validation!` method.
|
|
790
790
|
With this you have the flexibility of having validation for all your transitions by default and then skip it wherever required.
|
|
791
791
|
Please note that only state column will be updated as mentioned in the above example.
|
|
792
792
|
|
|
@@ -1084,7 +1084,7 @@ end
|
|
|
1084
1084
|
|
|
1085
1085
|
which then leads to `transaction(requires_new: false)`, the Rails default.
|
|
1086
1086
|
|
|
1087
|
-
Additionally, if you do not want any of your
|
|
1087
|
+
Additionally, if you do not want any of your ActiveRecord actions to be
|
|
1088
1088
|
wrapped in a transaction, you can specify the `use_transactions` flag. This can
|
|
1089
1089
|
be useful if you want want to persist things to the database that happen as a
|
|
1090
1090
|
result of a transaction or callback, even when some error occurs. The
|
|
@@ -1104,7 +1104,7 @@ end
|
|
|
1104
1104
|
|
|
1105
1105
|
### Pessimistic Locking
|
|
1106
1106
|
|
|
1107
|
-
AASM supports [
|
|
1107
|
+
AASM supports [ActiveRecord pessimistic locking via `with_lock`](http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html#method-i-with_lock) for database persistence layers.
|
|
1108
1108
|
|
|
1109
1109
|
| Option | Purpose |
|
|
1110
1110
|
| ------ | ------- |
|
|
@@ -1160,7 +1160,7 @@ end
|
|
|
1160
1160
|
Whatever column name is used, make sure to add a migration to provide this column
|
|
1161
1161
|
(of type `string`).
|
|
1162
1162
|
Do not add default value for column at the database level. If you add default
|
|
1163
|
-
value in database then AASM callbacks on the initial state will not be fired upon
|
|
1163
|
+
value in database then AASM callbacks on the initial state will not be fired upon
|
|
1164
1164
|
instantiation of the model.
|
|
1165
1165
|
|
|
1166
1166
|
```ruby
|
|
@@ -1461,7 +1461,7 @@ After installing AASM you can run generator:
|
|
|
1461
1461
|
```
|
|
1462
1462
|
Replace NAME with the Model name, COLUMN_NAME is optional(default is 'aasm_state').
|
|
1463
1463
|
This will create a model (if one does not exist) and configure it with aasm block.
|
|
1464
|
-
For
|
|
1464
|
+
For ActiveRecord orm a migration file is added to add aasm state column to table.
|
|
1465
1465
|
|
|
1466
1466
|
### Docker
|
|
1467
1467
|
|
|
@@ -1491,6 +1491,12 @@ Feel free to
|
|
|
1491
1491
|
* [Anil Maurya](http://github.com/anilmaurya) (since 2016)
|
|
1492
1492
|
|
|
1493
1493
|
|
|
1494
|
+
|
|
1495
|
+
## Stargazers over time
|
|
1496
|
+
|
|
1497
|
+
[](https://starchart.cc/aasm/aasm)
|
|
1498
|
+
|
|
1499
|
+
|
|
1494
1500
|
## [Contributing](CONTRIBUTING.md)
|
|
1495
1501
|
|
|
1496
1502
|
## Warranty ##
|
data/lib/aasm/base.rb
CHANGED
|
@@ -223,7 +223,20 @@ module AASM
|
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
|
|
226
|
-
klass.send(:define_method, method_name, method_definition)
|
|
226
|
+
klass.send(:define_method, method_name, method_definition).tap do |sym|
|
|
227
|
+
apply_ruby2_keyword(klass, sym)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def apply_ruby2_keyword(klass, sym)
|
|
232
|
+
if RUBY_VERSION >= '2.7.1'
|
|
233
|
+
if klass.instance_method(sym).parameters.find { |type, _| type.to_s.start_with?('rest') }
|
|
234
|
+
# If there is a place where you are receiving in *args, do ruby2_keywords.
|
|
235
|
+
klass.module_eval do
|
|
236
|
+
ruby2_keywords sym
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
227
240
|
end
|
|
228
241
|
|
|
229
242
|
def namespace?
|
data/lib/aasm/core/event.rb
CHANGED
|
@@ -10,7 +10,7 @@ module AASM::Core
|
|
|
10
10
|
@name = name
|
|
11
11
|
@state_machine = state_machine
|
|
12
12
|
@transitions = []
|
|
13
|
-
@valid_transitions = {}
|
|
13
|
+
@valid_transitions = Hash.new { |h, k| h[k] = {} }
|
|
14
14
|
@guards = Array(options[:guard] || options[:guards] || options[:if])
|
|
15
15
|
@unless = Array(options[:unless]) #TODO: This could use a better name
|
|
16
16
|
@default_display_name = name.to_s.gsub(/_/, ' ').capitalize
|
|
@@ -79,8 +79,9 @@ module AASM::Core
|
|
|
79
79
|
|
|
80
80
|
def fire_transition_callbacks(obj, *args)
|
|
81
81
|
from_state = obj.aasm(state_machine.name).current_state
|
|
82
|
-
transition = @valid_transitions[from_state]
|
|
83
|
-
|
|
82
|
+
transition = @valid_transitions[obj.object_id][from_state]
|
|
83
|
+
transition.invoke_success_callbacks(obj, *args) if transition
|
|
84
|
+
@valid_transitions.delete(obj.object_id)
|
|
84
85
|
end
|
|
85
86
|
|
|
86
87
|
def ==(event)
|
|
@@ -153,7 +154,7 @@ module AASM::Core
|
|
|
153
154
|
result = transition
|
|
154
155
|
else
|
|
155
156
|
result = to_state || Array(transition.to).first
|
|
156
|
-
Array(transition.to).each {|to| @valid_transitions[to] = transition }
|
|
157
|
+
Array(transition.to).each {|to| @valid_transitions[obj.object_id][to] = transition }
|
|
157
158
|
transition.execute(obj, *args)
|
|
158
159
|
end
|
|
159
160
|
|
data/lib/aasm/errors.rb
CHANGED
data/lib/aasm/instance_base.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module AASM
|
|
2
2
|
class InstanceBase
|
|
3
|
-
|
|
4
3
|
attr_accessor :from_state, :to_state, :current_event
|
|
5
4
|
|
|
6
5
|
def initialize(instance, name=:default) # instance of the class including AASM, name of the state machine
|
|
@@ -115,12 +114,15 @@ module AASM
|
|
|
115
114
|
end
|
|
116
115
|
|
|
117
116
|
def fire(event_name, *args, &block)
|
|
117
|
+
event_exists?(event_name)
|
|
118
|
+
|
|
118
119
|
@instance.send(event_name, *args, &block)
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
def fire!(event_name, *args, &block)
|
|
122
|
-
event_name
|
|
123
|
-
|
|
123
|
+
event_exists?(event_name, true)
|
|
124
|
+
bang_event_name = "#{event_name}!".to_sym
|
|
125
|
+
@instance.send(bang_event_name, *args, &block)
|
|
124
126
|
end
|
|
125
127
|
|
|
126
128
|
def set_current_state_with_persistence(state)
|
|
@@ -129,5 +131,14 @@ module AASM
|
|
|
129
131
|
save_success
|
|
130
132
|
end
|
|
131
133
|
|
|
134
|
+
private
|
|
135
|
+
|
|
136
|
+
def event_exists?(event_name, bang = false)
|
|
137
|
+
event = @instance.class.aasm(@name).state_machine.events[event_name.to_sym]
|
|
138
|
+
return true if event
|
|
139
|
+
|
|
140
|
+
event_error = bang ? "#{event_name}!" : event_name
|
|
141
|
+
raise AASM::UndefinedEvent, "Event :#{event_error} doesn't exist" if event.nil?
|
|
142
|
+
end
|
|
132
143
|
end
|
|
133
144
|
end
|
data/lib/aasm/version.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class
|
|
1
|
+
class AasmCreate<%= table_name.camelize %> < ActiveRecord::Migration[<%= ActiveRecord::VERSION::STRING.to_f %>]
|
|
2
2
|
def change
|
|
3
3
|
create_table(:<%= table_name %>) do |t|
|
|
4
4
|
t.string :<%= column_name %>
|