Class: Transitions::Event
- Inherits:
-
Object
- Object
- Transitions::Event
- Defined in:
- lib/transitions/event.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#success ⇒ Object
readonly
Returns the value of attribute success.
-
#timestamp ⇒ Object
Returns the value of attribute timestamp.
Instance Method Summary collapse
- #==(event) ⇒ Object
- #fire(obj, to_state = nil, *args) ⇒ Object
-
#initialize(machine, name, options = {}, &block) ⇒ Event
constructor
A new instance of Event.
-
#timestamp_defined? ⇒ Boolean
Has the timestamp option been specified for this event?.
- #transitions_from_state?(state) ⇒ Boolean
- #update(options = {}, &block) ⇒ Object
-
#update_event_timestamp(obj, next_state) ⇒ Object
update the timestamp attribute on obj.
Constructor Details
#initialize(machine, name, options = {}, &block) ⇒ Event
Returns a new instance of Event.
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/transitions/event.rb', line 27 def initialize(machine, name, = {}, &block) @machine, @name, @transitions = machine, name, [] if machine machine.klass.send(:define_method, "#{name}!") do |*args| machine.fire_event(name, self, true, *args) end machine.klass.send(:define_method, name.to_s) do |*args| machine.fire_event(name, self, false, *args) end end update(, &block) end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
25 26 27 |
# File 'lib/transitions/event.rb', line 25 def name @name end |
#success ⇒ Object (readonly)
Returns the value of attribute success.
25 26 27 |
# File 'lib/transitions/event.rb', line 25 def success @success end |
#timestamp ⇒ Object
Returns the value of attribute timestamp.
25 26 27 |
# File 'lib/transitions/event.rb', line 25 def @timestamp end |
Instance Method Details
#==(event) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/transitions/event.rb', line 63 def ==(event) if event.is_a? Symbol name == event else name == event.name end end |
#fire(obj, to_state = nil, *args) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/transitions/event.rb', line 41 def fire(obj, to_state = nil, *args) transitions = @transitions.select { |t| t.from == obj.current_state(@machine ? @machine.name : nil) } raise InvalidTransition if transitions.size == 0 next_state = nil transitions.each do |transition| next if to_state && !Array(transition.to).include?(to_state) if transition.perform(obj) next_state = to_state || Array(transition.to).first transition.execute(obj, *args) break end end # Update timestamps on obj if a timestamp has been defined (obj, next_state) if next_state end |
#timestamp_defined? ⇒ Boolean
Has the timestamp option been specified for this event?
72 73 74 |
# File 'lib/transitions/event.rb', line 72 def !@timestamp.nil? end |
#transitions_from_state?(state) ⇒ Boolean
59 60 61 |
# File 'lib/transitions/event.rb', line 59 def transitions_from_state?(state) @transitions.any? { |t| t.from? state } end |
#update(options = {}, &block) ⇒ Object
76 77 78 79 80 81 |
# File 'lib/transitions/event.rb', line 76 def update( = {}, &block) @success = [:success] if .key?(:success) self. = [:timestamp] if [:timestamp] instance_eval(&block) if block self end |
#update_event_timestamp(obj, next_state) ⇒ Object
update the timestamp attribute on obj
84 85 86 |
# File 'lib/transitions/event.rb', line 84 def (obj, next_state) obj.send "#{(obj, next_state)}=", Time.now end |