Commit 34f53ef

mo khan <mo@mokhan.ca>
2015-02-10 03:25:22
extract message objects to publish.
1 parent 64dd29d
app/controllers/agents/events_controller.rb
@@ -11,9 +11,11 @@ module Agents
     end
 
     def create
-      message = event_params.merge({agent_id: @agent.id})
-      routing_key = "events.#{event_params[:type]}.#{@agent.id}"
-      Publisher.publish(routing_key, message)
+      publish(EventMessage.new(
+        agent_id: @agent.id,
+        event_type: event_params[:event_type],
+        data: event_params[:data]
+      ))
       redirect_to agent_events_url, notice: 'Event was successfully created.'
     end
 
app/controllers/api/agents/events_controller.rb
@@ -3,9 +3,12 @@ module Api
     class EventsController < ApplicationController
       def create
         @agent = Agent.find(params[:agent_id])
-        message = event_params.merge({agent_id: @agent.id})
-        routing_key = "events.#{event_params[:type]}.#{@agent.id}"
-        Publisher.publish(routing_key, message)
+        publish(EventMessage.new(
+          agent_id: @agent.id,
+          event_type: event_params[:event_type],
+          data: event_params[:data]
+        ))
+
         render nothing: true
       end
 
app/controllers/api/agents/files_controller.rb
@@ -9,12 +9,11 @@ module Api
         @agent = Agent.find(params[:agent_id])
         @fingerprint = params[:id]
         @file = Disposition.find_by(fingerprint: params[:id])
-        message = {
+        publish(EventMessage.new(
           agent_id: @agent.id,
-          type: :lookup,
+          event_type: :scanned,
           data: params[:data]
-        }
-        Publisher.publish("events.scanned.#{@agent.id}", message)
+        ))
       end
     end
   end
app/controllers/application_controller.rb
@@ -3,4 +3,10 @@ class ApplicationController < ActionController::Base
   # For APIs, you may want to use :null_session instead.
   #protect_from_forgery with: :exception
   protect_from_forgery with: :null_session
+
+  protected
+
+  def publish(message)
+    Publisher.publish(message)
+  end
 end
app/controllers/dispositions_controller.rb
@@ -18,14 +18,19 @@ class DispositionsController < ApplicationController
   end
 
   def create
-    fingerprint = disposition_params[:fingerprint]
-    Publisher.publish("commands.poke.#{fingerprint}", disposition_params)
+    publish(PokeMessage.new(
+      fingerprint: disposition_params[:fingerprint],
+      state: disposition_params[:state],
+    ))
 
     redirect_to dispositions_path, notice: 'Disposition was successfully created.'
   end
 
   def update
-    Publisher.publish("poke", disposition_params)
+    publish(PokeMessage.new(
+      fingerprint: disposition_params[:fingerprint],
+      state: disposition_params[:state],
+    ))
     redirect_to dispositions_path, notice: 'Disposition was successfully updated.'
   end
 
app/models/event_message.rb
@@ -0,0 +1,25 @@
+class EventMessage
+  attr_reader :agent_id, :event_type, :data
+
+  def initialize(agent_id:, event_type:, data: {})
+    @agent_id = agent_id
+    @event_type = event_type
+    @data = data
+  end
+
+  def routing_key
+    "events.#{event_type}.#{agent_id}"
+  end
+
+  def to_hash
+    {
+      agent_id: agent_id,
+      event_type: event_type,
+      data: data
+    }
+  end
+
+  def to_json
+    to_hash.to_json
+  end
+end
app/models/poke_message.rb
@@ -0,0 +1,23 @@
+class PokeMessage
+  attr_reader :fingerprint, :state
+
+  def initialize(fingerprint:, state: )
+    @fingerprint = fingerprint
+    @state = state
+  end
+
+  def routing_key
+    "commands.poke.#{fingerprint}"
+  end
+
+  def to_hash
+    {
+      fingerprint: fingerprint,
+      state: state
+    }
+  end
+
+  def to_json
+    to_hash.to_json
+  end
+end
app/services/publisher.rb
@@ -1,7 +1,7 @@
 class Publisher
-  def self.publish(routing_key, message = {})
+  def self.publish(message)
     exchange = channel.topic("malwer")
-    exchange.publish(message.to_json, routing_key: routing_key)
+    exchange.publish(message.to_json, routing_key: message.routing_key)
   end
 
   def self.channel