jackhammer 1.3.3 → 1.4.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
  SHA256:
3
- metadata.gz: ba0723d73e45b52cb78fa09945bcdc744c3d9e03ac49a97a362ce6cd97452c3b
4
- data.tar.gz: afa8b40a275678cf67d1cff434bebd531f59e1a850fd7f23d4c412472eb5d510
3
+ metadata.gz: 4aa6bdf41e8005dbbfbcdc2bacfc4fae0a8e182cb35b62fea8d961ba350ef600
4
+ data.tar.gz: 7ce9c945039c1e09b4cec7406c6c1e767f5bc91baf76ace5a9dcdca940f7991b
5
5
  SHA512:
6
- metadata.gz: 275da503e2f3b64c0a5b7b7d831416dcd84507ea98e8e14d736bbd38bb8f288ced5557108e3e3ea824ddf6dbcc9f0547ad91b68488704eafd779d1a8743ce80d
7
- data.tar.gz: c5950cb078350bdb19a502cdf7d80a32166d7a4fe5ad6ab441054c014df4f9718818cc7a9e8cd5b1aa1fb7cb40f4eee833a8f5c2cc081d8082854134346734b5
6
+ metadata.gz: e6ace137b8bac8709c3c38cf7fe0109cda7a13e4fe59d4900bb059f9b1403c445eb67419375a9d1c7c438c84d8d55949bb59291f53aa9982f9658364f43a6283
7
+ data.tar.gz: b2d6807b73211b09db3db88bc02de9d2d0509a4451c4b1fc252d92e98eb5b864038c25f3482169fe0325d58b820a5a659c16efea077bf32c668a9fafd2f90ec5
@@ -9,10 +9,3 @@ update_configs:
9
9
  allowed_updates:
10
10
  - match:
11
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"
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to track an issue that has been identified
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ **Expected behavior**
21
+ A clear and concise description of what you expected to happen.
22
+
23
+ **Mutation/Query**
24
+
25
+ **URL and HTTP method (for non-GQL):**
26
+
27
+ **Sentry or Logs URL:**
28
+
29
+ **User/authentication details**
30
+ Impacted user name or service account
31
+
32
+ **Additional context**
33
+ Add any other context about the problem here.
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: New story
3
+ about: Add a new story for implementation
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the solution**
11
+ A clear and concise description of what you want to happen.
12
+ When will this feature be done?
13
+
14
+ **Describe the users**
15
+ Who are we building this feature for?
16
+
17
+ **Additional context**
18
+ Add any other context or screenshots about the feature request here.
19
+ Link to any applicable documents describing the feature.
20
+
21
+ **Designs**
22
+ Link to any applicable designs on Invision.
@@ -0,0 +1,18 @@
1
+ ## Description
2
+ <!--- Describe your changes in detail -->
3
+
4
+ ## Related issue(s)
5
+ <!--- GH issue number -->
6
+
7
+ ## Motivation and Context
8
+ <!--- Why is this change required? What problem does it solve? -->
9
+ <!--- If it fixes an open issue, please link to the issue here. -->
10
+
11
+ ## How Has This Been Tested?
12
+ <!--- Please describe in detail how you tested your changes. -->
13
+
14
+ ## Screenshots (if appropriate):
15
+ <!--- Please add any screenshots of the feature. -->
16
+
17
+ ## Related PRs
18
+ <!--- Please add links to any related PRs (backend, component packages, etc). -->
@@ -0,0 +1,16 @@
1
+ # automatically approve PRs submitted by Dependabot or Renofidev
2
+ # this will allow Dependabot to automatically merge dependency update PRs where CI passes
3
+ # from: https://github.com/hmarr/auto-approve-action
4
+ name: Auto approve dependency upgrades PRs
5
+
6
+ on:
7
+ pull_request
8
+
9
+ jobs:
10
+ auto-approve:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: hmarr/auto-approve-action@v2.0.0
14
+ if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' || github.actor == 'renofidev'
15
+ with:
16
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
@@ -0,0 +1,29 @@
1
+ name: automerge
2
+ on:
3
+ pull_request:
4
+ types:
5
+ - labeled
6
+ - unlabeled
7
+ - synchronize
8
+ - opened
9
+ - edited
10
+ - ready_for_review
11
+ - reopened
12
+ - unlocked
13
+ pull_request_review:
14
+ types:
15
+ - submitted
16
+ check_suite:
17
+ types:
18
+ - completed
19
+ status: {}
20
+ jobs:
21
+ automerge:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: automerge
25
+ uses: "pascalgn/automerge-action@v0.11.0"
26
+ env:
27
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
28
+ MERGE_METHOD: squash
29
+ MERGE_DELETE_BRANCH: true
@@ -1,59 +1,83 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jackhammer (1.3.3)
4
+ jackhammer (1.4.0)
5
5
  bunny (~> 2.14)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- amq-protocol (2.3.0)
