# Возможно я слишком усложняю задачу, у которой должно быть решение проще, но как из класса передать во второй класс объект первого класса?
# У меня есть класс, допустим, слушатель, который "подписывается" на класс эвент-мейкер. Когда эвент-мейкер собсна делает эвент мне надо слушателю передать время и значения эвента. Поиск по Notification паттерну нашел лишь вопросы по апишкам всяких фейсбуков и их уведомлений.
# Единственное до чего я додумался, это при вызове метода subscribe_to класса Listener записывать в переменную-массив класса Eventmaker текущий объект класса Listener, а при создании эвента в классе Eventmaker проходить по массиву и передавать notification в каждый объект.
class Listener
def call( event, time)
puts "Got event: #{event.inspect} @ #{time.inspect}"
end
end
class EventMaker
def initialize
@subscribers = [ ]
end
def subscribe( listener)
@subscribers << listener
end
def publish(event)
time = Time.now
@subscribers.each do |subscriber|
subscriber.call(event, time)
end
end
end
listener = Listener.new
publisher = EventMaker.new
publisher.subscribe ( listener)
publisher.publish ( 'ruby is dead' )
IyDQktC+0LfQvNC+0LbQvdC+INGPINGB0LvQuNGI0LrQvtC8INGD0YHQu9C+0LbQvdGP0Y4g0LfQsNC00LDRh9GDLCDRgyDQutC+0YLQvtGA0L7QuSDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0YDQtdGI0LXQvdC40LUg0L/RgNC+0YnQtSwg0L3QviDQutCw0Log0LjQtyDQutC70LDRgdGB0LAg0L/QtdGA0LXQtNCw0YLRjCDQstC+INCy0YLQvtGA0L7QuSDQutC70LDRgdGBINC+0LHRitC10LrRgiDQv9C10YDQstC+0LPQviDQutC70LDRgdGB0LA/CiMg0KMg0LzQtdC90Y8g0LXRgdGC0Ywg0LrQu9Cw0YHRgSwg0LTQvtC/0YPRgdGC0LjQvCwg0YHQu9GD0YjQsNGC0LXQu9GMLCDQutC+0YLQvtGA0YvQuSAi0L/QvtC00L/QuNGB0YvQstCw0LXRgtGB0Y8iINC90LAg0LrQu9Cw0YHRgSDRjdCy0LXQvdGCLdC80LXQudC60LXRgC4g0JrQvtCz0LTQsCDRjdCy0LXQvdGCLdC80LXQudC60LXRgCDRgdC+0LHRgdC90LAg0LTQtdC70LDQtdGCINGN0LLQtdC90YIg0LzQvdC1INC90LDQtNC+INGB0LvRg9GI0LDRgtC10LvRjiDQv9C10YDQtdC00LDRgtGMINCy0YDQtdC80Y8g0Lgg0LfQvdCw0YfQtdC90LjRjyDRjdCy0LXQvdGC0LAuINCf0L7QuNGB0Log0L/QviBOb3RpZmljYXRpb24g0L/QsNGC0YLQtdGA0L3RgyDQvdCw0YjQtdC7INC70LjRiNGMINCy0L7Qv9GA0L7RgdGLINC/0L4g0LDQv9C40YjQutCw0Lwg0LLRgdGP0LrQuNGFINGE0LXQudGB0LHRg9C60L7QsiDQuCDQuNGFINGD0LLQtdC00L7QvNC70LXQvdC40LkuCiMg0JXQtNC40L3RgdGC0LLQtdC90L3QvtC1INC00L4g0YfQtdCz0L4g0Y8g0LTQvtC00YPQvNCw0LvRgdGPLCDRjdGC0L4g0L/RgNC4INCy0YvQt9C+0LLQtSDQvNC10YLQvtC00LAgc3Vic2NyaWJlX3RvINC60LvQsNGB0YHQsCBMaXN0ZW5lciDQt9Cw0L/QuNGB0YvQstCw0YLRjCDQsiDQv9C10YDQtdC80LXQvdC90YPRji3QvNCw0YHRgdC40LIg0LrQu9Cw0YHRgdCwIEV2ZW50bWFrZXIg0YLQtdC60YPRidC40Lkg0L7QsdGK0LXQutGCINC60LvQsNGB0YHQsCBMaXN0ZW5lciwg0LAg0L/RgNC4INGB0L7Qt9C00LDQvdC40Lgg0Y3QstC10L3RgtCwINCyINC60LvQsNGB0YHQtSBFdmVudG1ha2VyINC/0YDQvtGF0L7QtNC40YLRjCDQv9C+INC80LDRgdGB0LjQstGDINC4INC/0LXRgNC10LTQsNCy0LDRgtGMIG5vdGlmaWNhdGlvbiDQsiDQutCw0LbQtNGL0Lkg0L7QsdGK0LXQutGCLgoKY2xhc3MgTGlzdGVuZXIKICBkZWYgY2FsbChldmVudCwgdGltZSkKICAJcHV0cyAiR290IGV2ZW50OiAje2V2ZW50Lmluc3BlY3R9IEAgI3t0aW1lLmluc3BlY3R9IgogIGVuZAplbmQKCmNsYXNzIEV2ZW50TWFrZXIKICBkZWYgaW5pdGlhbGl6ZQogIAlAc3Vic2NyaWJlcnMgPSBbXQogIGVuZAoKICBkZWYgc3Vic2NyaWJlKGxpc3RlbmVyKQogIAlAc3Vic2NyaWJlcnMgPDwgbGlzdGVuZXIKICBlbmQKICAKICBkZWYgcHVibGlzaChldmVudCkKICAJdGltZSA9IFRpbWUubm93CgogIAlAc3Vic2NyaWJlcnMuZWFjaCBkbyB8c3Vic2NyaWJlcnwKICAJICBzdWJzY3JpYmVyLmNhbGwoZXZlbnQsIHRpbWUpCiAgCWVuZAogIGVuZAplbmQKCmxpc3RlbmVyID0gTGlzdGVuZXIubmV3CnB1Ymxpc2hlciA9IEV2ZW50TWFrZXIubmV3CgpwdWJsaXNoZXIuc3Vic2NyaWJlKGxpc3RlbmVyKQpwdWJsaXNoZXIucHVibGlzaCgncnVieSBpcyBkZWFkJyk=