aasm 5.1.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.
- checksums.yaml +4 -4
 - data/README.md +74 -15
 - 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 +14 -3
 - data/lib/aasm/localizer.rb +13 -3
 - data/lib/aasm/persistence/active_record_persistence.rb +1 -1
 - data/lib/aasm/persistence/base.rb +13 -2
 - data/lib/aasm/version.rb +1 -1
 - data/lib/generators/aasm/orm_helpers.rb +1 -1
 - data/lib/generators/active_record/templates/migration.rb +1 -1
 - metadata +6 -402
 - 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 -442
 - 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 -59
 - 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 -6
 - data/spec/localizer_test_model_new_style.yml +0 -5
 - 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 -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 -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 -77
 - 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 -840
 - 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 -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/transition_spec.rb +0 -436
 - data/test/minitest_helper.rb +0 -57
 - data/test/unit/minitest_matcher_test.rb +0 -80
 
    
        data/spec/spec_helpers/redis.rb
    DELETED
    
    | 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            begin
         
     | 
| 
       4 
     | 
    
         
            -
              require 'redis-objects'
         
     | 
| 
       5 
     | 
    
         
            -
              require 'redis/objects/version'
         
     | 
| 
       6 
     | 
    
         
            -
              puts "redis-objects #{Redis::Objects::VERSION} gem found, running Redis specs \e[32m#{'✔'}\e[0m"
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              Redis.current = Redis.new(host: (ENV['REDIS_HOST'] || '127.0.0.1'),
         
     | 
| 
       9 
     | 
    
         
            -
                                        port: (ENV['REDIS_PORT'] || 6379))
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              RSpec.configure do |c|
         
     | 
| 
       12 
     | 
    
         
            -
                c.before(:each) do
         
     | 
| 
       13 
     | 
    
         
            -
                  Redis.current.keys('redis_*').each { |k| Redis.current.del k }
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       17 
     | 
    
         
            -
              puts "redis-objects gem not found, not running Redis specs \e[31m#{'✖'}\e[0m"
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            AASM::Configuration.hide_warnings = true
         
     | 
    
        data/spec/spec_helpers/sequel.rb
    DELETED
    
    
| 
         @@ -1,27 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
            if defined?(ActiveRecord)
         
     | 
| 
       3 
     | 
    
         
            -
              require 'models/active_record/person'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              load_schema
         
     | 
| 
       6 
     | 
    
         
            -
              describe 'Abstract subclassing' do
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                it 'should have the parent states' do
         
     | 
| 
       9 
     | 
    
         
            -
                  Person.aasm.states.each do |state|
         
     | 
| 
       10 
     | 
    
         
            -
                    expect(Base.aasm.states).to include(state)
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
                  expect(Person.aasm.states).to eq(Base.aasm.states)
         
     | 
| 
       13 
     | 
    
         
            -
                end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                it 'should have the same events as its parent' do
         
     | 
| 
       16 
     | 
    
         
            -
                  expect(Base.aasm.events).to eq(Person.aasm.events)
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                it 'should not break aasm methods when super class is abstract_class' do
         
     | 
| 
       20 
     | 
    
         
            -
                  person = Person.new
         
     | 
| 
       21 
     | 
    
         
            -
                  person.status = 'active'
         
     | 
| 
       22 
     | 
    
         
            -
                  person.deactivate!
         
     | 
| 
       23 
     | 
    
         
            -
                  expect(person.aasm.current_state).to eq(:inactive)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
            end
         
     | 
    
        data/spec/unit/api_spec.rb
    DELETED
    
    | 
         @@ -1,104 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            if defined?(ActiveRecord)
         
     | 
| 
       4 
     | 
    
         
            -
              require 'models/default_state.rb'
         
     | 
| 
       5 
     | 
    
         
            -
              require 'models/provided_state.rb'
         
     | 
| 
       6 
     | 
    
         
            -
              require 'models/active_record/persisted_state.rb'
         
     | 
| 
       7 
     | 
    
         
            -
              require 'models/active_record/provided_and_persisted_state.rb'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              load_schema
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              describe "reading the current state" do
         
     | 
| 
       12 
     | 
    
         
            -
                it "uses the AASM default" do
         
     | 