11
- ast (2.4.0)
12
- bunny (2.14.4)
13
- amq-protocol (~> 2.3, >= 2.3.0)
10
+ activemodel (6.0.3.4)
11
+ activesupport (= 6.0.3.4)
12
+ activerecord (6.0.3.4)
13
+ activemodel (= 6.0.3.4)
14
+ activesupport (= 6.0.3.4)
15
+ activesupport (6.0.3.4)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 0.7, < 2)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
20
+ zeitwerk (~> 2.2, >= 2.2.2)
21
+ amq-protocol (2.3.2)
22
+ ast (2.4.1)
23
+ bunny (2.17.0)
24
+ amq-protocol (~> 2.3, >= 2.3.1)
14
25
  bunny-mock (1.7.0)
15
26
  bunny (>= 1.7)
16
- byebug (11.1.1)
17
- diff-lcs (1.3)
18
- jaro_winkler (1.5.4)
19
- parallel (1.19.1)
20
- parser (2.7.0.5)
21
- ast (~> 2.4.0)
27
+ byebug (11.1.3)
28
+ concurrent-ruby (1.1.7)
29
+ diff-lcs (1.4.4)
30
+ i18n (1.8.5)
31
+ concurrent-ruby (~> 1.0)
32
+ minitest (5.14.2)
33
+ parallel (1.19.2)
34
+ parser (2.7.2.0)
35
+ ast (~> 2.4.1)
22
36
  rainbow (3.0.0)
23
37
  rake (13.0.1)
38
+ regexp_parser (1.8.2)
24
39
  rexml (3.2.4)
25
40
  rspec (3.9.0)
26
41
  rspec-core (~> 3.9.0)
27
42
  rspec-expectations (~> 3.9.0)
28
43
  rspec-mocks (~> 3.9.0)
29
- rspec-core (3.9.1)
30
- rspec-support (~> 3.9.1)
31
- rspec-expectations (3.9.1)
44
+ rspec-core (3.9.3)
45
+ rspec-support (~> 3.9.3)
46
+ rspec-expectations (3.9.2)
32
47
  diff-lcs (>= 1.2.0, < 2.0)
33
48
  rspec-support (~> 3.9.0)
34
49
  rspec-mocks (3.9.1)
35
50
  diff-lcs (>= 1.2.0, < 2.0)
36
51
  rspec-support (~> 3.9.0)
37
- rspec-support (3.9.2)
38
- rubocop (0.81.0)
39
- jaro_winkler (~> 1.5.1)
52
+ rspec-support (3.9.3)
53
+ rubocop (0.93.1)
40
54
  parallel (~> 1.10)
41
- parser (>= 2.7.0.1)
55
+ parser (>= 2.7.1.5)
42
56
  rainbow (>= 2.2.2, < 4.0)
57
+ regexp_parser (>= 1.8)
43
58
  rexml
59
+ rubocop-ast (>= 0.6.0)
44
60
  ruby-progressbar (~> 1.7)
45
61
  unicode-display_width (>= 1.4.0, < 2.0)
46
- rubocop-performance (1.5.2)
47
- rubocop (>= 0.71.0)
48
- rubocop-rspec (1.38.1)
49
- rubocop (>= 0.68.1)
62
+ rubocop-ast (0.7.1)
63
+ parser (>= 2.7.1.5)
64
+ rubocop-performance (1.8.1)
65
+ rubocop (>= 0.87.0)
66
+ rubocop-ast (>= 0.4.0)
67
+ rubocop-rspec (1.43.2)
68
+ rubocop (~> 0.87)
50
69
  ruby-progressbar (1.10.1)
70
+ thread_safe (0.3.6)
71
+ tzinfo (1.2.7)
72
+ thread_safe (~> 0.1)
51
73
  unicode-display_width (1.7.0)
74
+ zeitwerk (2.4.0)
52
75
 
53
76
  PLATFORMS
54
77
  ruby
55
78
 
56
79
  DEPENDENCIES
80
+ activerecord
57
81
  bundler
58
82
  bunny-mock
59
83
  byebug
