module ObserveEvent
Small and effective implementation of the observer pattern to define event methods on objects
Public Instance Methods
event(name)
click to toggle source
# File lib/observe_event.rb, line 9 def event(name) define_method(name) do |*arguments, &block| # TODO: Allow below, they get tacked onto the block arguments raise ArgumentError, 'Arguments cannot be passed with a block' if !block.nil? && !arguments.empty? events = instance_variable_get("@#{name}") return if block.nil? && events.nil? return events.each { |event| event.call(*arguments) } if block.nil? return instance_variable_set("@#{name}", [block]) if events.nil? events << block end end
event_accessor(name)
click to toggle source
# File lib/observe_event.rb, line 36 def event_accessor(name) attr_reader(name) event_writer(name) end
event_writer(name)
click to toggle source
# File lib/observe_event.rb, line 23 def event_writer(name) event("#{name}_changed") define_method("#{name}=") do |current_value| previous_value = instance_variable_get("@#{name}") instance_variable_set("@#{name}", current_value) send("#{name}_changed", previous_value, current_value) current_value end end