| 
       13 
     | 
    
         
            -
                  expect(DefaultState.new.aasm.current_state).to eql :alpha
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                it "uses display option" do
         
     | 
| 
       17 
     | 
    
         
            -
                  expect(DefaultState.new.aasm.human_state).to eql "ALPHA"
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                it "uses the provided method" do
         
     | 
| 
       21 
     | 
    
         
            -
                  expect(ProvidedState.new.aasm.current_state).to eql :beta
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                it "uses the persistence storage" do
         
     | 
| 
       25 
     | 
    
         
            -
                  expect(PersistedState.new.aasm.current_state).to eql :alpha
         
     | 
| 
       26 
     | 
    
         
            -
                end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                it "uses the provided method even if persisted" do
         
     | 
| 
       29 
     | 
    
         
            -
                  expect(ProvidedAndPersistedState.new.aasm.current_state).to eql :gamma
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                context "after dup" do
         
     | 
| 
       33 
     | 
    
         
            -
                  it "uses the persistence storage" do
         
     | 
| 
       34 
     | 
    
         
            -
                    source = PersistedState.create!
         
     | 
| 
       35 
     | 
    
         
            -
                    copy = source.dup
         
     | 
| 
       36 
     | 
    
         
            -
                    copy.save!
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                    copy.release!
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                    expect(source.aasm_state).to eql 'alpha'
         
     | 
| 
       41 
     | 
    
         
            -
                    expect(source.aasm.current_state).to eql :alpha
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                    source2 = PersistedState.find(source.id)
         
     | 
| 
       44 
     | 
    
         
            -
                    expect(source2.reload.aasm_state).to eql 'alpha'
         
     | 
| 
       45 
     | 
    
         
            -
                    expect(source2.aasm.current_state).to eql :alpha
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                    expect(copy.aasm_state).to eql 'beta'
         
     | 
| 
       48 
     | 
    
         
            -
                    expect(copy.aasm.current_state).to eql :beta
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
                end
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              describe "writing and persisting the current state" do
         
     | 
| 
       54 
     | 
    
         
            -
                it "uses the AASM default" do
         
     | 
| 
       55 
     | 
    
         
            -
                  o = DefaultState.new
         
     | 
| 
       56 
     | 
    
         
            -
                  o.release!
         
     | 
| 
       57 
     | 
    
         
            -
                  expect(o.persisted_store).to be_nil
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                it "uses the provided method" do
         
     | 
| 
       61 
     | 
    
         
            -
                  o = ProvidedState.new
         
     | 
| 
       62 
     | 
    
         
            -
                  o.release!
         
     | 
| 
       63 
     | 
    
         
            -
                  expect(o.persisted_store).to eql :beta
         
     | 
| 
       64 
     | 
    
         
            -
                end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                it "uses the persistence storage" do
         
     | 
| 
       67 
     | 
    
         
            -
                  o = PersistedState.new
         
     | 
| 
       68 
     | 
    
         
            -
                  o.release!
         
     | 
| 
       69 
     | 
    
         
            -
                  expect(o.persisted_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.persisted_store).to eql :beta
         
     | 
| 
       76 
     | 
    
         
            -
                end
         
     | 
| 
       77 
     | 
    
         
            -
              end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
              describe "writing the current state without persisting it" do
         
     | 
| 
       80 
     | 
    
         
            -
                it "uses the AASM default" do
         
     | 
| 
       81 
     | 
    
         
            -
                  o = DefaultState.new
         
     | 
| 
       82 
     | 
    
         
            -
                  o.release
         
     | 
| 
       83 
     | 
    
         
            -
                  expect(o.transient_store).to be_nil
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                it "uses the provided method" do
         
     | 
| 
       87 
     | 
    
         
            -
                  o = ProvidedState.new
         
     | 
| 
       88 
     | 
    
         
            -
                  o.release
         
     | 
| 
       89 
     | 
    
         
            -
                  expect(o.transient_store).to eql :beta
         
     | 
| 
       90 
     | 
    
         
            -
                end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                it "uses the persistence storage" do
         
     | 
| 
       93 
     | 
    
         
            -
                  o = PersistedState.new
         
     | 
