honest_pubsub 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc6a19fcd7590a3594ce7dce30c525ffad8d862e
4
- data.tar.gz: 3904cd4bde4b1498a993d868a0fc7c8b8bd0cec6
3
+ metadata.gz: c7c53a089f1fad2b656c8134008f95ce5e4422e7
4
+ data.tar.gz: 32c4c3e5f5c90697fdc092d81d2f86e22c126ff1
5
5
  SHA512:
6
- metadata.gz: 07e917724a4763ceea12384d38ecd153fbc22d9055b648eb6ead02832512491394b7d1ecb4690b66c670cf0afd17a907dba57ccb9fcdc6981ef662621c9565ad
7
- data.tar.gz: b28f6207461e9c0f0b09d31fda4c2819fb92cdab523f0e96294198a27e2d41895ea63d0f90310c5d4fa1907d54f6b15b194ddca0a51c5ae217cd64955d0b07ea
6
+ metadata.gz: d4740278b6b995f74e69338bd600ef74e4803a67d1e5584179d73412ce894f889093079eabf594b91900cb0f34737eac393d0a43cef2c1664f0c15c179827220
7
+ data.tar.gz: e6f84c3ded8940652bdf7da0a21a9eb159dc633c75e9ae87da27d28cd74037ebb13ee53a5bffe6a84a9a15998af18e982042c151eb5ba1606df205dcde0b409a
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Thanh Lim
1
+ Copyright (c) 2014 The Honest Company
2
2
 
3
3
  MIT License
4
4
 
@@ -8,8 +8,8 @@ require 'honest_pubsub/version'
8
8
  Gem::Specification.new do |spec|
9
9
  spec.name = "honest_pubsub"
10
10
  spec.version = HonestPubsub::VERSION
11
- spec.authors = ["Thanh Lim"]
12
- spec.email = ["thanh@thehonestcompany.com"]
11
+ spec.authors = ["tech@honest.com", "Thanh Lim", "tusharranka@gmail.com", "Joel Jackson"]
12
+ spec.email = ["webadmin@thehonestcompany.com"]
13
13
  spec.description = "Pub sub gem for Honest Company"
14
14
  spec.summary = "Pub sub gem for Honest Company"
15
15
  spec.homepage = ""
@@ -0,0 +1,4 @@
1
+ module HonestPubsub
2
+ class PayloadValidationError < StandardError
3
+ end
4
+ end
@@ -11,12 +11,12 @@ module HonestPubsub
11
11
  attr_reader :worker_class
12
12
 
13
13
  def initialize(worker_class, request_key, queue, durable = true, topic = "honest")
14
- @topic = topic
15
- @request_key = request_key
14
+ @topic = topic
15
+ @request_key = request_key
16
16
  @worker_class = worker_class
17
- @queue_name = queue
18
- @durable = durable
19
- @subscriber = ::HonestPubsub::Subscriber.new(@request_key, @durable, @topic)
17
+ @queue_name = queue
18
+ @durable = durable
19
+ @subscriber = ::HonestPubsub::Subscriber.new(@request_key, @durable, @topic)
20
20
  end
21
21
 
22
22
  def start
@@ -34,16 +34,18 @@ module HonestPubsub
34
34
  end
35
35
 
36
36
  def message_received(delivery_info, properties, envelope)
37
- begin
38
- HonestPubsub.logger.debug( "Message recieved by listener with payload: #{envelope[:payload]}" )
39
- worker = "#{@worker_class}".constantize.new(delivery_info, properties)
40
- raise PayloadError.new("Invalid Payload") unless worker.valid_payload?(envelope[:payload])
41
- HonestPubsub.logger.debug( "Calling worker perform on message" )
42
- worker.perform(envelope[:context], envelope[:payload])
43
- rescue => e
44
- #puts "Error in worker #{e.message}!!!"
45
- Airbrake.notify("Failed perform for #{self.class.name}", params: {info: delivery_info, properties: properties, envelope: envelope.to_hash } )
46
- end
37
+ HonestPubsub.logger.debug("Message received by listener on #{worker_class.name} with payload: #{envelope[:payload]}")
38
+ worker = worker_class.new(delivery_info, properties)
39
+ worker.perform!(envelope[:context], envelope[:payload])
40
+ rescue => e
41
+ HonestPubsub.logger.error("Failed message for #{worker_class.name}")
42
+ Airbrake.notify("Failed perform for #{worker_class.name}",
43
+ params: {
44
+ info: delivery_info,
45
+ properties: properties,
46
+ context: envelope[:context],
47
+ payload: envelope[:payload] })
48
+
47
49
  end
48
50
 
49
51
  protected
@@ -1,6 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'active_support/core_ext'
3
3
 
4
+ # This class provders the worker for executing the subscriber. It receives a message from rabbitmq and
5
+ # creates an instance of the subscriber to execute with the message and context
6
+
4
7
  module HonestPubsub
5
8
  module Server
6
9
  class ClientWorker
@@ -20,7 +23,7 @@ module HonestPubsub
20
23
  unless validate_routing_key_name(routing_key_name)
21
24
  raise ArgumentError.new("#{routing_key_name} is not supported. Only lower case characters separated by periods are allowed.")
22
25
  end
23
- self.subscribed_key = routing_key_name
26
+ self.subscribed_key = routing_key_name
24
27
  self.subscribed_queue = generated_queue_name(routing_key_name, options[:on])