data/README.md CHANGED
@@ -90,6 +90,8 @@ module MyApp
90
90
  config.publish_options = { mandatory: true, persistent: true }
91
91
  config.yaml_config = "config/jackhammer.yml"
92
92
  config.app_name = "my_app"
93
+ config.client_middleware.use MyClientMiddleware, some_arg: 1, other_arg: 2
94
+ config.server_middleware.use MyServerMiddleware
93
95
  end
94
96
  end
95
97
  end
@@ -162,10 +164,47 @@ The intent of the options might not be obvious by looking at the name.
162
164
  overridden by passing the same options as arguments in your code).
163
165
  - **yaml_config** defines the file location of the Topic Exchange YAML
164
166
  configuration file.
167
+ - **client_middleware** defines hooks that will be executed prior to publishing a message to a topic
168
+ - **server_middleware** defines hooks that will be executed prior to running the message handler
165
169
 
166
170
  You can find defaults specified in the Jackhammer::Configuration class
167
171
  constructor.
168
172
 
173
+ ### Middleware
174
+
175
+ Middleware allows you to hook into message publishing (client) and handling (server).
176
+
177
+ It can be used to transform the passed in arguments before passing them along or to halt the execution completely.
178
+ The execution will be halted if the middleware instance does not yield.
179
+
180
+ #### Example client middleware
181
+
182
+ ```ruby
183
+ class MyClientMiddleware
184
+ def initialize(name)
185
+ @name = name
186
+ end
187
+
188
+ def call(message, options)
189
+ options[:headers][:hello] = @name
190
+
191
+ yield message, options
192
+ end
193
+ end
194
+ ```
195
+
196
+ #### Example server middleware
197
+
198
+ ```ruby
199
+ class MyServerMiddleware
200
+ def call(handler:, delivery_info:, properties:, content:)
201
+ puts "Hello, #{properties[:headers]['name']}!"
202
+
203
+ yield handler: handler, delivery_info: delivery_info, properties: properties, content: content
204
+ end
205
+ end
206
+ ```
207
+
169
208
  ## Development
170
209
 
171
210
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile CHANGED
@@ -5,4 +5,4 @@ require 'rubocop/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  RuboCop::RakeTask.new
7
7
 
8
- task default: %i[rubocop:auto_correct spec]
8
+ task default: %i[spec rubocop:auto_correct]
@@ -22,8 +22,11 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
+ spec.required_ruby_version = '>= 2.6'
26
+
25
27
  spec.add_dependency 'bunny', '~> 2.14'
26
28
 
29
+ spec.add_development_dependency 'activerecord'
27
30
  spec.add_development_dependency 'bundler'
28
31
  spec.add_development_dependency 'bunny-mock'
29
32
  spec.add_development_dependency 'byebug'
@@ -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/middleware_collection'
10
11
  require 'jackhammer/queue_name'
11
12
  require 'jackhammer/queue'
12
13
  require 'jackhammer/topic'
@@ -46,5 +47,13 @@ module Jackhammer
46
47
  opts[:headers][:time] ||= time.iso8601
47
48
  end
48
49
  end
50
+
51
+ def client_middleware
52
+ configuration.client_middleware
53
+ end
54
+
55
+ def server_middleware
56
+ configuration.server_middleware
57
+ end
49
58
  end
50
59
  end
@@ -5,7 +5,7 @@ module Jackhammer
5
5
  attr_reader :logger, :opts
6
6
 
7
7
  def initialize(options = {})
8
- @logger = Logger.new STDERR
8
+ @logger = Logger.new $stderr
9
9
  @opts = { require: './config/environment' }.merge(options)
10
10
  end
11
11
 
@@ -2,6 +2,7 @@ module Jackhammer
2
2
  class Configuration
3
3
  attr_accessor(
4
4
  :app_name,
5
+ :client_middleware,
5
6
  :connection_options,
6
7
  :connection_url,
7
8
  :environment,
@@ -9,6 +10,7 @@ module Jackhammer
9
10
  :logger,
10
11
  :publish_options,
11
12
  :server,
13
+ :server_middleware,
12
14
  :yaml_config
13
15
  )
14
16
 
@@ -20,6 +22,8 @@ module Jackhammer
20
22
  @logger = Logger.new IO::NULL
21
23
  @publish_options = { mandatory: true, persistent: true }
22
24
  @yaml_config = './config/jackhammer.yml'
25
+ @client_middleware = MiddlewareCollection.new
26
+ @server_middleware = MiddlewareCollection.new
23
27
  end
24
28
 
25
29
  def self.instance
