emque-producing 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/README.md +1 -2
- data/lib/emque/producing/configuration.rb +16 -0
- data/lib/emque/producing/message/message.rb +37 -1
- data/lib/emque/producing/version.rb +1 -1
- data/spec/producing/configuration_spec.rb +30 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34b5dbcad9ac87bf9f2e32837ae1b0df86106cd2
|
4
|
+
data.tar.gz: c1d60b701ae51322e96dfbb28a5cebdc90b66cc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 195424f83e156b10c86730e3e3f0936169e830ba244ad673f5bb524f61c5a064bea1d347f9f922dff75eefaddba2294abb6f6bc2d8796e19fd068fa0172a305e
|
7
|
+
data.tar.gz: ded8c20b8536c796da590660914f6f7a76f8b17088c14645906ca7ff77db98538a9944e6014acba4ccb4fdceed490f88b1bd7eda686c0540c4501399f9fcb7e6
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
[
|
2
|
-
teamsnap/emque-producing](https://www.codeship.io/projects/2ca7fd90-1785-0132-5f9d-7ab39a5c8237/status)](https://www.codeship.io/projects/34115)
|
1
|
+
[![Build Status](https://travis-ci.org/emque/emque-producing.png)](https://travis-ci.org/emque/emque-producing)
|
3
2
|
|
4
3
|
# Emque Producing
|
5
4
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Emque
|
2
2
|
module Producing
|
3
|
+
ConfigurationError = Class.new(StandardError)
|
4
|
+
|
3
5
|
class Configuration
|
4
6
|
attr_accessor :app_name
|
5
7
|
attr_accessor :publishing_adapter
|
@@ -8,6 +10,7 @@ module Emque
|
|
8
10
|
attr_accessor :publish_messages
|
9
11
|
attr_reader :rabbitmq_options
|
10
12
|
attr_accessor :ignored_exceptions
|
13
|
+
attr_reader :middleware
|
11
14
|
|
12
15
|
def initialize
|
13
16
|
@app_name = ""
|
@@ -19,6 +22,19 @@ module Emque
|
|
19
22
|
:url => "amqp://guest:guest@localhost:5672"
|
20
23
|
}
|
21
24
|
@ignored_exceptions = [Emque::Producing::Message::MessagesNotSentError]
|
25
|
+
@middleware = []
|
26
|
+
end
|
27
|
+
|
28
|
+
def use(callable)
|
29
|
+
unless callable.respond_to?(:call) and callable.arity == 1
|
30
|
+
raise(
|
31
|
+
ConfigurationError,
|
32
|
+
"#{self.class.name}#use must receive a callable object with an " +
|
33
|
+
"arity of one."
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
@middleware << callable
|
22
38
|
end
|
23
39
|
end
|
24
40
|
end
|
@@ -20,6 +20,10 @@ module Emque
|
|
20
20
|
@message_type = name
|
21
21
|
end
|
22
22
|
|
23
|
+
def middleware
|
24
|
+
@middleware || []
|
25
|
+
end
|
26
|
+
|
23
27
|
def read_message_type
|
24
28
|
@message_type
|
25
29
|
end
|
@@ -53,6 +57,19 @@ module Emque
|
|
53
57
|
def private_attrs
|
54
58
|
Array(@private_attrs)
|
55
59
|
end
|
60
|
+
|
61
|
+
def use(callable)
|
62
|
+
unless callable.respond_to?(:call) and callable.arity == 1
|
63
|
+
raise(
|
64
|
+
ConfigurationError,
|
65
|
+
"#{self.class.name}#use must receive a callable object with an " +
|
66
|
+
"arity of one."
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
@middleware ||= []
|
71
|
+
@middleware << callable
|
72
|
+
end
|
56
73
|
end
|
57
74
|
|
58
75
|
def self.included(base)
|
@@ -115,7 +132,8 @@ module Emque
|
|
115
132
|
if valid?
|
116
133
|
log "valid...", true
|
117
134
|
if Emque::Producing.configuration.publish_messages
|
118
|
-
|
135
|
+
message = process_middleware(to_json)
|
136
|
+
sent = publisher.publish(topic, message_type, message, partition_key)
|
119
137
|
log "sent #{sent}"
|
120
138
|
raise MessagesNotSentError.new unless sent
|
121
139
|
end
|
@@ -166,6 +184,24 @@ module Emque
|
|
166
184
|
end
|
167
185
|
end
|
168
186
|
|
187
|
+
def middleware
|
188
|
+
self.class.middleware + Emque::Producing.configuration.middleware
|
189
|
+
end
|
190
|
+
|
191
|
+
def middleware?
|
192
|
+
middleware.count > 0
|
193
|
+
end
|
194
|
+
|
195
|
+
def process_middleware(str)
|
196
|
+
if middleware?
|
197
|
+
middleware.inject(str) { |compiled, callable|
|
198
|
+
callable.call(compiled)
|
199
|
+
}
|
200
|
+
else
|
201
|
+
str
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
169
205
|
def public_attributes
|
170
206
|
public = self.class.attribute_set.select do |attr|
|
171
207
|
attr && !self.class.private_attrs.include?(attr.name)
|
@@ -18,4 +18,34 @@ describe Emque::Producing::Configuration do
|
|
18
18
|
subject.rabbitmq_options = {:requires_confirmation => false}
|
19
19
|
}.to raise_error
|
20
20
|
end
|
21
|
+
|
22
|
+
describe "middleware" do
|
23
|
+
it "does not allow direct assignment" do
|
24
|
+
expect {
|
25
|
+
subject.middleware = proc { |_| true }
|
26
|
+
}.to raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
it "#use raises a ConfigurationError if the first arg is not callable" do
|
30
|
+
expect {
|
31
|
+
subject.use("not callable")
|
32
|
+
}.to raise_error Emque::Producing::ConfigurationError
|
33
|
+
end
|
34
|
+
|
35
|
+
it "#use raises a ConfigurationError if the first arg's arity is not 1" do
|
36
|
+
expect {
|
37
|
+
subject.use(proc { true })
|
38
|
+
}.to raise_error Emque::Producing::ConfigurationError
|
39
|
+
|
40
|
+
expect {
|
41
|
+
subject.use(proc { |_, _| true })
|
42
|
+
}.to raise_error Emque::Producing::ConfigurationError
|
43
|
+
end
|
44
|
+
|
45
|
+
it "#use adds a valid callable object to the middleware stack" do
|
46
|
+
expect(subject.middleware.count).to eq 0
|
47
|
+
subject.use(proc { |_| true })
|
48
|
+
expect(subject.middleware.count).to eq 1
|
49
|
+
end
|
50
|
+
end
|
21
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emque-producing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emily Dobervich
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oj
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
175
|
rubyforge_project:
|
176
|
-
rubygems_version: 2.4.5
|
176
|
+
rubygems_version: 2.4.5.1
|
177
177
|
signing_key:
|
178
178
|
specification_version: 4
|
179
179
|
summary: Define and send messages to a variety of message brokers
|
@@ -183,3 +183,4 @@ test_files:
|
|
183
183
|
- spec/producing/message/message_spec.rb
|
184
184
|
- spec/producing/producing_spec.rb
|
185
185
|
- spec/spec_helper.rb
|
186
|
+
has_rdoc:
|