Sha256: 5f7157fc77f3aeb20fccd3bdd87f631de8fa71f13fa730a0ae51efefa239a891
Contents?: true
Size: 1.15 KB
Versions: 5
Compression:
Stored size: 1.15 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 = Array(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.empty? end def matches_from_state(from, to) (from == self.from && (to.nil? || self.to.empty?)) end def matches_to_state(from, to) ((from.nil? || self.from.nil?) && self.to.include?(to)) end def matches_both_states(from, to) from == self.from && self.to.include?(to) end end end
Version data entries
5 entries across 5 versions & 1 rubygems