| 
       94 
     | 
    
         
            -
                  o.release
         
     | 
| 
       95 
     | 
    
         
            -
                  expect(o.transient_store).to be_nil
         
     | 
| 
       96 
     | 
    
         
            -
                end
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                it "uses the provided method even if persisted" do
         
     | 
| 
       99 
     | 
    
         
            -
                  o = ProvidedAndPersistedState.new
         
     | 
| 
       100 
     | 
    
         
            -
                  o.release
         
     | 
| 
       101 
     | 
    
         
            -
                  expect(o.transient_store).to eql :beta
         
     | 
| 
       102 
     | 
    
         
            -
                end
         
     | 
| 
       103 
     | 
    
         
            -
              end
         
     | 
| 
       104 
     | 
    
         
            -
            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
         
     | 
| 
         @@ -1,304 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
            Dir[File.dirname(__FILE__) + "/../models/callbacks/*.rb"].sort.each { |f| require File.expand_path(f) }
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            describe 'callbacks for the new DSL' do
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              it "be called in order" do
         
     | 
| 
       7 
     | 
    
         
            -
                show_debug_log = false
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                callback = Callbacks::BasicMultiple.new(:log => show_debug_log)
         
     | 
| 
       10 
     | 
    
         
            -
                callback.aasm(:left).current_state
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                unless show_debug_log
         
     | 
| 
       13 
     | 
    
         
            -
                  expect(callback).to receive(:before_event).once.ordered
         
     | 
| 
       14 
     | 
    
         
            -
                  expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       15 
     | 
    
         
            -
                  expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
         
     | 
| 
       16 
     | 
    
         
            -
                  expect(callback).to receive(:before_exit_open).once.ordered                   # these should be before the state changes
         
     | 
| 
       17 
     | 
    
         
            -
                  expect(callback).to receive(:exit_open).once.ordered
         
     | 
| 
       18 
     | 
    
         
            -
                  # expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       19 
     | 
    
         
            -
                  # expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
         
     | 
| 
       20 
     | 
    
         
            -
                  expect(callback).to receive(:after_transition).once.ordered
         
     | 
| 
       21 
     | 
    
         
            -
                  expect(callback).to receive(:before_enter_closed).once.ordered
         
     | 
| 
       22 
     | 
    
         
            -
                  expect(callback).to receive(:enter_closed).once.ordered
         
     | 
| 
       23 
     | 
    
         
            -
                  expect(callback).to receive(:aasm_write_state).with(:closed, :left).once.ordered.and_return(true)  # this is when the state changes
         
     | 
| 
       24 
     | 
    
         
            -
                  expect(callback).to receive(:after_exit_open).once.ordered                    # these should be after the state changes
         
     | 
| 
       25 
     | 
    
         
            -
                  expect(callback).to receive(:after_enter_closed).once.ordered
         
     | 
| 
       26 
     | 
    
         
            -
                  expect(callback).to receive(:after_event).once.ordered
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                # puts "------- close!"
         
     | 
| 
       30 
     | 
    
         
            -
                callback.left_close!
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              it "does not run any state callback if the event guard fails" do
         
     | 
| 
       34 
     | 
    
         
            -
                callback = Callbacks::BasicMultiple.new(:log => false)
         
     | 
| 
       35 
     | 
    
         
            -
                callback.aasm(:left).current_state
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                expect(callback).to receive(:before_event).once.ordered
         
     | 
| 
       38 
     | 
    
         
            -
                expect(callback).to receive(:event_guard).once.ordered.and_return(false)
         
     | 
| 
       39 
     | 
    
         
            -
                expect(callback).to_not receive(:transition_guard)
         
     | 
| 
       40 
     | 
    
         
            -
                expect(callback).to_not receive(:before_exit_open)
         
     | 
| 
       41 
     | 
    
         
            -
                expect(callback).to_not receive(:exit_open)
         
     | 
| 
       42 
     | 
    
         
            -
                expect(callback).to_not receive(:after_transition)
         
     | 
| 
       43 
     | 
    
         
            -
                expect(callback).to_not receive(:before_enter_closed)
         
     | 
| 
       44 
     | 
    
         
            -
                expect(callback).to_not receive(:enter_closed)
         
     | 
