Class: HonestPubsub::Server::ClientWorker
- Inherits:
-
Object
- Object
- HonestPubsub::Server::ClientWorker
- Defined in:
- lib/honest_pubsub/server/client_worker.rb
Constant Summary collapse
- @@registered_subscribers =
[]
Instance Attribute Summary collapse
-
#delivery_properties ⇒ Object
Returns the value of attribute delivery_properties.
-
#delivery_routing_data ⇒ Object
Returns the value of attribute delivery_routing_data.
Class Method Summary collapse
-
.handle_errors_with(handler) ⇒ Object
Sets an error handler for the class.
- .inherited(klass) ⇒ Object
-
.subscribe_to(routing_key_name, options = {}) ⇒ Object
Specify the routing key that the subscriber class should listen to.
-
.validates_payload_with(*validators) ⇒ Object
Sets the validator for payload.
Instance Method Summary collapse
-
#initialize(delivery_routing_data, delivery_properties) ⇒ ClientWorker
constructor
A new instance of ClientWorker.
-
#perform(context, payload) ⇒ Object
Actual subscribers need to implement perform method.
-
#perform!(context, payload) ⇒ Object
Performs validation if validates_payload_with is defined and then calls the perform method.
-
#routing_key ⇒ String
The original routing key with which the current message was published.
-
#valid_payload?(payload) ⇒ Boolen
Iterates over all the payload validators and returns false if any of them are false.
Constructor Details
#initialize(delivery_routing_data, delivery_properties) ⇒ ClientWorker
Returns a new instance of ClientWorker.
45 46 47 48 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 45 def initialize(delivery_routing_data, delivery_properties) @delivery_routing_data = delivery_routing_data @delivery_properties = delivery_properties end |
Instance Attribute Details
#delivery_properties ⇒ Object
Returns the value of attribute delivery_properties.
12 13 14 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 12 def delivery_properties @delivery_properties end |
#delivery_routing_data ⇒ Object
Returns the value of attribute delivery_routing_data.
12 13 14 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 12 def delivery_routing_data @delivery_routing_data end |
Class Method Details
.handle_errors_with(handler) ⇒ Object
Sets an error handler for the class
41 42 43 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 41 def self.handle_errors_with(handler) error_handler = handler end |
.inherited(klass) ⇒ Object
14 15 16 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 14 def self.inherited(klass) @@registered_subscribers << klass end |
.subscribe_to(routing_key_name, options = {}) ⇒ Object
Specify the routing key that the subscriber class should listen to.
21 22 23 24 25 26 27 28 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 21 def self.subscribe_to(routing_key_name, = {}) .assert_valid_keys(:on) unless validate_routing_key_name(routing_key_name) raise ArgumentError.new("#{routing_key_name} is not supported. Only lower case characters separated by periods are allowed.") end self.subscribed_key = routing_key_name self.subscribed_queue = generated_queue_name(routing_key_name, [:on]) end |
.validates_payload_with(*validators) ⇒ Object
Sets the validator for payload
35 36 37 38 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 35 def self.validates_payload_with(*validators) self.payload_validators ||= [] self.payload_validators += validators end |
Instance Method Details
#perform(context, payload) ⇒ Object
Actual subscribers need to implement perform method. This is the method where the message is actually processed.
65 66 67 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 65 def perform(context, payload) raise "Need implementation for your worker." end |
#perform!(context, payload) ⇒ Object
Performs validation if validates_payload_with is defined and then calls the perform method
53 54 55 56 57 58 59 60 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 53 def perform!(context, payload) if !valid_payload?(payload) HonestPubsub.logger.error("Payload validation failed for #{self.class.name}") raise ::HonestPubsub::PayloadValidationError.new("Invalid Payload for #{self.class.name}") end perform(context, payload) end |
#routing_key ⇒ String
Returns The original routing key with which the current message was published.
70 71 72 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 70 def routing_key delivery_routing_data[:routing_key] end |
#valid_payload?(payload) ⇒ Boolen
Iterates over all the payload validators and returns false if any of them are false
77 78 79 80 81 82 83 |
# File 'lib/honest_pubsub/server/client_worker.rb', line 77 def valid_payload?(payload) return true unless payload_validators.present? payload_validators.inject(true) { |is_valid, validator| is_valid && (validator.respond_to?(:call) ? validator.call(payload) : send(validator, payload)) } end |