25
28
  end
26
29
 
@@ -32,13 +35,6 @@ module HonestPubsub
32
35
  def self.validates_payload_with(*validators)
33
36
  self.payload_validators ||= []
34
37
  self.payload_validators += validators
35
- #
36
- # executable = if validator.class <= Proc then
37
- # validator
38
- # elsif validator.class == Symbol
39
- # self.method(validator)
40
- # end
41
- # self.payload_validators.push executable
42
38
  end
43
39
 
44
40
  # Sets an error handler for the class
@@ -48,24 +44,41 @@ module HonestPubsub
48
44
 
49
45
  def initialize(delivery_routing_data, delivery_properties)
50
46
  @delivery_routing_data = delivery_routing_data
51
- @delivery_properties = delivery_properties
47
+ @delivery_properties = delivery_properties
48
+ end
49
+
50
+ # Performs validation if validates_payload_with is defined and then calls the perform method
51
+ # @param [Object] payload Payload of the message
52
+ # @param [Hash] context Context from invocation
53
+ def perform!(context, payload)
54
+ if !valid_payload?(payload)
55
+ HonestPubsub.logger.error("Payload validation failed for #{self.class.name}")
56
+ raise ::HonestPubsub::PayloadValidationError.new("Invalid Payload for #{self.class.name}")
57
+ end
58
+
59
+ perform(context, payload)
52
60
  end
53
61
 
54
- # Need to have a real perform method for the message to be processed.
55
- def perform(payload)
62
+ # Actual subscribers need to implement perform method. This is the method where the message is actually processed.
63
+ # @param [Object] payload Payload of the message
64
+ # @param [Hash] context Context from invocation
65
+ def perform(context, payload)
56
66
  raise "Need implementation for your worker."
57
67
  end
58
68
 
69
+ # @return [String] The original routing key with which the current message was published
59
70
  def routing_key
60
71
  delivery_routing_data[:routing_key]
61
72
  end
62
73
 
63
74
  # Iterates over all the payload validators and returns false if any of them are false
75
+ # @param [Object] payload The payload/arguments of the message
76
+ # @return [Boolen] Should return true or false value - If no validators are specified, then returns true
64
77
  def valid_payload?(payload)
65
78
  return true unless payload_validators.present?
66
79
 
67
80
  payload_validators.inject(true) { |is_valid, validator|
68
- is_valid && (validator.respond_to?(:call) ? validator.call(payload) : send(validator, payload) )
81
+ is_valid && (validator.respond_to?(:call) ? validator.call(payload) : send(validator, payload))
69
82
  }
70
83
  end
71
84
 
@@ -78,7 +91,7 @@ module HonestPubsub
78
91
 
79
92
  def self.generated_queue_name(routing_key, queue_name)
80
93
  return queue_name if queue_name.present?
81
- [ HonestPubsub::Configuration.application_name.to_s.gsub(/[^\w\_]/, ''), routing_key.gsub(".", '_') ].reject(&:blank?).join('_')
94
+ [HonestPubsub::Configuration.application_name.to_s.gsub(/[^\w\_]/, ''), routing_key.gsub(".", '_')].reject(&:blank?).join('_')
82
95
  end
83
96
 
84
97
  end
@@ -1,3 +1,3 @@
1
1
  module HonestPubsub
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.4"
3
3
  end
data/lib/honest_pubsub.rb CHANGED
@@ -12,7 +12,7 @@ require "honest_pubsub/message"
12
12
  require "honest_pubsub/publisher"
13
13
  require "honest_pubsub/subscriber"
14
14
  require "honest_pubsub/version"
15
- require "honest_pubsub/exceptions/payload_error"
15
+ require "honest_pubsub/exceptions/payload_validation_error"
16
16
  require 'honest_pubsub/server'
17
17
 
18
18
  if defined?(Rails::Railtie)
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honest_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
+ - tech@honest.com
7
8
  - Thanh Lim
9
+ - tusharranka@gmail.com
10
+ - Joel Jackson
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2014-06-27 00:00:00.000000000 Z
14
+ date: 2014-07-01 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: bundler
@@ -180,7 +183,7 @@ dependencies:
180
183
  version: '0.15'
181
184
  description: Pub sub gem for Honest Company
182
185
  email:
183
- - thanh@thehonestcompany.com
186
+ - webadmin@thehonestcompany.com
184
187
  executables:
185
188
  - start_subscribers
186
189
  extensions: []
@@ -201,7 +204,7 @@ files:
201
204
  - lib/honest_pubsub/configuration.rb
202
205
  - lib/honest_pubsub/context.rb
203
206
  - lib/honest_pubsub/db_logger.rb
204
- - lib/honest_pubsub/exceptions/payload_error.rb
207
+ - lib/honest_pubsub/exceptions/payload_validation_error.rb
205
208
  - lib/honest_pubsub/logger.rb
206
209
  - lib/honest_pubsub/logging.rb
207
210
  - lib/honest_pubsub/message.rb
@@ -243,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
246
  version: '0'
244
247
  requirements: []
245
248
  rubyforge_project:
246
- rubygems_version: 2.2.2
249
+ rubygems_version: 2.3.0
247
250
  signing_key:
248
251
  specification_version: 4
249
252
  summary: Pub sub gem for Honest Company
@@ -1,2 +0,0 @@
1
- class PayloadError < StandardError
2
- end