Sha256: da2c3ad49817d0ad8e6b19c0a38bd6a1577463551389ef7ad9096e4a6c77ed39
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
module CyberarmEngine module Event # Gets included into Element def subscribe(event, method = nil, &block) handler = method || block @event_handler[event] << handler Subscription.new(self, event, handler) end def unsubscribe(subscription) end def publish(event, *args) raise ArgumentError, "#{self.class} does not handle #{event.inspect}" unless @event_handler.include?(event) return unless enabled? was_handled = false was_handled = true if respond_to?(event) && (send(event, self, *args) == :handled) @event_handler[event].reverse_each do |handler| if handler.call(self, *args) == :handled was_handled = true break end end return :handled if was_handled parent.publish(event, *args) if parent nil end def event(event) @event_handler ||= {} @event_handler[event] ||= [] end end class Subscription attr_reader :publisher, :event, :handler def initialize(publisher, event, handler) @publisher = publisher @event = event @handler = handler end def unsubscribe @publisher.unsubscribe(self) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cyberarm_engine-0.19.0 | lib/cyberarm_engine/ui/event.rb |