hutch 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +26 -1
 - data/README.md +2 -0
 - data/hutch.gemspec +2 -2
 - data/lib/hutch.rb +2 -0
 - data/lib/hutch/broker.rb +24 -8
 - data/lib/hutch/config.rb +4 -0
 - data/lib/hutch/consumer.rb +10 -1
 - data/lib/hutch/message.rb +2 -4
 - data/lib/hutch/serializers/identity.rb +19 -0
 - data/lib/hutch/serializers/json.rb +22 -0
 - data/lib/hutch/version.rb +1 -1
 - data/lib/hutch/worker.rb +10 -6
 - data/spec/hutch/message_spec.rb +2 -2
 - data/spec/hutch/serializers/json_spec.rb +17 -0
 - data/spec/hutch/worker_spec.rb +3 -2
 - metadata +10 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c5b96423188a88e607bf694005618e1c13bc6ce1
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 97955f0060eea500cbd6cc49c3c393adccfaf8a6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d161d2cf60136e26356a18f7a6f552fd11361bce6258132ce9dc807d219290f1fa67fda7f801fb58cacd542c224a93b4941c473aaa4c5ee3b43446632ab03c96
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7d2c9d3f0524a9583e76c853823a1527a9d516d7a2cf368aa061412442930e09d5a2b7855c915d4ab3e1ca8c39b2a82f0a864a6e51d558a420e1a9efd3d96cc1
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,4 +1,29 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ## 0. 
     | 
| 
      
 1 
     | 
    
         
            +
            ## 0.19.0 — (unreleased)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ### Pluggable Serialisers
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Hutch now supports pluggable serialisers: see `Hutch::Serializer::JSON` for
         
     | 
