Made Container less independant of Element, events are now fired.

This commit is contained in:
2019-03-01 10:27:29 -06:00
parent 18ff0a1ea9
commit 8664c90de7
4 changed files with 75 additions and 41 deletions

View File

@@ -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