| 
       45 
     | 
    
         
            -
                expect(callback).to_not receive(:aasm_write_state)
         
     | 
| 
       46 
     | 
    
         
            -
                expect(callback).to_not receive(:after_exit_open)
         
     | 
| 
       47 
     | 
    
         
            -
                expect(callback).to_not receive(:after_enter_closed)
         
     | 
| 
       48 
     | 
    
         
            -
                expect(callback).to_not receive(:after_event)
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                expect {
         
     | 
| 
       51 
     | 
    
         
            -
                  callback.left_close!
         
     | 
| 
       52 
     | 
    
         
            -
                }.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:event_guard].")
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
              end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
              it "handles private callback methods as well" do
         
     | 
| 
       57 
     | 
    
         
            -
                show_debug_log = false
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                callback = Callbacks::PrivateMethodMultiple.new(:log => show_debug_log)
         
     | 
| 
       60 
     | 
    
         
            -
                callback.aasm(:left).current_state
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                # puts "------- close!"
         
     | 
| 
       63 
     | 
    
         
            -
                expect {
         
     | 
| 
       64 
     | 
    
         
            -
                  callback.close!
         
     | 
| 
       65 
     | 
    
         
            -
                }.to_not raise_error
         
     | 
| 
       66 
     | 
    
         
            -
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              context "if the transition guard fails" do
         
     | 
| 
       69 
     | 
    
         
            -
                it "does not run any state callback if guard is defined inline" do
         
     | 
| 
       70 
     | 
    
         
            -
                  show_debug_log = false
         
     | 
| 
       71 
     | 
    
         
            -
                  callback = Callbacks::BasicMultiple.new(:log => show_debug_log, :fail_transition_guard => true)
         
     | 
| 
       72 
     | 
    
         
            -
                  callback.aasm(:left).current_state
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                  unless show_debug_log
         
     | 
| 
       75 
     | 
    
         
            -
                    expect(callback).to receive(:before_event).once.ordered
         
     | 
| 
       76 
     | 
    
         
            -
                    expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       77 
     | 
    
         
            -
                    expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
         
     | 
| 
       78 
     | 
    
         
            -
                    expect(callback).to_not receive(:before_exit_open)
         
     | 
| 
       79 
     | 
    
         
            -
                    expect(callback).to_not receive(:exit_open)
         
     | 
| 
       80 
     | 
    
         
            -
                    expect(callback).to_not receive(:after_transition)
         
     | 
| 
       81 
     | 
    
         
            -
                    expect(callback).to_not receive(:before_enter_closed)
         
     | 
| 
       82 
     | 
    
         
            -
                    expect(callback).to_not receive(:enter_closed)
         
     | 
| 
       83 
     | 
    
         
            -
                    expect(callback).to_not receive(:aasm_write_state)
         
     | 
| 
       84 
     | 
    
         
            -
                    expect(callback).to_not receive(:after_exit_open)
         
     | 
| 
       85 
     | 
    
         
            -
                    expect(callback).to_not receive(:after_enter_closed)
         
     | 
| 
       86 
     | 
    
         
            -
                    expect(callback).to_not receive(:after_event)
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                  expect {
         
     | 
| 
       90 
     | 
    
         
            -
                    callback.left_close!
         
     | 
| 
       91 
     | 
    
         
            -
                  }.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:transition_guard].")
         
     | 
| 
       92 
     | 
    
         
            -
                end
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
                it "does not run transition_guard twice for multiple permitted transitions" do
         
     | 
| 
       95 
     | 
    
         
            -
                  show_debug_log = false
         
     | 
| 
       96 
     | 
    
         
            -
                  callback = Callbacks::MultipleTransitionsTransitionGuardMultiple.new(:log => show_debug_log, :fail_transition_guard => true)
         
     | 
| 
       97 
     | 
    
         
            -
                  callback.aasm(:left).current_state
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                  unless show_debug_log
         
     | 
| 
       100 
     | 
    
         
            -
                    expect(callback).to receive(:before).once.ordered
         
     | 
| 
       101 
     | 
    
         
            -
                    expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       102 
     | 
    
         
            -
                    expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
         
     | 
