lib/fsm/transition.rb in simplificator-fsm-0.2.4 vs lib/fsm/transition.rb in simplificator-fsm-0.3.0

- old
+ new

@@ -1,22 +1,31 @@ module FSM class Transition include FSM::Options::InstanceMethods - attr_accessor(:name, :from, :to, :event) + attr_accessor(:name, :from, :to, :event, :guard) def initialize(name, from, to, options = {}) raise ArgumentError.new("name, from and to are required but were '#{name}', '#{from}' and '#{to}'") unless name && from && to - assert_options(options, [:event]) + assert_options(options, [:event, :guard]) self.name = name self.from = from self.to = to self.event = Executable.new options[:event] if options.has_key?(:event) + self.guard = Executable.new options[:guard] if options.has_key?(:guard) end def fire_event(target, args) self.event.execute(target, *args) if self.event - end + end + def fire?(target, args) + self.guard ? self.guard.execute(target, *args) : true + end + def to_s "Transition from #{self.from.name} -> #{self.to.name} with event #{self.event}" - end + end + + def to_dot(options = {}) + "#{self.from.name} -> #{self.to.name} [label=\"#{self.name}\"]" + end end end \ No newline at end of file