Sha256: fcbb763dc52ddc98aafce92decc4a7f85ad8fa9fe229b48296f864b9950d5541
Contents?: true
Size: 1.15 KB
Versions: 2
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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
statesman-1.0.0.beta2 | lib/statesman/callback.rb |
statesman-1.0.0.beta1 | lib/statesman/callback.rb |