| 
       103 
     | 
    
         
            -
                    expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       104 
     | 
    
         
            -
                    expect(callback).to receive(:before_exit_open).once.ordered
         
     | 
| 
       105 
     | 
    
         
            -
                    expect(callback).to receive(:exit_open).once.ordered
         
     | 
| 
       106 
     | 
    
         
            -
                    expect(callback).to receive(:aasm_write_state).once.ordered.and_return(true)  # this is when the state changes
         
     | 
| 
       107 
     | 
    
         
            -
                    expect(callback).to receive(:after_exit_open).once.ordered
         
     | 
| 
       108 
     | 
    
         
            -
                    expect(callback).to receive(:after).once.ordered
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                    expect(callback).to_not receive(:transitioning)
         
     | 
| 
       111 
     | 
    
         
            -
                    expect(callback).to_not receive(:before_enter_closed)
         
     | 
| 
       112 
     | 
    
         
            -
                    expect(callback).to_not receive(:enter_closed)
         
     | 
| 
       113 
     | 
    
         
            -
                    expect(callback).to_not receive(:after_enter_closed)
         
     | 
| 
       114 
     | 
    
         
            -
                  end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                  callback.close!
         
     | 
| 
       117 
     | 
    
         
            -
                  expect(callback.aasm(:left).current_state).to eql :failed
         
     | 
| 
       118 
     | 
    
         
            -
                end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                it "does not run any state callback if guard is defined with block" do
         
     | 
| 
       121 
     | 
    
         
            -
                  callback = Callbacks::GuardWithinBlockMultiple.new #(:log => true, :fail_transition_guard => true)
         
     | 
| 
       122 
     | 
    
         
            -
                  callback.aasm(:left).current_state
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
                  expect(callback).to receive(:before).once.ordered
         
     | 
| 
       125 
     | 
    
         
            -
                  expect(callback).to receive(:event_guard).once.ordered.and_return(true)
         
     | 
| 
       126 
     | 
    
         
            -
                  expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
         
     | 
| 
       127 
     | 
    
         
            -
                  expect(callback).to_not receive(:before_exit_open)
         
     | 
| 
       128 
     | 
    
         
            -
                  expect(callback).to_not receive(:exit_open)
         
     | 
| 
       129 
     | 
    
         
            -
                  expect(callback).to_not receive(:transitioning)
         
     | 
| 
       130 
     | 
    
         
            -
                  expect(callback).to_not receive(:before_enter_closed)
         
     | 
| 
       131 
     | 
    
         
            -
                  expect(callback).to_not receive(:enter_closed)
         
     | 
| 
       132 
     | 
    
         
            -
                  expect(callback).to_not receive(:aasm_write_state)
         
     | 
| 
       133 
     | 
    
         
            -
                  expect(callback).to_not receive(:after_exit_open)
         
     | 
| 
       134 
     | 
    
         
            -
                  expect(callback).to_not receive(:after_enter_closed)
         
     | 
| 
       135 
     | 
    
         
            -
                  expect(callback).to_not receive(:after)
         
     | 
| 
       136 
     | 
    
         
            -
                  expect {
         
     | 
| 
       137 
     | 
    
         
            -
                    callback.close!
         
     | 
| 
       138 
     | 
    
         
            -
                  }.to raise_error(AASM::InvalidTransition)
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
                end
         
     | 
| 
       141 
     | 
    
         
            -
              end
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
              it "should properly pass arguments" do
         
     | 
| 
       144 
     | 
    
         
            -
                cb = Callbacks::WithArgsMultiple.new(:log => false)
         
     | 
| 
       145 
     | 
    
         
            -
                cb.aasm(:left).current_state
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                cb.reset_data
         
     | 
| 
       148 
     | 
    
         
            -
                cb.close!(:arg1, :arg2)
         
     | 
| 
       149 
     | 
    
         
            -
                expect(cb.data).to eql 'before(:arg1,:arg2) before_exit_open(:arg1,:arg2) transition_proc(:arg1,:arg2) before_enter_closed(:arg1,:arg2) aasm_write_state after_exit_open(:arg1,:arg2) after_enter_closed(:arg1,:arg2) after(:arg1,:arg2)'
         
     | 
