emque-consuming 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65e088e10ca64f1042f808f7778f6cc2a9db8f9a
4
- data.tar.gz: ea6d96b7f4ae176e11bcda3642d4b5dc13dfdf32
3
+ metadata.gz: cbfdb1668073d8ecea19003f969f6531cadb1999
4
+ data.tar.gz: 4865e9b58dfbef1d4ba8c2350ea06b330a32a35b
5
5
  SHA512:
6
- metadata.gz: 31a8e7909481e6877a8c74d042635afd405811a56357092741d97ea7009033beded878bfc6a5d729cd9de745638b49c96bca4d3e386c2e03433049eb3e729ead
7
- data.tar.gz: 5d490c14d93b335d815205d226f92abf659645457a40c5f190db982b281ad119441bbc7b705c50ab0725652722c7127cf1f5cd78c787645c1a103b1e2b8b3f4a
6
+ metadata.gz: 9c638c1482b1d2dc85600e4da261a28caf96f9305363c4701421710e31bf621d03252590c12e4b9051c470701d73e7579f8e5d87f7984bf221a48bec9fd150dc
7
+ data.tar.gz: a2c6a9cdf38b439fe5f0e40e5e5fda6aa8d1a974d336da70147d6d65b6bd6b4ac27e13b44601ffb4b73f41e64979c6d981c62a881dad9549c67c7dbcc3396362
@@ -1,6 +1,8 @@
1
1
  module Emque
2
2
  module Consuming
3
3
  class Router
4
+ ConfigurationError = Class.new(StandardError)
5
+
4
6
  def initialize
5
7
  self.mappings = {}
6
8
  end
@@ -22,6 +24,20 @@ module Emque
22
24
  if method
23
25
  consumer = mapping.consumer
24
26
 
27
+ if mapping.middleware?
28
+ message = message.with(
29
+ :values =>
30
+ Oj.load(
31
+ mapping
32
+ .middleware
33
+ .inject(message.original) { |compiled, callable|
34
+ callable.call(compiled)
35
+ },
36
+ :symbol_keys => true
37
+ )
38
+ )
39
+ end
40
+
25
41
  consumer.new.consume(method, message)
26
42
  end
27
43
  end
@@ -44,14 +60,16 @@ module Emque
44
60
  attr_accessor :mappings
45
61
 
46
62
  class Mapping
47
- attr_reader :consumer, :topic, :workers
63
+ attr_reader :consumer, :middleware, :topic, :workers
48
64
 
49
65
  def initialize(mapping, &block)
50
66
  self.topic = mapping.keys.first
51
67
  self.workers = mapping.fetch(:workers, 1)
52
68
  self.consumer = mapping.values.first
53
69
  self.mapping = {}
70
+ self.middleware = []
54
71
 
72
+ mapping.fetch(:middleware, []).map(&:use)
55
73
  self.instance_eval(&block)
56
74
  end
57
75
 
@@ -59,14 +77,30 @@ module Emque
59
77
  mapping.merge!(map)
60
78
  end
61
79
 
80
+ def middleware?
81
+ middleware.count > 0
82
+ end
83
+
62
84
  def route(type)
63
85
  mapping[type]
64
86
  end
65
87
 
88
+ def use(callable)
89
+ unless callable.respond_to?(:call) and callable.arity == 1
90
+ raise(
91
+ ConfigurationError,
92
+ "#{self.class.name}#use must receive a callable object with an " +
93
+ "arity of one."
94
+ )
95
+ end
96
+
97
+ middleware << callable
98
+ end
99
+
66
100
  private
67
101
 
68
102
  attr_accessor :mapping
69
- attr_writer :consumer, :topic, :workers
103
+ attr_writer :consumer, :middleware, :topic, :workers
70
104
  end
71
105
  end
72
106
  end
@@ -1,5 +1,5 @@
1
1
  module Emque
2
2
  module Consuming
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emque-consuming
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Williams
@@ -287,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
287
  version: '0'
288
288
  requirements: []
289
289
  rubyforge_project:
290
- rubygems_version: 2.4.5
290
+ rubygems_version: 2.4.5.1
291
291
  signing_key:
292
292
  specification_version: 4
293
293
  summary: Microservices framework for Ruby
@@ -307,3 +307,4 @@ test_files:
307
307
  - spec/router_spec.rb
308
308
  - spec/runner_spec.rb
309
309
  - spec/spec_helper.rb
310
+ has_rdoc: