module Captio::Stateful::ClassMethods
Public Instance Methods
states(*states)
click to toggle source
# File lib/captio/stateful.rb, line 14 def states(*states) states.each do |state| define_method(state.to_s + "?") do state == self.state end end define_singleton_method('states') do states end define_method('state') do @state ||= states.first @state end attr_writer :state end
verb(name, state: nil, &block)
click to toggle source
# File lib/captio/stateful.rb, line 35 def verb(name, state: nil, &block) raise ArgumentError, "Verbs must have a valid initial state" if state.nil? || !states.include?(state) define_method(name.to_s + "!") do raise StateSequenceError, "Cannot `#{name}` when the state is #{self.state}." unless self.state == state self.state = self.class.states.at(self.class.states.index(state) + 1) instance_eval(&block) if block_given? end end