Commit e8f772f

mo khan <mo@mokhan.ca>
2014-03-22 05:17:28
create event handler to fetch stock price and display in shell.
1 parent 0f8a89f
lib/boot/container_configuration.rb
@@ -20,6 +20,7 @@ class ContainerConfiguration
     container.register(:application_controller) { |x| x.build(ApplicationController) }.as_singleton
     container.register(:presenter_factory) { |x| x.build(PresenterFactory) }.as_singleton
     container.register(:stock_service) { |x| StockService.new }.as_singleton
+    container.register(:stock_query) { |x| x.build(StockQuery) }
     Spank::IOC.bind_to(container)
   end
 end
lib/boot/events_registration.rb
@@ -2,10 +2,8 @@ class EventsRegistration
   extend Nasty::Command
 
   def self.run(container)
-    register_items_with(container.resolve(:event_aggregator))
-  end
-
-  def self.register_items_with(event_aggregator)
+    event_aggregator = container.resolve(:event_aggregator)
     event_aggregator.subscribe(:halt, ShutdownCommand.new)
+    event_aggregator.subscribe(:clicked, container.resolve(:stock_query))
   end
 end
lib/presentation/presenters/shell_presenter.rb
@@ -3,20 +3,10 @@ require 'presenter'
 class ShellPresenter < Presenter
   def initialize(shell_view, stock_service)
     @view = shell_view
-    @stock_service = stock_service
   end
 
   def present
     @view.set_title("Hello World")
     @view.show_all
   end
-
-  def clicked
-    stock = @stock_service.fetch(@view.textbox.text)
-    @view.display(stock.to_s)
-  end
-
-  def shutdown
-    Publish.event(:halt)
-  end
 end
lib/presentation/windows/shell_view.rb
@@ -21,9 +21,6 @@ class ShellView
   end
 
   def bind_to(presenter)
-    @builder.connect_signals do |signal|
-      proc { presenter.public_send(signal) }
-    end
   end
 
   def display(text)
lib/presentation/event_aggregator.rb
@@ -18,6 +18,6 @@ class EventAggregator
   private
 
   def subscribers_for(event)
-    @subscribers[event]
+    @subscribers[event.to_sym]
   end
 end
lib/service/stock_query.rb
@@ -0,0 +1,12 @@
+class StockQuery
+  def initialize(symbol_textbox, shell_view, stock_service)
+    @symbol_textbox = symbol_textbox
+    @stock_service = stock_service
+    @shell_view = shell_view
+  end
+
+  def clicked(payload)
+    stock = @stock_service.fetch(@symbol_textbox.text)
+    @shell_view.display(stock.to_s)
+  end
+end