@@ -0,0 +1,60 @@
1
+ module Jackhammer
2
+ class ConfigurationValidator
3
+ attr_accessor :config_yaml, :environment, :errors
4
+
5
+ def initialize
6
+ @errors = []
7
+ end
8
+
9
+ def validate
10
+ validate_environment_defined
11
+ return if errors.any?
12
+ validate_topic_exchange_defined
13
+ return if errors.any?
14
+ validate_queues_defined
15
+ return if errors.any?
16
+ validate_handlers_defined
17
+ end
18
+
19
+ def validate_environment_defined
20
+ return if config_yaml[environment]
21
+
22
+ add_error("Environment '#{environment}' is not defined")
23
+ end
24
+
25
+ def validate_topic_exchange_defined
26
+ return if config_yaml[environment].keys.any?
27
+
28
+ add_error("Environment '#{environment}' does not define a topic exchange")
29
+ end
30
+
31
+ def validate_queues_defined
32
+ topics = config_yaml[environment].keys
33
+ topics.each do |topic|
34
+ begin
35
+ next if config_yaml[environment][topic]['queues']
36
+ rescue StandardError
37
+ false
38
+ end
39
+
40
+ add_error("Topic '#{topic}' does not define any queues")
41
+ end
42
+ end
43
+
44
+ def validate_handlers_defined
45
+ config_yaml[environment].each do |exchange_name, exchange_config|
46
+ exchange_config['queues'].each do |qconfig|
47
+ Object.const_get(qconfig['handler'])
48
+ rescue NameError
49
+ add_error("Uninitialized constant #{qconfig['handler']}")
50
+ end
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def add_error(str)
57
+ @errors << str
58
+ end
59
+ end
60
+ end
@@ -15,6 +15,8 @@ module Jackhammer
15
15
  else
16
16
  handler.call message
17
17
  end
18
+ ensure
19
+ ActiveRecord::Base.clear_active_connections! if defined?(ActiveRecord::Base)
18
20
  end
19
21
  end
20
22
  end
@@ -0,0 +1,29 @@
1
+ module Jackhammer
2
+ class MiddlewareCollection
3
+ def initialize
4
+ @entries = []
5
+ end
6
+
7
+ def use(klass, *args, &block)
8
+ @entries << Entry.new(klass: klass, args: args, block: block)
9
+ end
10
+
11
+ def call(*args, &block)
12
+ call_chain = @entries.map(&:instantiate) + [block]
13
+
14
+ traverse = proc do |*arguments|
15
+ call_chain.shift.call(*arguments, &traverse) unless call_chain.empty?
16
+ end
17
+
18
+ traverse.call(*args)
19
+ end
20
+
21
+ Entry = Struct.new(:klass, :args, :block, keyword_init: true) do
22
+ def instantiate
23
+ return klass unless klass.respond_to?(:new)
24
+
25
+ klass.new(*args, &block)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -13,7 +13,15 @@ module Jackhammer
13
13
  queue.subscribe do |delivery_info, properties, content|
14
14
  Log.info { [delivery_info.inspect, properties.inspect].join(' || ') }
15
15
  Log.debug { content }
16
- handler_object.call content
16
+
17
+ Jackhammer.server_middleware.call(
18
+ handler: handler_object,
19
+ delivery_info: delivery_info,
20
+ properties: properties,
21
+ content: content
22
+ ) do |**args|
23
+ args.fetch(:handler).call args.fetch(:content)
24
+ end
17
25
  rescue StandardError => e
18
26
  Log.error e
19
27
  Jackhammer.configuration.exception_adapter.call e
@@ -7,7 +7,7 @@ module Jackhammer
7
7
  def self.from_routing_key(routing_key)
8
8
  fail(InvalidConfigError, "app_name must be set to determine queue_name from routing_key") if app_name.to_s.empty?
9
9
 
10
- "#{app_name}_#{routing_key}_q".gsub(/[^\w]+/, '_').gsub(/[_]+/, '_')
10
+ "#{app_name}_#{routing_key}_q".gsub(/[^\w]+/, '_').squeeze('_')
11
11
  end
12
12
  end
13
13
  end
@@ -0,0 +1,71 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'yaml'
4
+ require 'jackhammer/configuration_validator'
5
+
6
+ module Jackhammer
7
+ class RakeTask < ::Rake::TaskLib
8
+ # Name of test task. (default is :jackhammer)
9
+ attr_accessor :name
10
+
11
+ # File path of the configuration file. (default is ./config/jackhammer.yml)
12
+ attr_accessor :path
13
+
14
+ # Description of the test task. (default is 'Validate Jackhammer
15
+ # configuration')
16
+ attr_accessor :description
17
+
18
+ # Task prerequisites.
19
+ attr_accessor :deps
20
+
21
+ # Specifies the environment to inspect. (default is 'production')
22
+ attr_accessor :env
23
+
24
+ def initialize
25
+ super
26
+ @name = :jackhammer
27
+ @env = 'production'
28
+ @path = './config/jackhammer.yml'
29
+ @description = 'Validate Jackhammer configuration'
30
+ @deps = []
31
+ yield self if block_given?
32
+ if @name.is_a?(Hash)
33
+ @deps = @name.values.first
34
+ @name = @name.keys.first
35
+ end
36
+ define
37
+ end
38
+
39
+ def define
40
+ desc @description
41
+ task @name => Array(deps) do
42
+ validator = ConfigurationValidator.new
43
+ validator.config_yaml = YAML.safe_load(File.read(@path), [], [], true)
44
+ validator.environment = env
45
+ validator.validate
46
+ print_results validator.errors
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def print_results(errors)
53
+ puts "Jackhammer configuration #{path}\n"
54
+ if errors.any?
55
+ puts red("Problems identified: #{errors.size}\n")
56
+ errors.each { |error| puts red(error) }
57
+ exit 1
58
+ else
59
+ puts green('OK')
60
+ end
61
+ end
62
+
63
+ def red(text)
64
+ "\e[1;31m#{text}\e[0m"
65
+ end
66
+
67
+ def green(text)
68
+ "\e[1;32m#{text}\e[0m"
69
+ end
70
+ end
71
+ end
@@ -15,7 +15,9 @@ module Jackhammer
15
15
  # We're expecting the client to specify at least the routing_key in options
16
16
  # for each message published.
17
17
  def publish(message, options)
18
- topic.publish message, Jackhammer.publish_options(options)
18
+ Jackhammer.client_middleware.call(message, Jackhammer.publish_options(options)) do |msg, opts|
19
+ topic.publish msg, opts
20
+ end
19
21
  end
20
22
 
21
23
  def queues
@@ -1,3 +1,3 @@
1
1
  module Jackhammer
2
- VERSION = '1.3.3'.freeze
2
+ VERSION = '1.4.0'.freeze
3
3
  end
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.3.3
4
+ version: 1.4.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: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -145,6 +159,12 @@ extensions: []
145
159
  extra_rdoc_files: []
146
160
  files:
147
161
  - ".dependabot/config.yml"
162
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
163
+ - ".github/ISSUE_TEMPLATE/config.yml"
164
+ - ".github/ISSUE_TEMPLATE/story.md"
165
+ - ".github/PULL_REQUEST_TEMPLATE.md"
166
+ - ".github/workflows/auto-approve.yml"
167
+ - ".github/workflows/auto-merge.yml"
148
168
  - ".gitignore"
149
169
  - ".rspec"
150
170
  - ".travis.yml"
@@ -158,11 +178,14 @@ files:
158
178
  - lib/jackhammer.rb
159
179
  - lib/jackhammer/cli.rb
160
180
  - lib/jackhammer/configuration.rb
181
+ - lib/jackhammer/configuration_validator.rb
161
182
  - lib/jackhammer/exceptions.rb
162
183
  - lib/jackhammer/log.rb
163
184
  - lib/jackhammer/message_receiver.rb
185
+ - lib/jackhammer/middleware_collection.rb
164
186
  - lib/jackhammer/queue.rb
165
187
  - lib/jackhammer/queue_name.rb
188
+ - lib/jackhammer/rake_task.rb
166
189
  - lib/jackhammer/server.rb
167
190
  - lib/jackhammer/topic.rb
168
191
  - lib/jackhammer/topic_manager.rb
@@ -181,14 +204,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
204
  requirements:
182
205
  - - ">="
183
206
  - !ruby/object:Gem::Version
184
- version: '0'
207
+ version: '2.6'
185
208
  required_rubygems_version: !ruby/object:Gem::Requirement
186
209
  requirements:
187
210
  - - ">="
188
211
  - !ruby/object:Gem::Version
189
212
  version: '0'
190
213
  requirements: []
191
- rubygems_version: 3.1.2
214
+ rubygems_version: 3.1.4
192
215
  signing_key:
193
216
  specification_version: 4
194
217
  summary: Jackhammer is an opinionated facade over RabbitMQ Bunny