Sha256: adb6d0706a208f3aa28378cc4ae60bf21ab31c4204963958706fe6b658d153c0

Contents?: true

Size: 1.53 KB

Versions: 23

Compression:

Stored size: 1.53 KB

Contents

require 'statesman'
require 'ably/modules/statesman_monkey_patch'

module Ably::Modules
  # Module providing Statesman StateMachine functionality
  #
  # Expects method #logger to be defined
  #
  # @api private
  module StateMachine
    def self.included(klass)
      klass.class_eval do
        include Statesman::Machine
      end
      klass.extend Ably::Modules::StatesmanMonkeyPatch
      klass.extend ClassMethods
    end

    # Alternative to Statesman's #transition_to that:
    # * log state change failures to {Logger}
    #
    # @return [void]
    def transition_state(state, *args)
      unless result = transition_to(state.to_sym, *args)
        exception = exception_for_state_change_to(state)
        logger.fatal { "#{self.class}: #{exception.message}\n#{caller[0..20].join("\n")}" }
      end
      result
    end

    # @return [Statesman History Object]
    def previous_transition
      history[-2]
    end

    # @return [Symbol]
    def previous_state
      previous_transition.to_state if previous_transition
    end

    # @return [Ably::Exceptions::InvalidStateChange]
    def exception_for_state_change_to(state)
      error_message = "#{self.class}: Unable to transition from #{current_state} => #{state}"
      Ably::Exceptions::InvalidStateChange.new(error_message, nil, Ably::Exceptions::Codes::CHANNEL_OPERATION_FAILED_INVALID_CHANNEL_STATE)
    end

    module ClassMethods
      private

      def is_error_type?(error)
        error.kind_of?(Ably::Models::ErrorInfo) || error.kind_of?(StandardError)
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
ably-rest-1.2.2 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.2.2 lib/ably/modules/state_machine.rb
ably-rest-1.2.1 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.2.1 lib/ably/modules/state_machine.rb
ably-rest-1.2.0 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.2.0 lib/ably/modules/state_machine.rb
ably-rest-1.1.8 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.8 lib/ably/modules/state_machine.rb
ably-rest-1.1.7 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.7 lib/ably/modules/state_machine.rb
ably-rest-1.1.6 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.6 lib/ably/modules/state_machine.rb
ably-rest-1.1.5 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.5 lib/ably/modules/state_machine.rb
ably-rest-1.1.4 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.4 lib/ably/modules/state_machine.rb
ably-rest-1.1.4.rc lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.4.rc lib/ably/modules/state_machine.rb
ably-rest-1.1.3 lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb
ably-1.1.3 lib/ably/modules/state_machine.rb