lib/finite/event.rb in finite-0.0.1 vs lib/finite/event.rb in finite-1.0.0

- old
+ new

@@ -1,5 +1,68 @@ module Finite + + # The event class. Represents an event in the state machine class Event - # some code + + attr_reader :name, :transitions, :callbacks + + # Create an event object + # + # @param name [Symbol] the name of the event + # @param block [Block] the block of code in the event + def initialize(name, &block) + @name = name + @transitions = Hash.new + @callbacks = {before: Array.new, after: Array.new} + instance_eval &block + end + + # Are two events equal + # + # @param event [Object] the object you are comparing it to + # @return true if they are equal false if not + def ==(event) + if event.is_a? Event + @name == event.name + elsif event.is_a? Symbol + @name == event + else + false + end + end + + # overrriden for puts and print + def to_s + @name.to_s + end + + # Overridden for p + def inspect + @name + end + + private + # The transition method for the dsl + # + # @param opts [Hash] the options for a transition + def go(opts) + options = [] + if opts[:from].is_a? Array + opts[:from].each do |from| + options << {from: from, to: opts[:to]} + end + else + options << opts + end + options.each do |opt| + @transitions[opt[:from]] = Transition.new(opt) + end + end + + # Create the callback methods + [:after, :before].each do |callback| + define_method callback do |*args, &block| + @callbacks[callback] << block + end + end end end \ No newline at end of file