class EventUl::Model
Attributes
events[R]
state[R]
Public Class Methods
event_field(name)
click to toggle source
# File lib/event-ul.rb, line 12 def self.event_field(name) define_method(name) do @state[name] end define_method("#{name}=") do |value| event_data = { name => value } dispatch_and_apply(event_data) end end
new()
click to toggle source
# File lib/event-ul.rb, line 6 def initialize @events = [] @state = {} @current_event = 0 end
Public Instance Methods
current()
click to toggle source
# File lib/event-ul.rb, line 23 def current @current_event = @events.size @state = {} @events.each_with_index do |event, step| apply(event[:data]) if step <= @current_event end @state end
step_back()
click to toggle source
# File lib/event-ul.rb, line 34 def step_back return @state if @current_event == 0 @current_event = @current_event - 1 @state = {} @events.each_with_index do |event, step| apply(event[:data]) if step <= @current_event end @state end
Private Instance Methods
apply(event_data)
click to toggle source
# File lib/event-ul.rb, line 59 def apply(event_data) @state = @state.merge(event_data) end
dispatch(event_data)
click to toggle source
# File lib/event-ul.rb, line 54 def dispatch(event_data) @events.push(at: Time.now, data: event_data) @current_event = @events.size end
dispatch_and_apply(event_data)
click to toggle source
# File lib/event-ul.rb, line 49 def dispatch_and_apply(event_data) dispatch(event_data) apply(event_data) end