| 
       150 
     | 
    
         
            -
              end
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
              it "should call the callbacks given the to-state as argument" do
         
     | 
| 
       153 
     | 
    
         
            -
                cb = Callbacks::WithStateArgMultiple.new
         
     | 
| 
       154 
     | 
    
         
            -
                expect(cb).to receive(:before_method).with(:arg1).once.ordered
         
     | 
| 
       155 
     | 
    
         
            -
                expect(cb).to receive(:transition_method).never
         
     | 
| 
       156 
     | 
    
         
            -
                expect(cb).to receive(:transition_method2).with(:arg1).once.ordered
         
     | 
| 
       157 
     | 
    
         
            -
                expect(cb).to receive(:before_success_method).with(:arg1).once.ordered
         
     | 
| 
       158 
     | 
    
         
            -
                expect(cb).to receive(:success_method).with(:arg1).once.ordered
         
     | 
| 
       159 
     | 
    
         
            -
                expect(cb).to receive(:after_method).with(:arg1).once.ordered
         
     | 
| 
       160 
     | 
    
         
            -
                cb.close!(:out_to_lunch, :arg1)
         
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
                cb = Callbacks::WithStateArgMultiple.new
         
     | 
| 
       163 
     | 
    
         
            -
                some_object = double('some object')
         
     | 
| 
       164 
     | 
    
         
            -
                expect(cb).to receive(:before_method).with(some_object).once.ordered
         
     | 
| 
       165 
     | 
    
         
            -
                expect(cb).to receive(:transition_method2).with(some_object).once.ordered
         
     | 
| 
       166 
     | 
    
         
            -
                expect(cb).to receive(:before_success_method).with(some_object).once.ordered
         
     | 
| 
       167 
     | 
    
         
            -
                expect(cb).to receive(:success_method).with(some_object).once.ordered
         
     | 
| 
       168 
     | 
    
         
            -
                expect(cb).to receive(:after_method).with(some_object).once.ordered
         
     | 
| 
       169 
     | 
    
         
            -
                cb.close!(:out_to_lunch, some_object)
         
     | 
| 
       170 
     | 
    
         
            -
              end
         
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
              it "should call the proper methods just with arguments" do
         
     | 
| 
       173 
     | 
    
         
            -
                cb = Callbacks::WithStateArgMultiple.new
         
     | 
| 
       174 
     | 
    
         
            -
                expect(cb).to receive(:before_method).with(:arg1).once.ordered
         
     | 
| 
       175 
     | 
    
         
            -
                expect(cb).to receive(:transition_method).with(:arg1).once.ordered
         
     | 
| 
       176 
     | 
    
         
            -
                expect(cb).to receive(:transition_method).never
         
     | 
| 
       177 
     | 
    
         
            -
                expect(cb).to receive(:after_method).with(:arg1).once.ordered
         
     | 
| 
       178 
     | 
    
         
            -
                cb.close!(:arg1)
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                cb = Callbacks::WithStateArgMultiple.new
         
     | 
| 
       181 
     | 
    
         
            -
                some_object = double('some object')
         
     | 
| 
       182 
     | 
    
         
            -
                expect(cb).to receive(:before_method).with(some_object).once.ordered
         
     | 
| 
       183 
     | 
    
         
            -
                expect(cb).to receive(:transition_method).with(some_object).once.ordered
         
     | 
| 
       184 
     | 
    
         
            -
                expect(cb).to receive(:transition_method).never
         
     | 
| 
       185 
     | 
    
         
            -
                expect(cb).to receive(:after_method).with(some_object).once.ordered
         
     | 
| 
       186 
     | 
    
         
            -
                cb.close!(some_object)
         
     | 
| 
       187 
     | 
    
         
            -
              end
         
     | 
| 
       188 
     | 
    
         
            -
            end # callbacks for the new DSL
         
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
            describe 'event callbacks' do
         
     | 
| 
       191 
     | 
    
         
            -
              describe "with an error callback defined" do
         
     | 
| 
       192 
     | 
    
         
            -
                before do
         
     | 
| 
       193 
     | 
    
         
            -
                  class FooCallbackMultiple
         
     | 
