Sha256: 4402446683331e7d855344ea5eb09f099b41f213878e584d65b3e7f71fff691c
Contents?: true
Size: 1.5 KB
Versions: 3
Compression:
Stored size: 1.5 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}" } 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
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
ably-1.1.1 | lib/ably/modules/state_machine.rb |
ably-rest-1.1.0 | lib/submodules/ably-ruby/lib/ably/modules/state_machine.rb |
ably-1.1.0 | lib/ably/modules/state_machine.rb |