| 
      
 6 
     | 
    
         
            +
            an example. Serialiser is configured via Hutch config as a Ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            class.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            Contributed by Dmitry Galinsky.
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ### multi_json Update
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Hutch now depends on multi_json `1.11.x`.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ### Bunny Update
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Bunny is updated to [2.2.0](http://blog.rubyrabbitmq.info/blog/2015/09/06/bunny-2-dot-2-0-is-released/).
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            ### More Bunny SSL Options
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            `:mq_tls_ca_certificates` and `:mq_verify_peer` options will now be passed on to Bunny as `:tls_ca_certificates` and `:verify_peer` respectively.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            Contributed by Kennon Ballou.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ## 0.18.0 — August 16th, 2015
         
     | 
| 
       2 
27 
     | 
    
         | 
| 
       3 
28 
     | 
    
         
             
            ### JRuby Support (Using March Hare)
         
     | 
| 
       4 
29 
     | 
    
         | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -289,6 +289,8 @@ Known configuration parameters are: 
     | 
|
| 
       289 
289 
     | 
    
         
             
             * `mq_tls`: should TLS be used? (default: `false`)
         
     | 
| 
       290 
290 
     | 
    
         
             
             * `mq_tls_cert`: path to client TLS certificate (public key)
         
     | 
| 
       291 
291 
     | 
    
         
             
             * `mq_tls_key`: path to client TLS private key
         
     | 
| 
      
 292 
     | 
    
         
            +
             * `mq_tls_ca_certificates`: array of paths to CA keys (if not specified to Hutch, will default to Bunny defaults which are system-dependent)
         
     | 
| 
      
 293 
     | 
    
         
            +
             * `mq_verify_peer`: should SSL certificate be verified? (default: `true`)
         
     | 
| 
       292 
294 
     | 
    
         
             
             * `require_paths`: array of paths to require
         
     | 
| 
       293 
295 
     | 
    
         
             
             * `autoload_rails`: should Hutch command line runner try to automatically load Rails environment files?
         
     | 
| 
       294 
296 
     | 
    
         
             
             * `daemonise`: should Hutch runner process daemonise?
         
     | 
    
        data/hutch.gemspec
    CHANGED
    
    | 
         @@ -6,10 +6,10 @@ Gem::Specification.new do |gem| 
     | 
|
| 
       6 
6 
     | 
    
         
             
                gem.add_runtime_dependency 'march_hare', '>= 2.11.0'
         
     | 
| 
       7 
7 
     | 
    
         
             
              else
         
     | 
| 
       8 
8 
     | 
    
         
             
                gem.platform = Gem::Platform::RUBY
         
     | 
| 
       9 
     | 
    
         
            -
                gem.add_runtime_dependency 'bunny', '>=  
     | 
| 
      
 9 
     | 
    
         
            +
                gem.add_runtime_dependency 'bunny', '>= 2.2.0'
         
     | 
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         
             
              gem.add_runtime_dependency 'carrot-top', '~> 0.0.7'
         
     | 
| 
       12 
     | 
    
         
            -
              gem.add_runtime_dependency 'multi_json', '~> 1. 
     | 
| 
      
 12 
     | 
    
         
            +
              gem.add_runtime_dependency 'multi_json', '~> 1.11.2'
         
     | 
| 
       13 
13 
     | 
    
         
             
              gem.add_runtime_dependency 'activesupport', '>= 3.0'
         
     | 
| 
       14 
14 
     | 
    
         
             
              gem.add_development_dependency 'rspec', '~> 3.0'
         
     | 
| 
       15 
15 
     | 
    
         
             
              gem.add_development_dependency 'simplecov', '~> 0.7.1'
         
     | 
    
        data/lib/hutch.rb
    CHANGED
    
    
    
        data/lib/hutch/broker.rb
    CHANGED
    
    | 
         @@ -195,19 +195,30 @@ module Hutch 
     | 
|
| 
       195 
195 
     | 
    
         
             
                  @channel.nack(delivery_tag, false, false)
         
     | 
| 
       196 
196 
     | 
    
         
             
                end
         
     | 
| 
       197 
197 
     | 
    
         | 
| 
       198 
     | 
    
         
            -
                def publish(routing_key, message, properties = {})
         
     | 
| 
      
 198 
     | 
    
         
            +
                def publish(routing_key, message, properties = {}, options = {})
         
     | 
| 
       199 
199 
     | 
    
         
             
                  ensure_connection!(routing_key, message)
         
     | 
| 
       200 
200 
     | 
    
         | 
| 
      
 201 
     | 
    
         
            +
                  serializer = options[:serializer] || @config[:serializer]
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
       201 
203 
     | 
    
         
             
                  non_overridable_properties = {
         
     | 
| 
       202 
     | 
    
         
            -
                    routing_key: 
     | 
| 
       203 
     | 
    
         
            -
                    timestamp: 
     | 
| 
       204 
     | 
    
         
            -
                    content_type:  
     | 
| 
      
 204 
     | 
    
         
            +
                    routing_key:  routing_key,
         
     | 
| 
      
 205 
     | 
    
         
            +
                    timestamp:    @connection.current_timestamp,
         
     | 
| 
      
 206 
     | 
    
         
            +
                    content_type: serializer.content_type,
         
     | 
| 
      
 207 
     | 
    
         
            +
                  }
         
     | 
| 
      
 208 
     | 
    
         
            +
                  properties[:message_id]   ||= generate_id
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
                  payload = serializer.encode(message)
         
     | 
| 
      
 211 
     | 
    
         
            +
                  logger.info {
         
     | 
| 
      
 212 
     | 
    
         
            +
                    spec =
         
     | 
| 
      
 213 
     | 
    
         
            +
                      if serializer.binary?
         
     | 
| 
      
 214 
     | 
    
         
            +
                        "#{payload.bytesize} bytes message"
         
     | 
| 
      
 215 
     | 
    
         
            +
                      else
         
     | 
| 
      
 216 
     | 
    
         
            +
                        "message '#{payload}'"
         
     | 
| 
      
 217 
     | 
    
         
            +
                      end
         
     | 
| 
      
 218 
     | 
    
         
            +
                    "publishing #{spec} to #{routing_key}"
         
     | 
| 
       205 
219 
     | 
    
         
             
                  }
         
     | 
| 
       206 
     | 
    
         
            -
                  properties[:message_id] ||= generate_id
         
     | 
| 
       207 
220 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
                   
     | 
| 
       209 
     | 
    
         
            -
                  logger.info("publishing message '#{json}' to #{routing_key}")
         
     | 
| 
       210 
     | 
    
         
            -
                  response = @exchange.publish(json, {persistent: true}.
         
     | 
| 
      
 221 
     | 
    
         
            +
                  response = @exchange.publish(payload, {persistent: true}.
         
     | 
| 
       211 
222 
     | 
    
         
             
                    merge(properties).
         
     | 
| 
       212 
223 
     | 
    
         
             
                    merge(global_properties).
         
     | 
| 
       213 
224 
     | 
    
         
             
                    merge(non_overridable_properties))
         
     | 
| 
         @@ -269,6 +280,10 @@ module Hutch 
     | 
|
| 
       269 
280 
     | 
    
         
             
                    params[:tls]                = @config[:mq_tls]
         
     | 
| 
       270 
281 
     | 
    
         
             
                    params[:tls_key]            = @config[:mq_tls_key]
         
     | 
| 
       271 
282 
     | 
    
         
             
                    params[:tls_cert]           = @config[:mq_tls_cert]
         
     | 
| 
      
 283 
     | 
    
         
            +
                    params[:verify_peer]        = @config[:mq_verify_peer]
         
     | 
| 
      
 284 
     | 
    
         
            +
                    if @config[:mq_tls_ca_certificates]
         
     | 
| 
      
 285 
     | 
    
         
            +
                      params[:tls_ca_certificates] = @config[:mq_tls_ca_certificates]
         
     | 
| 
      
 286 
     | 
    
         
            +
                    end
         
     | 
| 
       272 
287 
     | 
    
         
             
                    params[:heartbeat]          = @config[:heartbeat]
         
     | 
| 
       273 
288 
     | 
    
         
             
                    params[:connection_timeout] = @config[:connection_timeout]
         
     | 
| 
       274 
289 
     | 
    
         
             
                    params[:read_timeout]       = @config[:read_timeout]
         
     | 
| 
         @@ -354,5 +369,6 @@ module Hutch 
     | 
|
| 
       354 
369 
     | 
    
         
             
                def global_properties
         
     | 
| 
       355 
370 
     | 
    
         
             
                  Hutch.global_properties.respond_to?(:call) ? Hutch.global_properties.call : Hutch.global_properties
         
     | 
| 
       356 
371 
     | 
    
         
             
                end
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
       357 
373 
     | 
    
         
             
              end
         
     | 
| 
       358 
374 
     | 
    
         
             
            end
         
     | 
    
        data/lib/hutch/config.rb
    CHANGED
    
    | 
         @@ -17,6 +17,8 @@ module Hutch 
     | 
|
| 
       17 
17 
     | 
    
         
             
                    mq_tls: false,
         
     | 
| 
       18 
18 
     | 
    
         
             
                    mq_tls_cert: nil,
         
     | 
| 
       19 
19 
     | 
    
         
             
                    mq_tls_key: nil,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    mq_tls_ca_certificates: nil,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    mq_verify_peer: true,
         
     | 
| 
       20 
22 
     | 
    
         
             
                    mq_username: 'guest',
         
     | 
| 
       21 
23 
     | 
    
         
             
                    mq_password: 'guest',
         
     | 
| 
       22 
24 
     | 
    
         
             
                    mq_api_host: 'localhost',
         
     | 
| 
         @@ -53,6 +55,8 @@ module Hutch 
     | 
|
| 
       53 
55 
     | 
    
         
             
                    client_logger: nil,
         
     | 
| 
       54 
56 
     | 
    
         | 
| 
       55 
57 
     | 
    
         
             
                    consumer_pool_size: 1,
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                    serializer: Hutch::Serializers::JSON,
         
     | 
| 
       56 
60 
     | 
    
         
             
                  }.merge(params)
         
     | 
| 
       57 
61 
     | 
    
         
             
                end
         
     | 
| 
       58 
62 
     | 
    
         | 
    
        data/lib/hutch/consumer.rb
    CHANGED
    
    | 
         @@ -19,7 +19,7 @@ module Hutch 
     | 
|
| 
       19 
19 
     | 
    
         
             
                def requeue!
         
     | 
| 
       20 
20 
     | 
    
         
             
                  broker.requeue(delivery_info.delivery_tag)
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       23 
23 
     | 
    
         
             
                def logger
         
     | 
| 
       24 
24 
     | 
    
         
             
                  Hutch::Logging.logger
         
     | 
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
         @@ -41,6 +41,11 @@ module Hutch 
     | 
|
| 
       41 
41 
     | 
    
         
             
                    @arguments = arguments
         
     | 
| 
       42 
42 
     | 
    
         
             
                  end
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
      
 44 
     | 
    
         
            +
                  # Set custom serializer class, override global value
         
     | 
| 
      
 45 
     | 
    
         
            +
                  def serializer(name)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @serializer = name
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
       44 
49 
     | 
    
         
             
                  # The RabbitMQ queue name for the consumer. This is derived from the
         
     | 
| 
       45 
50 
     | 
    
         
             
                  # fully-qualified class name. Module separators are replaced with single
         
     | 
| 
       46 
51 
     | 
    
         
             
                  # colons, camelcased class names are converted to snake case.
         
     | 
| 
         @@ -60,6 +65,10 @@ module Hutch 
     | 
|
| 
       60 
65 
     | 
    
         
             
                  def routing_keys
         
     | 
| 
       61 
66 
     | 
    
         
             
                    @routing_keys ||= Set.new
         
     | 
| 
       62 
67 
     | 
    
         
             
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  def get_serializer
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @serializer
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
       63 
72 
     | 
    
         
             
                end
         
     | 
| 
       64 
73 
     | 
    
         
             
              end
         
     | 
| 
       65 
74 
     | 
    
         
             
            end
         
     | 
    
        data/lib/hutch/message.rb
    CHANGED
    
    | 
         @@ -1,6 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'multi_json'
         
     | 
| 
       2 
1 
     | 
    
         
             
            require 'forwardable'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'active_support/core_ext/hash/indifferent_access'
         
     | 
| 
       4 
2 
     | 
    
         | 
| 
       5 
3 
     | 
    
         
             
            module Hutch
         
     | 
| 
       6 
4 
     | 
    
         
             
              class Message
         
     | 
| 
         @@ -8,11 +6,11 @@ module Hutch 
     | 
|
| 
       8 
6 
     | 
    
         | 
| 
       9 
7 
     | 
    
         
             
                attr_reader :delivery_info, :properties, :payload
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                def initialize(delivery_info, properties, payload)
         
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(delivery_info, properties, payload, serializer)
         
     | 
| 
       12 
10 
     | 
    
         
             
                  @delivery_info = delivery_info
         
     | 
| 
       13 
11 
     | 
    
         
             
                  @properties    = properties
         
     | 
| 
       14 
12 
     | 
    
         
             
                  @payload       = payload
         
     | 
| 
       15 
     | 
    
         
            -
                  @body          =  
     | 
| 
      
 13 
     | 
    
         
            +
                  @body          = serializer.decode(payload)
         
     | 
| 
       16 
14 
     | 
    
         
             
                end
         
     | 
| 
       17 
15 
     | 
    
         | 
| 
       18 
16 
     | 
    
         
             
                def_delegator :@body, :[]
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Hutch
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Serializers
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Identity
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def self.encode(payload)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    payload
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def self.decode(payload)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    payload
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def self.binary? ; false ; end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def self.content_type ; nil ; end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'multi_json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'active_support/core_ext/hash/indifferent_access'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Hutch
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Serializers
         
     | 
| 
      
 6 
     | 
    
         
            +
                class JSON
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  def self.encode(payload)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    ::JSON.dump(payload)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def self.decode(payload)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ::MultiJson.load(payload).with_indifferent_access
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def self.binary? ; false ; end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def self.content_type ; 'application/json' ; end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/hutch/version.rb
    CHANGED
    
    
    
        data/lib/hutch/worker.rb
    CHANGED
    
    | 
         @@ -102,14 +102,18 @@ module Hutch 
     | 
|
| 
       102 
102 
     | 
    
         
             
                # Called internally when a new messages comes in from RabbitMQ. Responsible
         
     | 
| 
       103 
103 
     | 
    
         
             
                # for wrapping up the message and passing it to the consumer.
         
     | 
| 
       104 
104 
     | 
    
         
             
                def handle_message(consumer, delivery_info, properties, payload)
         
     | 
| 
       105 
     | 
    
         
            -
                  logger.info("message(#{properties.message_id || '-'}): " +
         
     | 
| 
       106 
     | 
    
         
            -
                              "routing key: #{delivery_info.routing_key}, " +
         
     | 
| 
       107 
     | 
    
         
            -
                              "consumer: #{consumer}, " +
         
     | 
| 
       108 
     | 
    
         
            -
                              "payload: #{payload}")
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
105 
     | 
    
         
             
                  broker = @broker
         
     | 
| 
       111 
106 
     | 
    
         
             
                  begin
         
     | 
| 
       112 
     | 
    
         
            -
                     
     | 
| 
      
 107 
     | 
    
         
            +
                    serializer = consumer.get_serializer || Hutch::Config[:serializer]
         
     | 
| 
      
 108 
     | 
    
         
            +
                    logger.info {
         
     | 
| 
      
 109 
     | 
    
         
            +
                      spec   = serializer.binary? ? "#{payload.bytesize} bytes" : "#{payload}"
         
     | 
| 
      
 110 
     | 
    
         
            +
                      "message(#{properties.message_id || '-'}): " +
         
     | 
| 
      
 111 
     | 
    
         
            +
                      "routing key: #{delivery_info.routing_key}, " +
         
     | 
| 
      
 112 
     | 
    
         
            +
                      "consumer: #{consumer}, " +
         
     | 
| 
      
 113 
     | 
    
         
            +
                      "payload: #{spec}"
         
     | 
| 
      
 114 
     | 
    
         
            +
                    }
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                    message = Message.new(delivery_info, properties, payload, serializer)
         
     | 
| 
       113 
117 
     | 
    
         
             
                    consumer_instance = consumer.new.tap { |c| c.broker, c.delivery_info = @broker, delivery_info }
         
     | 
| 
       114 
118 
     | 
    
         
             
                    with_tracing(consumer_instance).handle(message)
         
     | 
| 
       115 
119 
     | 
    
         
             
                    broker.ack(delivery_info.delivery_tag)
         
     | 
    
        data/spec/hutch/message_spec.rb
    CHANGED
    
    | 
         @@ -2,10 +2,10 @@ require 'hutch/message' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe Hutch::Message do
         
     | 
| 
       4 
4 
     | 
    
         
             
              let(:delivery_info) { double('Delivery Info') }
         
     | 
| 
       5 
     | 
    
         
            -
              let(:props) { double('Properties') }
         
     | 
| 
      
 5 
     | 
    
         
            +
              let(:props) { double('Properties', content_type: "application/json") }
         
     | 
| 
       6 
6 
     | 
    
         
             
              let(:body) {{ foo: 'bar' }.with_indifferent_access}
         
     | 
| 
       7 
7 
     | 
    
         
             
              let(:json_body) { MultiJson.dump(body) }
         
     | 
| 
       8 
     | 
    
         
            -
              subject(:message) { Hutch::Message.new(delivery_info, props, json_body) }
         
     | 
| 
      
 8 
     | 
    
         
            +
              subject(:message) { Hutch::Message.new(delivery_info, props, json_body, Hutch::Config[:serializer]) }
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              describe '#body' do
         
     | 
| 
       11 
11 
     | 
    
         
             
                subject { super().body }
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Hutch::Serializers::JSON do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let(:subject) { described_class }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              it "encode/decode" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                payload = { a: 1, b: 2 }
         
     | 
| 
      
 8 
     | 
    
         
            +
                encoded = subject.encode(payload)
         
     | 
| 
      
 9 
     | 
    
         
            +
                decoded = subject.decode(encoded)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                expect(encoded).to eq "{\"a\":1,\"b\":2}"
         
     | 
| 
      
 12 
     | 
    
         
            +
                expect(decoded).to eq("a" => 1, "b" => 2)
         
     | 
| 
      
 13 
     | 
    
         
            +
                expect(decoded[:a]).to eq 1
         
     | 
| 
      
 14 
     | 
    
         
            +
                expect(decoded[:b]).to eq 2
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/hutch/worker_spec.rb
    CHANGED
    
    | 
         @@ -3,7 +3,8 @@ require 'hutch/worker' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe Hutch::Worker do
         
     | 
| 
       5 
5 
     | 
    
         
             
              let(:consumer) { double('Consumer', routing_keys: %w( a b c ),
         
     | 
| 
       6 
     | 
    
         
            -
                                      get_queue_name: 'consumer', get_arguments: {} 
     | 
| 
      
 6 
     | 
    
         
            +
                                      get_queue_name: 'consumer', get_arguments: {},
         
     | 
| 
      
 7 
     | 
    
         
            +
                                      get_serializer: nil) }
         
     | 
| 
       7 
8 
     | 
    
         
             
              let(:consumers) { [consumer, double('Consumer')] }
         
     | 
| 
       8 
9 
     | 
    
         
             
              let(:broker) { Hutch::Broker.new }
         
     | 
| 
       9 
10 
     | 
    
         
             
              subject(:worker) { Hutch::Worker.new(broker, consumers) }
         
     | 
| 
         @@ -43,7 +44,7 @@ describe Hutch::Worker do 
     | 
|
| 
       43 
44 
     | 
    
         
             
                let(:consumer_instance) { double('Consumer instance') }
         
     | 
| 
       44 
45 
     | 
    
         
             
                let(:delivery_info) { double('Delivery Info', routing_key: '',
         
     | 
| 
       45 
46 
     | 
    
         
             
                                             delivery_tag: 'dt') }
         
     | 
| 
       46 
     | 
    
         
            -
                let(:properties) { double('Properties', message_id: nil) }
         
     | 
| 
      
 47 
     | 
    
         
            +
                let(:properties) { double('Properties', message_id: nil, content_type: "application/json") }
         
     | 
| 
       47 
48 
     | 
    
         
             
                before { allow(consumer).to receive_messages(new: consumer_instance) }
         
     | 
| 
       48 
49 
     | 
    
         
             
                before { allow(broker).to receive(:ack) }
         
     | 
| 
       49 
50 
     | 
    
         
             
                before { allow(broker).to receive(:nack) }
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: hutch
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.19.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Harry Marr
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-09-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bunny
         
     | 
| 
         @@ -16,14 +16,14 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - ">="
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version:  
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
24 
     | 
    
         
             
                - - ">="
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version:  
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: carrot-top
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -44,14 +44,14 @@ dependencies: 
     | 
|
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
45 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
     | 
    
         
            -
                    version:  
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 1.11.2
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
52 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
     | 
    
         
            -
                    version:  
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 1.11.2
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
56 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -132,6 +132,8 @@ files: 
     | 
|
| 
       132 
132 
     | 
    
         
             
            - lib/hutch/exceptions.rb
         
     | 
| 
       133 
133 
     | 
    
         
             
            - lib/hutch/logging.rb
         
     | 
| 
       134 
134 
     | 
    
         
             
            - lib/hutch/message.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
            - lib/hutch/serializers/identity.rb
         
     | 
| 
      
 136 
     | 
    
         
            +
            - lib/hutch/serializers/json.rb
         
     | 
| 
       135 
137 
     | 
    
         
             
            - lib/hutch/tracers.rb
         
     | 
| 
       136 
138 
     | 
    
         
             
            - lib/hutch/tracers/newrelic.rb
         
     | 
| 
       137 
139 
     | 
    
         
             
            - lib/hutch/tracers/null_tracer.rb
         
     | 
| 
         @@ -147,6 +149,7 @@ files: 
     | 
|
| 
       147 
149 
     | 
    
         
             
            - spec/hutch/error_handlers/sentry_spec.rb
         
     | 
| 
       148 
150 
     | 
    
         
             
            - spec/hutch/logger_spec.rb
         
     | 
| 
       149 
151 
     | 
    
         
             
            - spec/hutch/message_spec.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - spec/hutch/serializers/json_spec.rb
         
     | 
| 
       150 
153 
     | 
    
         
             
            - spec/hutch/worker_spec.rb
         
     | 
| 
       151 
154 
     | 
    
         
             
            - spec/hutch_spec.rb
         
     | 
| 
       152 
155 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
         @@ -185,6 +188,7 @@ test_files: 
     | 
|
| 
       185 
188 
     | 
    
         
             
            - spec/hutch/error_handlers/sentry_spec.rb
         
     | 
| 
       186 
189 
     | 
    
         
             
            - spec/hutch/logger_spec.rb
         
     | 
| 
       187 
190 
     | 
    
         
             
            - spec/hutch/message_spec.rb
         
     | 
| 
      
 191 
     | 
    
         
            +
            - spec/hutch/serializers/json_spec.rb
         
     | 
| 
       188 
192 
     | 
    
         
             
            - spec/hutch/worker_spec.rb
         
     | 
| 
       189 
193 
     | 
    
         
             
            - spec/hutch_spec.rb
         
     | 
| 
       190 
194 
     | 
    
         
             
            - spec/spec_helper.rb
         
     |