| 
       194 
     | 
    
         
            -
                    # this hack is needed to allow testing of parameters, since RSpec
         
     | 
| 
       195 
     | 
    
         
            -
                    # destroys a method's arity when mocked
         
     | 
| 
       196 
     | 
    
         
            -
                    attr_accessor :data
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                    aasm(:left) do
         
     | 
| 
       199 
     | 
    
         
            -
                      event :safe_close, :success => :success_callback, :error => :error_callback do
         
     | 
| 
       200 
     | 
    
         
            -
                        transitions :to => :closed, :from => [:open]
         
     | 
| 
       201 
     | 
    
         
            -
                      end
         
     | 
| 
       202 
     | 
    
         
            -
                    end
         
     | 
| 
       203 
     | 
    
         
            -
                  end
         
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
                  @foo = FooCallbackMultiple.new
         
     | 
| 
       206 
     | 
    
         
            -
                end
         
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
                context "error_callback defined" do
         
     | 
| 
       209 
     | 
    
         
            -
                  it "should run error_callback if an exception is raised" do
         
     | 
| 
       210 
     | 
    
         
            -
                    def @foo.error_callback(e)
         
     | 
| 
       211 
     | 
    
         
            -
                      @data = [e]
         
     | 
| 
       212 
     | 
    
         
            -
                    end
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                    allow(@foo).to receive(:before_enter).and_raise(e = StandardError.new)
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
                    @foo.safe_close!
         
     | 
| 
       217 
     | 
    
         
            -
                    expect(@foo.data).to eql [e]
         
     | 
| 
       218 
     | 
    
         
            -
                  end
         
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
                  it "should run error_callback without parameters if callback does not support any" do
         
     | 
| 
       221 
     | 
    
         
            -
                    def @foo.error_callback(e)
         
     | 
| 
       222 
     | 
    
         
            -
                      @data = []
         
     | 
| 
       223 
     | 
    
         
            -
                    end
         
     | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
       225 
     | 
    
         
            -
                    allow(@foo).to receive(:before_enter).and_raise(e = StandardError.new)
         
     | 
| 
       226 
     | 
    
         
            -
             
     | 
| 
       227 
     | 
    
         
            -
                    @foo.safe_close!('arg1', 'arg2')
         
     | 
| 
       228 
     | 
    
         
            -
                    expect(@foo.data).to eql []
         
     | 
| 
       229 
     | 
    
         
            -
                  end
         
     | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
                  it "should run error_callback with parameters if callback supports them" do
         
     | 
| 
       232 
     | 
    
         
            -
                    def @foo.error_callback(e, arg1, arg2)
         
     | 
| 
       233 
     | 
    
         
            -
                      @data = [arg1, arg2]
         
     | 
| 
       234 
     | 
    
         
            -
                    end
         
     | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
       236 
     | 
    
         
            -
                    allow(@foo).to receive(:before_enter).and_raise(e = StandardError.new)
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
                    @foo.safe_close!('arg1', 'arg2')
         
     | 
| 
       239 
     | 
    
         
            -
                    expect(@foo.data).to eql ['arg1', 'arg2']
         
     | 
| 
       240 
     | 
    
         
            -
                  end
         
     | 
| 
       241 
     | 
    
         
            -
                end
         
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
                it "should raise NoMethodError if exception is raised and error_callback is declared but not defined" do
         
     | 
| 
       244 
     | 
    
         
            -
                  allow(@foo).to receive(:before_enter).and_raise(StandardError)
         
     | 
| 
       245 
     | 
    
         
            -
                  expect{@foo.safe_close!}.to raise_error(NoMethodError)
         
     | 
| 
       246 
     | 
    
         
            -
                end
         
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
                it "should propagate an error if no error callback is declared" do
         
     | 
| 
       249 
     | 
    
         
            -
                    allow(@foo).to receive(:before_enter).and_raise("Cannot enter safe")
         
     | 
| 
       250 
     | 
    
         
            -
                    expect{@foo.close!}.to raise_error(StandardError, "Cannot enter safe")
         
     | 
| 
       251 
     | 
    
         
            -
                end
         
     | 
| 
       252 
     | 
    
         
            -
              end
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
              describe "with aasm_event_fired defined" do
         
     | 
