mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2025-12-17 05:22:35 +00:00
Made Container less independant of Element, events are now fired.
This commit is contained in:
@@ -1,13 +1,29 @@
|
||||
module CyberarmEngine
|
||||
module Event
|
||||
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(event)
|
||||
def unsubscribe(subscription)
|
||||
end
|
||||
|
||||
def publish(event, *args)
|
||||
# block.call(*args)
|
||||
raise ArgumentError, "#{self.class} does not handle #{event.inspect}" unless @event_handler.include?(event)
|
||||
|
||||
return unless enabled?
|
||||
|
||||
if respond_to?(event)
|
||||
return :handled if send(event, self, *args) == :handled
|
||||
end
|
||||
|
||||
@event_handler[event].reverse_each do |handler|
|
||||
return :handled if handler.call(self, *args) == :handled
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
def event(event)
|
||||
@@ -17,5 +33,14 @@ module CyberarmEngine
|
||||
end
|
||||
|
||||
class Subscription
|
||||
attr_reader :publisher, :event, :handler
|
||||
|
||||
def initialize(publisher, event, handler)
|
||||
@publisher, @event, @handler = publisher, event, handler
|
||||
end
|
||||
|
||||
def unsubscribe
|
||||
@publisher.unsubscribe(self)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user