Sha256: a14bb50d878c1e9bb189a01965f75c9bbc91bb35dcff05c528b73284ebee9db3

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

module StateFu
  class State < StateFu::Sprocket

    attr_reader :entry_requirements, :exit_requirements

    def initialize(machine, name, options={})
      @entry_requirements = [].extend ArrayWithSymbolAccessor
      @exit_requirements  = [].extend ArrayWithSymbolAccessor
      super( machine, name, options )
    end

    def events
      machine.events.from(self)
    end

    #
    # Proxy methods to StateFu::Lathe
    #
    # TODO - build something meta to build these proxy events
    def event( name, options={}, &block )
      if block_given?
        lathe.event( name, options, &block )
      else
        lathe.event( name, options )
      end
    end

    def enterable_by?( binding, *args )
      entry_requirements.reject do |r|
        res = binding.evaluate_requirement_with_args( r, *args )
      end.empty?
    end

    def exitable_by?( binding, *args )
      exit_requirements.reject do |r|
        binding.evaluate_requirement_with_args( r, *args )
      end.empty?
    end

    # allows @obj.state_fu.state === :new
    def === other
      self.to_sym === other.to_sym
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
davidlee-state-fu-0.2.0 lib/state_fu/state.rb