| 
       255 
     | 
    
         
            -
                before do
         
     | 
| 
       256 
     | 
    
         
            -
                  @foo = FooMultiple.new
         
     | 
| 
       257 
     | 
    
         
            -
                  def @foo.aasm_event_fired(event, from, to); end
         
     | 
| 
       258 
     | 
    
         
            -
                end
         
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
       260 
     | 
    
         
            -
                it 'should call it for successful bang fire' do
         
     | 
| 
       261 
     | 
    
         
            -
                  expect(@foo).to receive(:aasm_event_fired).with(:close, :open, :closed)
         
     | 
| 
       262 
     | 
    
         
            -
                  @foo.close!
         
     | 
| 
       263 
     | 
    
         
            -
                end
         
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
       265 
     | 
    
         
            -
                it 'should call it for successful non-bang fire' do
         
     | 
| 
       266 
     | 
    
         
            -
                  expect(@foo).to receive(:aasm_event_fired)
         
     | 
| 
       267 
     | 
    
         
            -
                  @foo.close
         
     | 
| 
       268 
     | 
    
         
            -
                end
         
     | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
       270 
     | 
    
         
            -
                it 'should not call it for failing bang fire' do
         
     | 
| 
       271 
     | 
    
         
            -
                  allow(@foo.aasm(:left)).to receive(:set_current_state_with_persistence).and_return(false)
         
     | 
| 
       272 
     | 
    
         
            -
                  expect(@foo).not_to receive(:aasm_event_fired)
         
     | 
| 
       273 
     | 
    
         
            -
                  @foo.close!
         
     | 
| 
       274 
     | 
    
         
            -
                end
         
     | 
| 
       275 
     | 
    
         
            -
              end
         
     | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
       277 
     | 
    
         
            -
              describe "with aasm_event_failed defined" do
         
     | 
| 
       278 
     | 
    
         
            -
                before do
         
     | 
| 
       279 
     | 
    
         
            -
                  @foo = FooMultiple.new
         
     | 
| 
       280 
     | 
    
         
            -
                  def @foo.aasm_event_failed(event, from); end
         
     | 
| 
       281 
     | 
    
         
            -
                end
         
     | 
| 
       282 
     | 
    
         
            -
             
     | 
| 
       283 
     | 
    
         
            -
                it 'should call it when transition failed for bang fire' do
         
     | 
| 
       284 
     | 
    
         
            -
                  expect(@foo).to receive(:aasm_event_failed).with(:null, :open)
         
     | 
| 
       285 
     | 
    
         
            -
                  expect{
         
     | 
| 
       286 
     | 
    
         
            -
                    @foo.null!
         
     | 
| 
       287 
     | 
    
         
            -
                  }.to raise_error(AASM::InvalidTransition, "Event 'null' cannot transition from 'open'. Failed callback(s): [:always_false].")
         
     | 
| 
       288 
     | 
    
         
            -
                end
         
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
                it 'should call it when transition failed for non-bang fire' do
         
     | 
| 
       291 
     | 
    
         
            -
                  expect(@foo).to receive(:aasm_event_failed).with(:null, :open)
         
     | 
| 
       292 
     | 
    
         
            -
                  expect{
         
     | 
| 
       293 
     | 
    
         
            -
                    @foo.null
         
     | 
| 
       294 
     | 
    
         
            -
                  }.to raise_error(AASM::InvalidTransition, "Event 'null' cannot transition from 'open'. Failed callback(s): [:always_false].")
         
     | 
| 
       295 
     | 
    
         
            -
                end
         
     | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
     | 
    
         
            -
                it 'should not call it if persist fails for bang fire' do
         
     | 
| 
       298 
     | 
    
         
            -
                  allow(@foo.aasm(:left)).to receive(:set_current_state_with_persistence).and_return(false)
         
     | 
| 
       299 
     | 
    
         
            -
                  expect(@foo).to receive(:aasm_event_failed)
         
     | 
| 
       300 
     | 
    
         
            -
                  @foo.close!
         
     | 
| 
       301 
     | 
    
         
            -
                end
         
     | 
| 
       302 
     | 
    
         
            -
              end
         
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
            end # event callbacks
         
     |