jackhammer 1.1.0 → 1.2.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/.dependabot/config.yml +18 -0
- data/Gemfile.lock +12 -12
- data/README.md +21 -0
- data/lib/jackhammer.rb +1 -0
- data/lib/jackhammer/configuration.rb +1 -0
- data/lib/jackhammer/queue.rb +6 -4
- data/lib/jackhammer/queue_name.rb +13 -0
- data/lib/jackhammer/topic.rb +32 -6
- data/lib/jackhammer/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b05bbadd40bdcdbf69d7ed079f5da3b5ef7494e5cfab42288b0e114aa1effb7c
|
4
|
+
data.tar.gz: 4db8060a85601dae226889a134531c48bf4b2b389b399f9bf782985f6909dd03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3685542942aa0dcb6568bfa408a44015eeeade76268f610bd7a119feb8d6092e6c588dc846c7699325646ca86e6e242c7935b5eac1efa2e6334bdef1bfafcdd2
|
7
|
+
data.tar.gz: 16300121a91938775bf6f4a6e7e89cae0a4764653fc64e4e92f8c7a655be7e2953ff8a473a95f8d5205909150ac2226a641c7c687b06f30abff8e412c87a919e
|
@@ -0,0 +1,18 @@
|
|
1
|
+
version: 1
|
2
|
+
|
3
|
+
update_configs:
|
4
|
+
- package_manager: "ruby:bundler"
|
5
|
+
directory: "/"
|
6
|
+
update_schedule: "monthly"
|
7
|
+
commit_message:
|
8
|
+
prefix: "[dependabot]"
|
9
|
+
allowed_updates:
|
10
|
+
- match:
|
11
|
+
update_type: "all"
|
12
|
+
automerged_updates:
|
13
|
+
- match:
|
14
|
+
dependency_type: "development"
|
15
|
+
update_type: "all"
|
16
|
+
- match:
|
17
|
+
dependency_type: "production"
|
18
|
+
update_type: "all"
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
jackhammer (1.
|
4
|
+
jackhammer (1.2.0)
|
5
5
|
bunny (~> 2.14)
|
6
6
|
|
7
7
|
GEM
|
@@ -13,11 +13,11 @@ GEM
|
|
13
13
|
amq-protocol (~> 2.3, >= 2.3.0)
|
14
14
|
bunny-mock (1.7.0)
|
15
15
|
bunny (>= 1.7)
|
16
|
-
byebug (11.
|
16
|
+
byebug (11.1.1)
|
17
17
|
diff-lcs (1.3)
|
18
18
|
jaro_winkler (1.5.4)
|
19
19
|
parallel (1.19.1)
|
20
|
-
parser (2.
|
20
|
+
parser (2.7.0.2)
|
21
21
|
ast (~> 2.4.0)
|
22
22
|
rainbow (3.0.0)
|
23
23
|
rake (13.0.1)
|
@@ -25,26 +25,26 @@ GEM
|
|
25
25
|
rspec-core (~> 3.9.0)
|
26
26
|
rspec-expectations (~> 3.9.0)
|
27
27
|
rspec-mocks (~> 3.9.0)
|
28
|
-
rspec-core (3.9.
|
29
|
-
rspec-support (~> 3.9.
|
28
|
+
rspec-core (3.9.1)
|
29
|
+
rspec-support (~> 3.9.1)
|
30
30
|
rspec-expectations (3.9.0)
|
31
31
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
32
|
rspec-support (~> 3.9.0)
|
33
|
-
rspec-mocks (3.9.
|
33
|
+
rspec-mocks (3.9.1)
|
34
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
35
|
rspec-support (~> 3.9.0)
|
36
|
-
rspec-support (3.9.
|
37
|
-
rubocop (0.
|
36
|
+
rspec-support (3.9.2)
|
37
|
+
rubocop (0.79.0)
|
38
38
|
jaro_winkler (~> 1.5.1)
|
39
39
|
parallel (~> 1.10)
|
40
|
-
parser (>= 2.
|
40
|
+
parser (>= 2.7.0.1)
|
41
41
|
rainbow (>= 2.2.2, < 4.0)
|
42
42
|
ruby-progressbar (~> 1.7)
|
43
43
|
unicode-display_width (>= 1.4.0, < 1.7)
|
44
|
-
rubocop-performance (1.5.
|
44
|
+
rubocop-performance (1.5.2)
|
45
45
|
rubocop (>= 0.71.0)
|
46
46
|
ruby-progressbar (1.10.1)
|
47
|
-
unicode-display_width (1.6.
|
47
|
+
unicode-display_width (1.6.1)
|
48
48
|
|
49
49
|
PLATFORMS
|
50
50
|
ruby
|
@@ -60,4 +60,4 @@ DEPENDENCIES
|
|
60
60
|
rubocop-performance
|
61
61
|
|
62
62
|
BUNDLED WITH
|
63
|
-
2.
|
63
|
+
2.1.4
|
data/README.md
CHANGED
@@ -36,12 +36,32 @@ default: &default
|
|
36
36
|
auto_delete: false
|
37
37
|
durable: true
|
38
38
|
queues:
|
39
|
+
# queue_name => options pairs
|
39
40
|
americas.south:
|
40
41
|
auto_delete: true
|
41
42
|
durable: false
|
42
43
|
exclusive: false
|
43
44
|
handler: "MyApp::SouthAmericaHandler"
|
44
45
|
routing_key: "americas.south.#"
|
46
|
+
americas.north:
|
47
|
+
auto_delete: true
|
48
|
+
durable: false
|
49
|
+
exclusive: false
|
50
|
+
handler: "MyApp::NorthAmericaHandler"
|
51
|
+
routing_key: "americas.north.#"
|
52
|
+
# or an array
|
53
|
+
- queue_name: americas.south
|
54
|
+
auto_delete: true
|
55
|
+
durable: false
|
56
|
+
exclusive: false
|
57
|
+
handler: "MyApp::SouthAmericaHandler"
|
58
|
+
routing_key: "americas.south.#"
|
59
|
+
# queue_name can be skipped and auto generated from routing key
|
60
|
+
- auto_delete: true
|
61
|
+
durable: false
|
62
|
+
exclusive: false
|
63
|
+
handler: "MyApp::SouthAmericaHandler"
|
64
|
+
routing_key: "americas.south.#"
|
45
65
|
|
46
66
|
development:
|
47
67
|
<<: *default
|
@@ -70,6 +90,7 @@ module MyApp
|
|
70
90
|
config.logger = Logger.new(IO::NULL)
|
71
91
|
config.publish_options = { mandatory: true, persistent: true }
|
72
92
|
config.yaml_config = "config/jackhammer.yml"
|
93
|
+
config.app_name = "my_app"
|
73
94
|
end
|
74
95
|
end
|
75
96
|
end
|
data/lib/jackhammer.rb
CHANGED
@@ -7,6 +7,7 @@ require 'jackhammer/exceptions'
|
|
7
7
|
require 'jackhammer/log'
|
8
8
|
require 'jackhammer/configuration'
|
9
9
|
require 'jackhammer/message_receiver'
|
10
|
+
require 'jackhammer/queue_name'
|
10
11
|
require 'jackhammer/queue'
|
11
12
|
require 'jackhammer/topic'
|
12
13
|
require 'jackhammer/topic_manager'
|
data/lib/jackhammer/queue.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
module Jackhammer
|
2
2
|
class Queue
|
3
|
-
|
3
|
+
attr_reader :queue, :handler_object
|
4
|
+
|
5
|
+
def initialize(topic:, queue:, handler:, routing_key:)
|
4
6
|
@topic = topic
|
5
7
|
@queue = queue
|
6
|
-
@queue.bind @topic, routing_key:
|
8
|
+
@queue.bind @topic, routing_key: routing_key
|
7
9
|
@handler_object = handler
|
8
10
|
end
|
9
11
|
|
10
12
|
def subscribe
|
11
|
-
|
13
|
+
queue.subscribe do |delivery_info, properties, content|
|
12
14
|
Log.info { [delivery_info.inspect, properties.inspect].join(' || ') }
|
13
15
|
Log.debug { content }
|
14
|
-
|
16
|
+
handler_object.call content
|
15
17
|
rescue StandardError => e
|
16
18
|
Log.error e
|
17
19
|
Jackhammer.configuration.exception_adapter.call e
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Jackhammer
|
2
|
+
class QueueName
|
3
|
+
def self.app_name
|
4
|
+
Jackhammer.configuration.app_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.from_routing_key(routing_key)
|
8
|
+
fail(InvalidConfigError, "app_name must be set to determine queue_name from routing_key") if app_name.to_s.empty?
|
9
|
+
|
10
|
+
"#{app_name}_#{routing_key}_q".gsub(/[^\w]+/, '_').gsub(/[_]+/, '_')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/jackhammer/topic.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
module Jackhammer
|
2
2
|
class Topic
|
3
|
+
QUEUE_NAME_KEY = 'queue_name'.freeze
|
4
|
+
ROUTING_KEY_KEY = 'routing_key'.freeze
|
5
|
+
|
3
6
|
def initialize(name:, options:, queue_config:)
|
4
7
|
@topic = Jackhammer.channel.topic name, options
|
5
|
-
@queue_config = queue_config
|
8
|
+
@queue_config = normalize_queue_config(queue_config)
|
6
9
|
end
|
7
10
|
|
8
11
|
def subscribe_queues
|
@@ -13,18 +16,41 @@ module Jackhammer
|
|
13
16
|
# for each message published.
|
14
17
|
def publish(message, options)
|
15
18
|
full_options = Jackhammer.configuration.publish_options.dup.merge options
|
16
|
-
|
19
|
+
topic.publish message, full_options
|
17
20
|
end
|
18
21
|
|
19
22
|
def queues
|
20
23
|
return @queues if @queues
|
21
24
|
|
22
|
-
@queues =
|
25
|
+
@queues = queue_config.map do |options|
|
23
26
|
handler = MessageReceiver.new(options.delete('handler'))
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
routing_key = fetch_and_delete_key(options, ROUTING_KEY_KEY)
|
28
|
+
queue_name = options.delete(QUEUE_NAME_KEY) || QueueName.from_routing_key(routing_key)
|
29
|
+
queue = Jackhammer.channel.queue(queue_name, options)
|
30
|
+
Log.info { "'#{queue_name}' configured to subscribe on '#{routing_key}'" }
|
31
|
+
Queue.new(topic: topic, queue: queue, handler: handler, routing_key: routing_key)
|
27
32
|
end
|
28
33
|
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :topic, :queue_config
|
38
|
+
|
39
|
+
# `queue_config` can be either:
|
40
|
+
# - an array of options containing `queue_name` key
|
41
|
+
# or
|
42
|
+
# - a hash containing `queue_name => options` pairs
|
43
|
+
def normalize_queue_config(config)
|
44
|
+
return config if config.is_a?(Array)
|
45
|
+
|
46
|
+
config.map do |name, options|
|
47
|
+
options[QUEUE_NAME_KEY] = name
|
48
|
+
options
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def fetch_and_delete_key(options, key)
|
53
|
+
options.delete(key) || fail(InvalidConfigError, "#{key} not found in #{options.inspect}")
|
54
|
+
end
|
29
55
|
end
|
30
56
|
end
|
data/lib/jackhammer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jackhammer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Serok
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -130,6 +130,7 @@ executables:
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
+
- ".dependabot/config.yml"
|
133
134
|
- ".gitignore"
|
134
135
|
- ".rspec"
|
135
136
|
- ".travis.yml"
|
@@ -148,6 +149,7 @@ files:
|
|
148
149
|
- lib/jackhammer/log.rb
|
149
150
|
- lib/jackhammer/message_receiver.rb
|
150
151
|
- lib/jackhammer/queue.rb
|
152
|
+
- lib/jackhammer/queue_name.rb
|
151
153
|
- lib/jackhammer/server.rb
|
152
154
|
- lib/jackhammer/topic.rb
|
153
155
|
- lib/jackhammer/topic_manager.rb
|