Sha256: a20088ecd014a09cbe6b38034bb6f88bef91a837109562768accc33f39a29415

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

unless defined? $__fsm_event__
  $__fsm_event__ = __FILE__ 

  module FSM 
    FSM::LIBDIR =
      File::dirname(File::expand_path(__FILE__)) + File::SEPARATOR unless
        defined? FSM::LIBDIR

    FSM::INCDIR =
      File::dirname(FSM::LIBDIR) + File::SEPARATOR unless
        defined? FSM::INCDIR

    require INCDIR + 'fsm'

    class Event
      include Util

      NOTIFICATION = "fsm_event"

      tattrs %w[
        state
        data
        type
      ]

      def initialize state, *data, &b
        super
        @state, @data = state, *data
        @type = self.class
      end

      def notify s, *a, &b
        mcall(s, NOTIFICATION, self, *a, &b) if s.respond_to? NOTIFICATION
      end

      def inspect
        [@type, @state, @data].inspect
      end


      class Any < Event
      end

      class Exit < Any
      end

      class Transition < Any
      end

      class Entry < Any
      end

      class Input < Any
      end

      TYPES = Any, Exit, Transition, Entry, Input 

      def self.message
        name.split(%r/::/).last.downcase
      end

      TYPES.each do |etype|
        message = etype.message
        singleton_class{ define_method(message){ etype }}
      end
    end # class Event
  end # module FSM
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fsm-0.0.0 lib/fsm-0.0.0/event.rb