Sha256: 02082bb05c9e5ae77124b8484da5f113610fc76f31197490e0bd29d74cfe6b32

Contents?: true

Size: 1.11 KB

Versions: 10

Compression:

Stored size: 1.11 KB

Contents

require_relative "exceptions"

module Statesman
  class Callback
    attr_reader :from
    attr_reader :to
    attr_reader :callback

    def initialize(options = { from: nil, to: nil, callback: nil })
      unless options[:callback].respond_to?(:call)
        raise InvalidCallbackError, "No callback passed"
      end

      @from = options[:from]
      @to = options[:to]
      @callback = options[:callback]
    end

    def call(*args)
      callback.call(*args)
    end

    def applies_to?(options = { from: nil, to: nil })
      matches(options[:from], options[:to])
    end

    private

    def matches(from, to)
      matches_all_transitions ||
      matches_to_state(from, to) ||
      matches_from_state(from, to) ||
      matches_both_states(from, to)
    end

    def matches_all_transitions
      from.nil? && to.nil?
    end

    def matches_from_state(from, to)
      (from == self.from  && (to.nil? || self.to.nil?))
    end

    def matches_to_state(from, to)
      ((from.nil? || self.from.nil?) && to == self.to)
    end

    def matches_both_states(from, to)
      from == self.from && to == self.to
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
statesman-0.8.3 lib/statesman/callback.rb
statesman-0.8.2 lib/statesman/callback.rb
statesman-0.8.1 lib/statesman/callback.rb
statesman-0.8.0 lib/statesman/callback.rb
statesman-0.7.0 lib/statesman/callback.rb
statesman-0.6.1 lib/statesman/callback.rb
statesman-0.6.0 lib/statesman/callback.rb
statesman-0.5.0 lib/statesman/callback.rb
statesman-0.4.0 lib/statesman/callback.rb
statesman-0.3.0 lib/statesman/callback.rb