emque-consuming 1.0.0 → 1.1.0

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: 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: