msgr 1.3.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +79 -0
- data/.rubocop.yml +4 -0
- data/Appraisals +7 -2
- data/CHANGELOG.md +63 -1
- data/Gemfile +1 -1
- data/README.md +7 -12
- data/gemfiles/rails_5.2.gemfile +2 -1
- data/gemfiles/rails_6.0.gemfile +2 -1
- data/gemfiles/rails_6.1.gemfile +2 -1
- data/gemfiles/rails_7.0.gemfile +15 -0
- data/gemfiles/{rails_master.gemfile → rails_head.gemfile} +2 -1
- data/lib/msgr/binding.rb +2 -2
- data/lib/msgr/channel.rb +2 -7
- data/lib/msgr/cli.rb +11 -12
- data/lib/msgr/client.rb +2 -2
- data/lib/msgr/connection.rb +1 -1
- data/lib/msgr/railtie.rb +1 -1
- data/lib/msgr/route.rb +2 -2
- data/lib/msgr/version.rb +2 -2
- data/lib/msgr.rb +1 -3
- data/msgr.gemspec +6 -0
- data/renovate.json +5 -0
- data/scripts/simple_test.rb +1 -1
- data/spec/unit/msgr/route_spec.rb +15 -1
- data/spec/unit/msgr_spec.rb +1 -2
- metadata +10 -9
- data/.github/workflows/build.yml +0 -52
- data/.github/workflows/lint.yml +0 -20
- data/.travis.yml +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1d1c4c93abd233370b3175719c7d41902637c1d8cae51223f86f3cd16611da9
|
4
|
+
data.tar.gz: 432388472168160b0bc1be0ee303656ab0776674d3178ac63f6c375a7395fb6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11ce36e23b4a499aaaff01e67a1be9a91048e19e9c55cf0487491aef49d3343d1ead2cb854e4c1a1035319e524b764f62c4846e6632bac5fa81da9b7fb125329
|
7
|
+
data.tar.gz: 62e2a4460070ae90fe264f270cab8852f81d85f177e2fe77e8b730926f88a11dd651506cc1b5ef58fafefa3b23c1ea0889239beacd7ba6b8342d04d65e11e05c
|
@@ -0,0 +1,79 @@
|
|
1
|
+
name: test
|
2
|
+
on: [push]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
name: Ruby ${{ matrix.ruby }} / ${{ matrix.gemfile }}
|
6
|
+
runs-on: ubuntu-20.04
|
7
|
+
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby:
|
11
|
+
- "3.0"
|
12
|
+
- "2.7"
|
13
|
+
- "2.6"
|
14
|
+
- "2.5"
|
15
|
+
gemfile:
|
16
|
+
- rails_5.2.gemfile
|
17
|
+
- rails_6.0.gemfile
|
18
|
+
- rails_6.1.gemfile
|
19
|
+
- rails_7.0.gemfile
|
20
|
+
exclude:
|
21
|
+
- ruby: "3.0"
|
22
|
+
gemfile: rails_5.2.gemfile
|
23
|
+
- ruby: "2.5"
|
24
|
+
gemfile: rails_7.0.gemfile
|
25
|
+
- ruby: "2.6"
|
26
|
+
gemfile: rails_7.0.gemfile
|
27
|
+
fail-fast: False
|
28
|
+
|
29
|
+
services:
|
30
|
+
rabbitmq:
|
31
|
+
image: rabbitmq:latest
|
32
|
+
options: >-
|
33
|
+
--health-cmd "rabbitmqctl node_health_check"
|
34
|
+
--health-interval 10s
|
35
|
+
--health-timeout 5s
|
36
|
+
--health-retries 5
|
37
|
+
ports:
|
38
|
+
- 5672:5672
|
39
|
+
|
40
|
+
env:
|
41
|
+
AMQP_SERVER: amqp://localhost:5672
|
42
|
+
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
43
|
+
BUNDLE_JOBS: 4
|
44
|
+
BUNDLE_RETRY: 10
|
45
|
+
BUNDLE_WITHOUT: development
|
46
|
+
|
47
|
+
steps:
|
48
|
+
- uses: actions/checkout@master
|
49
|
+
|
50
|
+
- name: Setup Ruby
|
51
|
+
uses: ruby/setup-ruby@v1
|
52
|
+
with:
|
53
|
+
ruby-version: ${{ matrix.ruby }}
|
54
|
+
bundler-cache: True
|
55
|
+
|
56
|
+
- name: Run unit tests
|
57
|
+
run: bundle exec rspec -Ispec/unit --color spec/unit
|
58
|
+
|
59
|
+
- name: Run integration tests
|
60
|
+
run: bundle exec rspec -Ispec/integration --color spec/integration
|
61
|
+
|
62
|
+
rubocop:
|
63
|
+
name: rubocop
|
64
|
+
runs-on: ubuntu-20.04
|
65
|
+
|
66
|
+
env:
|
67
|
+
BUNDLE_JOBS: 4
|
68
|
+
BUNDLE_RETRY: 10
|
69
|
+
BUNDLE_WITHOUT: development
|
70
|
+
|
71
|
+
steps:
|
72
|
+
- uses: actions/checkout@master
|
73
|
+
- uses: ruby/setup-ruby@v1
|
74
|
+
with:
|
75
|
+
ruby-version: 3.0
|
76
|
+
bundler-cache: true
|
77
|
+
|
78
|
+
- name: Run rubocop
|
79
|
+
run: bundle exec rubocop --parallel --color
|
data/.rubocop.yml
CHANGED
@@ -3,6 +3,7 @@ inherit_gem:
|
|
3
3
|
|
4
4
|
AllCops:
|
5
5
|
TargetRubyVersion: 2.5
|
6
|
+
SuggestExtensions: False
|
6
7
|
Exclude:
|
7
8
|
- gemfiles/**/*
|
8
9
|
- spec/integration/dummy/**/*
|
@@ -11,3 +12,6 @@ AllCops:
|
|
11
12
|
Layout/LineLength:
|
12
13
|
Exclude:
|
13
14
|
- spec/**/*
|
15
|
+
|
16
|
+
RSpec/MultipleMemoizedHelpers:
|
17
|
+
Max: 15
|
data/Appraisals
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
# vim: ft=ruby
|
3
4
|
|
4
5
|
appraise 'rails-5.2' do
|
5
6
|
gem 'rails', '~> 5.2.0'
|
@@ -13,6 +14,10 @@ appraise 'rails-6.1' do
|
|
13
14
|
gem 'rails', '~> 6.1.0'
|
14
15
|
end
|
15
16
|
|
16
|
-
appraise 'rails-
|
17
|
+
appraise 'rails-7.0' do
|
18
|
+
gem 'rails', '~> 6.1.0'
|
19
|
+
end
|
20
|
+
|
21
|
+
appraise 'rails-head' do
|
17
22
|
gem 'rails', git: 'https://github.com/rails/rails', require: 'rails'
|
18
23
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,54 +1,85 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
2
3
|
All notable changes to this project will be documented in this file.
|
3
4
|
|
4
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
5
6
|
|
6
7
|
## [Unreleased]
|
7
8
|
|
9
|
+
## [1.4.0] - 2022-01-10
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Support for namespaced consumer classes in routes file (#48, #49)
|
14
|
+
|
15
|
+
### Removed
|
16
|
+
|
17
|
+
- Unused `Channel#reject` method
|
18
|
+
|
8
19
|
## [1.3.2] - 2021-09-21
|
20
|
+
|
9
21
|
### Fixed
|
22
|
+
|
10
23
|
- Rake task `msgr:drain` ran before all routes were initialized (#44)
|
11
24
|
|
12
25
|
## [1.3.1] - 2020-12-16
|
26
|
+
|
13
27
|
### Fixed
|
28
|
+
|
14
29
|
- Delay setting default options for correct relative routing file path
|
15
30
|
|
16
31
|
## [1.3.0] - 2020-12-16
|
32
|
+
|
17
33
|
### Added
|
34
|
+
|
18
35
|
- Support and testing for Rails 6.1
|
19
36
|
- Rake task for purging all known queues (#43)
|
20
37
|
|
21
38
|
### Changed
|
39
|
+
|
22
40
|
- High-risk feature to autostart client in-process has been removed without replacement
|
23
41
|
- Parsing config is more relaxed now but directly based on YAML boolean values
|
24
42
|
|
25
43
|
## [1.2.0] - 2019-06-27
|
44
|
+
|
26
45
|
### Added
|
46
|
+
|
27
47
|
- Test support of Rails 5.2
|
28
48
|
|
29
49
|
### Changed
|
50
|
+
|
30
51
|
- Serialize JSON using core JSON instead of MultiJson
|
31
52
|
- Remove application/text fallback for payload (#25)
|
32
53
|
|
33
54
|
## [1.1.0] - 2018-07-25
|
55
|
+
|
34
56
|
### Added
|
57
|
+
|
35
58
|
- New command line runner
|
36
59
|
|
37
60
|
## [1.0.0] - 2017-12-29
|
61
|
+
|
38
62
|
### Changed
|
63
|
+
|
39
64
|
- Configure prefetch per binding and disable auto ack in consumer for customized batch processing (#15)
|
40
65
|
- Replace usage of deprecated exception class (#12)
|
41
66
|
|
42
67
|
## [0.15.2] - 2017-09-04
|
68
|
+
|
43
69
|
### Fixed
|
70
|
+
|
44
71
|
- Fix regression in parsing `:uri` config with empty path
|
45
72
|
|
46
73
|
## [0.15.1] - 2017-07-31
|
74
|
+
|
47
75
|
### Fixed
|
76
|
+
|
48
77
|
- Fix errors with additional configuration keys for AMQP connection (#13)
|
49
78
|
|
50
79
|
## [0.15.0] - 2017-03-30
|
80
|
+
|
51
81
|
### Added
|
82
|
+
|
52
83
|
- Add new configuration option `:raise_exceptions` that can be used to enable
|
53
84
|
exceptions being raised from consumers. Mostly useful for testing consumers.
|
54
85
|
Defaults to `false`.
|
@@ -56,69 +87,100 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
56
87
|
- Add methods for purging queues
|
57
88
|
|
58
89
|
### Changed
|
90
|
+
|
59
91
|
- Rework TestPool timeout handling to not account processing time
|
60
92
|
|
61
93
|
## [0.14.1] - 2016-02-17
|
94
|
+
|
62
95
|
### Fixed
|
96
|
+
|
63
97
|
- Fix loading test pool source file
|
64
98
|
|
65
99
|
## [0.14.0] - 2016-02-17
|
100
|
+
|
66
101
|
### Added
|
102
|
+
|
67
103
|
- Add experimental test pool (`Msgr::TestPool`)
|
68
104
|
|
69
105
|
## [0.13.0] - 2015-08-24
|
106
|
+
|
70
107
|
### Changed
|
108
|
+
|
71
109
|
- Use `Rails.application.config_for` if available.
|
72
110
|
|
73
111
|
## [0.12.2] - 2015-01-14
|
112
|
+
|
74
113
|
### Changed
|
114
|
+
|
75
115
|
- Do not delete the exchange on stop delete:true - as the exchange is changed
|
76
116
|
|
77
117
|
## [0.12.1] - 2014-11-06
|
118
|
+
|
78
119
|
### Changed
|
120
|
+
|
79
121
|
- Loose dependency on bunny to allow `~> 1.4` for stone-age old RabbitMQ servers.
|
80
122
|
|
81
123
|
## [0.11.0-rc3] - 2014-04-11
|
124
|
+
|
82
125
|
### Added
|
126
|
+
|
83
127
|
- Add checkcredentials config option to disable initial connect to rabbitmq
|
84
128
|
server to check the credentials
|
85
129
|
|
86
130
|
### Changed
|
131
|
+
|
87
132
|
- Define pool_class by string to make it useable with rails
|
88
133
|
|
89
134
|
## [0.11.0-rc2] - 2014-03-29
|
135
|
+
|
90
136
|
### Added
|
137
|
+
|
91
138
|
- Add nack for messages when an error is rescued by dispatcher
|
92
139
|
|
93
140
|
## [0.11.0-rc1] - 2014-03-29
|
141
|
+
|
94
142
|
### Added
|
143
|
+
|
95
144
|
- Add pool_class config to override pool classes used by dispatcher
|
96
145
|
|
97
146
|
## [0.4.1] - 2014-03-18
|
147
|
+
|
98
148
|
### Fixed
|
149
|
+
|
99
150
|
- Fix bug with empty routes on client start
|
100
151
|
|
101
152
|
## [0.4.0] - 2014-03-04
|
153
|
+
|
102
154
|
### Changed
|
155
|
+
|
103
156
|
- Improve railtie and autostart code
|
104
157
|
|
105
158
|
## 0.4.0 - 0.10.0
|
159
|
+
|
106
160
|
### Changed
|
161
|
+
|
107
162
|
- Some lost history due to several crises
|
108
163
|
|
109
164
|
## [0.3.0] - 2014-03-03
|
165
|
+
|
110
166
|
### Added
|
167
|
+
|
111
168
|
- Support for forking web servers like unicorn
|
112
169
|
|
113
170
|
## [0.2.1] - 2014-02-26
|
171
|
+
|
114
172
|
### Fixed
|
173
|
+
|
115
174
|
- Fix wrong rails initializer code - was not use the config file
|
116
175
|
|
117
176
|
## [0.2.0] - 2014-02-21
|
177
|
+
|
118
178
|
### Changed
|
179
|
+
|
119
180
|
- Improve rails initializer code
|
120
181
|
|
121
|
-
[
|
182
|
+
[unreleased]: https://github.com/jgraichen/msgr/compare/v1.4.0...HEAD
|
183
|
+
[1.4.0]: https://github.com/jgraichen/msgr/compare/v1.3.2...v1.4.0
|
122
184
|
[1.3.2]: https://github.com/jgraichen/msgr/compare/v1.3.1...v1.3.2
|
123
185
|
[1.3.1]: https://github.com/jgraichen/msgr/compare/v1.3.0...v1.3.1
|
124
186
|
[1.3.0]: https://github.com/jgraichen/msgr/compare/v1.2.0...v1.3.0
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
# Msgr:
|
1
|
+
# Msgr: _Rails-like Messaging Framework_
|
2
2
|
|
3
|
-
|
4
|
-
[![
|
5
|
-
[![Build Status](https://travis-ci.org/jgraichen/msgr.svg?branch=master)](https://travis-ci.org/jgraichen/msgr)
|
6
|
-
[![Build Status](https://github.com/jgraichen/msgr/workflows/Build/badge.svg?branch=master)](https://github.com/jgraichen/msgr/actions?query=workflow%3ABuild+branch%3Amaster)
|
3
|
+
[![Gem](https://img.shields.io/gem/v/msgr?logo=rubygems)](https://rubygems.org/gems/msgr)
|
4
|
+
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/jgraichen/msgr/test?logo=github)](https://github.com/jgraichen/msgr/actions/workflows/test.yml)
|
7
5
|
[![RubyDoc Documentation](http://img.shields.io/badge/rubydoc-here-blue.svg)](http://rubydoc.info/github/jgraichen/msgr/master/frames)
|
8
6
|
|
9
7
|
You know it and you like it. Using Rails you can just declare your routes and
|
10
8
|
create a controller. That's all you need to process requests.
|
11
9
|
|
12
|
-
With
|
10
|
+
With _Msgr_ you can do the same for asynchronous AMQP messaging. Just define
|
13
11
|
your routes, create your consumer and watch your app processing messages.
|
14
12
|
|
15
13
|
## Installation
|
@@ -83,7 +81,6 @@ end
|
|
83
81
|
|
84
82
|
Run client daemon with `bundle exec msgr`.
|
85
83
|
|
86
|
-
|
87
84
|
## Advanced configuration
|
88
85
|
|
89
86
|
### Manual message acknowledgments
|
@@ -106,10 +103,9 @@ end
|
|
106
103
|
|
107
104
|
Per default each message queue has a prefetch count of 1. This value can be changed when specifying the messaging routes:
|
108
105
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
106
|
+
```ruby
|
107
|
+
route 'local.test.index', to: 'test#index', prefetch: 42
|
108
|
+
```
|
113
109
|
|
114
110
|
## Testing
|
115
111
|
|
@@ -154,7 +150,6 @@ it 'executes the consumer' do
|
|
154
150
|
end
|
155
151
|
```
|
156
152
|
|
157
|
-
|
158
153
|
## Contributing
|
159
154
|
|
160
155
|
1. Fork it
|
data/gemfiles/rails_5.2.gemfile
CHANGED
@@ -4,8 +4,9 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "coveralls"
|
7
|
-
gem "my-rubocop", github: "jgraichen/my-rubocop"
|
7
|
+
gem "my-rubocop", github: "jgraichen/my-rubocop", ref: "v3"
|
8
8
|
gem "rake"
|
9
|
+
gem "rake-release", "~> 1.1"
|
9
10
|
gem "rspec", "~> 3.0"
|
10
11
|
gem "rspec-rails"
|
11
12
|
gem "rails", "~> 5.2.0"
|
data/gemfiles/rails_6.0.gemfile
CHANGED
@@ -4,8 +4,9 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "coveralls"
|
7
|
-
gem "my-rubocop", github: "jgraichen/my-rubocop"
|
7
|
+
gem "my-rubocop", github: "jgraichen/my-rubocop", ref: "v3"
|
8
8
|
gem "rake"
|
9
|
+
gem "rake-release", "~> 1.1"
|
9
10
|
gem "rspec", "~> 3.0"
|
10
11
|
gem "rspec-rails"
|
11
12
|
gem "rails", "~> 6.0.0"
|
data/gemfiles/rails_6.1.gemfile
CHANGED
@@ -4,8 +4,9 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "coveralls"
|
7
|
-
gem "my-rubocop", github: "jgraichen/my-rubocop"
|
7
|
+
gem "my-rubocop", github: "jgraichen/my-rubocop", ref: "v3"
|
8
8
|
gem "rake"
|
9
|
+
gem "rake-release", "~> 1.1"
|
9
10
|
gem "rspec", "~> 3.0"
|
10
11
|
gem "rspec-rails"
|
11
12
|
gem "rails", "~> 6.1.0"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "appraisal"
|
6
|
+
gem "coveralls"
|
7
|
+
gem "my-rubocop", github: "jgraichen/my-rubocop", ref: "v3"
|
8
|
+
gem "rake"
|
9
|
+
gem "rake-release", "~> 1.1"
|
10
|
+
gem "rspec", "~> 3.0"
|
11
|
+
gem "rspec-rails"
|
12
|
+
gem "rails", "~> 6.1.0"
|
13
|
+
gem "sqlite3"
|
14
|
+
|
15
|
+
gemspec path: "../"
|
@@ -4,8 +4,9 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
gem "appraisal"
|
6
6
|
gem "coveralls"
|
7
|
-
gem "my-rubocop", github: "jgraichen/my-rubocop"
|
7
|
+
gem "my-rubocop", github: "jgraichen/my-rubocop", ref: "v3"
|
8
8
|
gem "rake"
|
9
|
+
gem "rake-release", "~> 1.1"
|
9
10
|
gem "rspec", "~> 3.0"
|
10
11
|
gem "rspec-rails"
|
11
12
|
gem "rails", git: "https://github.com/rails/rails", require: "rails"
|
data/lib/msgr/binding.rb
CHANGED
@@ -10,7 +10,7 @@ module Msgr
|
|
10
10
|
:dispatcher,
|
11
11
|
:queue,
|
12
12
|
:route,
|
13
|
-
:subscription
|
13
|
+
:subscription,
|
14
14
|
)
|
15
15
|
|
16
16
|
def initialize(connection, route, dispatcher)
|
@@ -54,7 +54,7 @@ module Msgr
|
|
54
54
|
rescue StandardError => e
|
55
55
|
log(:error) do
|
56
56
|
"Rescued error from subscribe: #{e.class.name}: " \
|
57
|
-
|
57
|
+
"#{e}\n#{e.backtrace.join("\n")}"
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
data/lib/msgr/channel.rb
CHANGED
@@ -22,7 +22,7 @@ module Msgr
|
|
22
22
|
@channel.topic(prefix(EXCHANGE_NAME), durable: true).tap do |ex|
|
23
23
|
log(:debug) do
|
24
24
|
"Created exchange #{ex.name} (type: #{ex.type}, " \
|
25
|
-
|
25
|
+
"durable: #{ex.durable?}, auto_delete: #{ex.auto_delete?})"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -32,7 +32,7 @@ module Msgr
|
|
32
32
|
@channel.queue(prefix(name), durable: true, **opts).tap do |queue|
|
33
33
|
log(:debug) do
|
34
34
|
"Create queue #{queue.name} (durable: #{queue.durable?}, " \
|
35
|
-
|
35
|
+
"auto_delete: #{queue.auto_delete?})"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -55,11 +55,6 @@ module Msgr
|
|
55
55
|
log(:debug) { "Nacked message: #{delivery_tag}" }
|
56
56
|
end
|
57
57
|
|
58
|
-
def reject(delivery_tag, requeue = true)
|
59
|
-
@channel.reject delivery_tag, requeue
|
60
|
-
log(:debug) { "Rejected message: #{delivery_tag}" }
|
61
|
-
end
|
62
|
-
|
63
58
|
def close
|
64
59
|
@channel.close if @channel.open?
|
65
60
|
end
|
data/lib/msgr/cli.rb
CHANGED
@@ -41,17 +41,16 @@ module Msgr
|
|
41
41
|
Signal.trap('INT') { w.puts 'INT' }
|
42
42
|
Signal.trap('TERM') { w.puts 'TERM' }
|
43
43
|
|
44
|
-
Msgr.logger = Logger.new(
|
44
|
+
Msgr.logger = Logger.new($stdout)
|
45
45
|
Msgr.client.start
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
47
|
+
# Wait until we receive a signal
|
48
|
+
readable = IO.select([r])
|
49
|
+
case readable.first[0].gets.strip
|
50
|
+
when 'INT', 'TERM' # Safe shutdown
|
51
|
+
Msgr.client.stop
|
52
|
+
else # Error
|
53
|
+
exit 1
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
@@ -65,20 +64,20 @@ module Msgr
|
|
65
64
|
def parse(_argv)
|
66
65
|
options = {
|
67
66
|
require: Dir.pwd,
|
68
|
-
environment: 'development'
|
67
|
+
environment: 'development',
|
69
68
|
}
|
70
69
|
|
71
70
|
OptionParser.new do |o|
|
72
71
|
o.on(
|
73
72
|
'-r', '--require [PATH|DIR]',
|
74
|
-
'Location of Rails application (default to current directory)'
|
73
|
+
'Location of Rails application (default to current directory)',
|
75
74
|
) do |arg|
|
76
75
|
options[:require] = arg
|
77
76
|
end
|
78
77
|
|
79
78
|
o.on(
|
80
79
|
'-e', '--environment [env]',
|
81
|
-
'Rails environment (default to development)'
|
80
|
+
'Rails environment (default to development)',
|
82
81
|
) do |arg|
|
83
82
|
options[:environment] = arg
|
84
83
|
end
|
data/lib/msgr/client.rb
CHANGED
@@ -14,7 +14,7 @@ module Msgr
|
|
14
14
|
@config = {
|
15
15
|
host: '127.0.0.1',
|
16
16
|
vhost: '/',
|
17
|
-
max: 2
|
17
|
+
max: 2,
|
18
18
|
}
|
19
19
|
|
20
20
|
@config.merge! parse(config.delete(:uri)) if config[:uri]
|
@@ -148,7 +148,7 @@ module Msgr
|
|
148
148
|
|
149
149
|
log(:warn) do
|
150
150
|
"Fork detected. Reset internal state. (Old PID: #{@pid} / " \
|
151
|
-
|
151
|
+
"New PID: #{::Process.pid}"
|
152
152
|
end
|
153
153
|
|
154
154
|
reset
|
data/lib/msgr/connection.rb
CHANGED
data/lib/msgr/railtie.rb
CHANGED
data/lib/msgr/route.rb
CHANGED
@@ -4,7 +4,7 @@ module Msgr
|
|
4
4
|
class Route
|
5
5
|
attr_reader :consumer, :action, :opts
|
6
6
|
|
7
|
-
MATCH_REGEXP =
|
7
|
+
MATCH_REGEXP = %r{\A(?<consumer>(?:\w+/)*\w+)#(?<action>\w+)\z}.freeze
|
8
8
|
def initialize(key, opts = {})
|
9
9
|
@opts = opts
|
10
10
|
raise ArgumentError.new 'Missing `to` options.' unless @opts[:to]
|
@@ -16,7 +16,7 @@ module Msgr
|
|
16
16
|
unless result
|
17
17
|
raise ArgumentError.new \
|
18
18
|
"Invalid consumer format: #{opts[:to].strip.to_s.inspect}. " \
|
19
|
-
'Must be `consumer_class#action`.'
|
19
|
+
'Must be `name/space/consumer_class#action`.'
|
20
20
|
end
|
21
21
|
|
22
22
|
@consumer = "#{result[:consumer].camelize}Consumer"
|
data/lib/msgr/version.rb
CHANGED
data/lib/msgr.rb
CHANGED
@@ -25,7 +25,7 @@ require 'msgr/railtie' if defined? Rails
|
|
25
25
|
|
26
26
|
module Msgr
|
27
27
|
class << self
|
28
|
-
attr_writer :client, :config
|
28
|
+
attr_writer :client, :config, :logger
|
29
29
|
|
30
30
|
delegate :publish, to: :client
|
31
31
|
|
@@ -46,8 +46,6 @@ module Msgr
|
|
46
46
|
@logger
|
47
47
|
end
|
48
48
|
|
49
|
-
attr_writer :logger
|
50
|
-
|
51
49
|
def start
|
52
50
|
client.start
|
53
51
|
client
|
data/msgr.gemspec
CHANGED
@@ -15,11 +15,17 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.homepage = 'https://github.com/jgraichen/msgr'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
|
18
|
+
spec.metadata = {
|
19
|
+
'rubygems_mfa_required' => 'true',
|
20
|
+
}
|
21
|
+
|
18
22
|
spec.files = `git ls-files -z`.split("\x0")
|
19
23
|
spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
|
20
24
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
25
|
spec.require_paths = %w[lib]
|
22
26
|
|
27
|
+
spec.required_ruby_version = '>= 2.5'
|
28
|
+
|
23
29
|
spec.add_dependency 'activesupport'
|
24
30
|
spec.add_dependency 'bunny', '>= 1.4', '< 3.0'
|
25
31
|
|
data/scripts/simple_test.rb
CHANGED
@@ -34,6 +34,12 @@ describe Msgr::Route do
|
|
34
34
|
described_class.new routing_key, to: 'abc'
|
35
35
|
end.to raise_error ArgumentError, /invalid consumer format/i
|
36
36
|
end
|
37
|
+
|
38
|
+
it 'allows namespaces in consumer' do
|
39
|
+
expect do
|
40
|
+
described_class.new routing_key, to: 'abc/def#ghi'
|
41
|
+
end.not_to raise_error
|
42
|
+
end
|
37
43
|
end
|
38
44
|
|
39
45
|
describe '#consumer' do
|
@@ -44,10 +50,18 @@ describe Msgr::Route do
|
|
44
50
|
context 'with underscore consumer name' do
|
45
51
|
let(:options) { super().merge to: 'test_resource_foo#index' }
|
46
52
|
|
47
|
-
it 'returns camelized
|
53
|
+
it 'returns camelized class name' do
|
48
54
|
expect(route.consumer).to eq 'TestResourceFooConsumer'
|
49
55
|
end
|
50
56
|
end
|
57
|
+
|
58
|
+
context 'with nested namespace in consumer name' do
|
59
|
+
let(:options) { super().merge to: 'nested/namespace/foo#index' }
|
60
|
+
|
61
|
+
it 'returns fully classified, classified class name' do
|
62
|
+
expect(route.consumer).to eq 'Nested::Namespace::FooConsumer'
|
63
|
+
end
|
64
|
+
end
|
51
65
|
end
|
52
66
|
|
53
67
|
describe '#action' do
|
data/spec/unit/msgr_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: msgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -67,11 +67,9 @@ extensions: []
|
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
69
|
- ".editorconfig"
|
70
|
-
- ".github/workflows/
|
71
|
-
- ".github/workflows/lint.yml"
|
70
|
+
- ".github/workflows/test.yml"
|
72
71
|
- ".gitignore"
|
73
72
|
- ".rubocop.yml"
|
74
|
-
- ".travis.yml"
|
75
73
|
- Appraisals
|
76
74
|
- CHANGELOG.md
|
77
75
|
- Gemfile
|
@@ -82,7 +80,8 @@ files:
|
|
82
80
|
- gemfiles/rails_5.2.gemfile
|
83
81
|
- gemfiles/rails_6.0.gemfile
|
84
82
|
- gemfiles/rails_6.1.gemfile
|
85
|
-
- gemfiles/
|
83
|
+
- gemfiles/rails_7.0.gemfile
|
84
|
+
- gemfiles/rails_head.gemfile
|
86
85
|
- lib/msgr.rb
|
87
86
|
- lib/msgr/binding.rb
|
88
87
|
- lib/msgr/channel.rb
|
@@ -101,6 +100,7 @@ files:
|
|
101
100
|
- lib/msgr/test_pool.rb
|
102
101
|
- lib/msgr/version.rb
|
103
102
|
- msgr.gemspec
|
103
|
+
- renovate.json
|
104
104
|
- scripts/simple_test.rb
|
105
105
|
- spec/fixtures/msgr_routes_test_1.rb
|
106
106
|
- spec/fixtures/msgr_routes_test_drain.rb
|
@@ -145,7 +145,8 @@ files:
|
|
145
145
|
homepage: https://github.com/jgraichen/msgr
|
146
146
|
licenses:
|
147
147
|
- MIT
|
148
|
-
metadata:
|
148
|
+
metadata:
|
149
|
+
rubygems_mfa_required: 'true'
|
149
150
|
post_install_message:
|
150
151
|
rdoc_options: []
|
151
152
|
require_paths:
|
@@ -154,14 +155,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
155
|
requirements:
|
155
156
|
- - ">="
|
156
157
|
- !ruby/object:Gem::Version
|
157
|
-
version: '
|
158
|
+
version: '2.5'
|
158
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
160
|
requirements:
|
160
161
|
- - ">="
|
161
162
|
- !ruby/object:Gem::Version
|
162
163
|
version: '0'
|
163
164
|
requirements: []
|
164
|
-
rubygems_version: 3.
|
165
|
+
rubygems_version: 3.1.6
|
165
166
|
signing_key:
|
166
167
|
specification_version: 4
|
167
168
|
summary: 'Msgr: Rails-like Messaging Framework'
|
data/.github/workflows/build.yml
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
name: Build
|
2
|
-
on: [push]
|
3
|
-
jobs:
|
4
|
-
test:
|
5
|
-
name: Ruby ${{ matrix.ruby }} / ${{ matrix.gemfile }}
|
6
|
-
runs-on: ubuntu-20.04
|
7
|
-
|
8
|
-
strategy:
|
9
|
-
matrix:
|
10
|
-
ruby:
|
11
|
-
- '2.7'
|
12
|
-
- '2.6'
|
13
|
-
- '2.5'
|
14
|
-
gemfile:
|
15
|
-
- rails_5.2.gemfile
|
16
|
-
- rails_6.0.gemfile
|
17
|
-
- rails_6.1.gemfile
|
18
|
-
fail-fast: false
|
19
|
-
|
20
|
-
services:
|
21
|
-
rabbitmq:
|
22
|
-
image: rabbitmq:latest
|
23
|
-
options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s --health-timeout 5s --health-retries 5
|
24
|
-
ports:
|
25
|
-
- 5672:5672
|
26
|
-
|
27
|
-
steps:
|
28
|
-
- uses: actions/checkout@master
|
29
|
-
|
30
|
-
- name: Setup Ruby
|
31
|
-
uses: ruby/setup-ruby@v1
|
32
|
-
with:
|
33
|
-
ruby-version: ${{ matrix.ruby }}
|
34
|
-
bundler-cache: true
|
35
|
-
bundler: 1
|
36
|
-
env:
|
37
|
-
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
38
|
-
BUNDLE_WITHOUT: development
|
39
|
-
BUNDLE_JOBS: 4
|
40
|
-
BUNDLE_RETRY: 3
|
41
|
-
|
42
|
-
- name: Run unit tests
|
43
|
-
env:
|
44
|
-
AMQP_SERVER: amqp://localhost:5672
|
45
|
-
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
46
|
-
run: bundle exec rspec -Ispec/unit --color spec/unit
|
47
|
-
|
48
|
-
- name: Run integration tests
|
49
|
-
env:
|
50
|
-
AMQP_SERVER: amqp://localhost:5672
|
51
|
-
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}
|
52
|
-
run: bundle exec rspec -Ispec/integration --color spec/integration
|
data/.github/workflows/lint.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
name: Lint
|
2
|
-
on: [push]
|
3
|
-
jobs:
|
4
|
-
rubocop:
|
5
|
-
name: rubocop
|
6
|
-
runs-on: ubuntu-20.04
|
7
|
-
|
8
|
-
steps:
|
9
|
-
- uses: actions/checkout@master
|
10
|
-
- uses: ruby/setup-ruby@v1
|
11
|
-
with:
|
12
|
-
ruby-version: 2.6
|
13
|
-
bundler-cache: true
|
14
|
-
env:
|
15
|
-
BUNDLE_WITHOUT: development
|
16
|
-
BUNDLE_JOBS: 4
|
17
|
-
BUNDLE_RETRY: 3
|
18
|
-
|
19
|
-
- name: Run rubocop
|
20
|
-
run: bundle exec rubocop --parallel --color
|
data/.travis.yml
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
dist: bionic
|
2
|
-
language: ruby
|
3
|
-
cache: bundler
|
4
|
-
rvm:
|
5
|
-
- 2.7.0
|
6
|
-
- 2.6.5
|
7
|
-
- 2.5.7
|
8
|
-
gemfile:
|
9
|
-
- gemfiles/rails_42.gemfile
|
10
|
-
- gemfiles/rails_50.gemfile
|
11
|
-
- gemfiles/rails_51.gemfile
|
12
|
-
- gemfiles/rails_52.gemfile
|
13
|
-
- gemfiles/rails_60.gemfile
|
14
|
-
- gemfiles/rails_master.gemfile
|
15
|
-
before_install:
|
16
|
-
- sudo apt-get install -qy rabbitmq-server
|
17
|
-
- echo yes | rvm gemset delete global
|
18
|
-
- gem install bundler --version '~> 1.0'
|
19
|
-
script:
|
20
|
-
- bundle exec rake spec:unit
|
21
|
-
- bundle exec rake spec:integration
|
22
|
-
jobs:
|
23
|
-
allow_failures:
|
24
|
-
- gemfile: gemfiles/rails_master.gemfile
|
25
|
-
exclude:
|
26
|
-
- rvm: 2.7.0
|
27
|
-
gemfile: gemfiles/rails_42.gemfile
|
28
|
-
- rvm: 2.6.5
|
29
|
-
gemfile: gemfiles/rails_42.gemfile
|