rabbit_feed 0.3.1 → 1.0.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/DEVELOPING.md +6 -6
- data/Gemfile +1 -0
- data/Gemfile.lock +60 -52
- data/README.md +30 -14
- data/example/non_rails_app/Gemfile.lock +27 -23
- data/example/non_rails_app/bin/benchmark +3 -5
- data/example/non_rails_app/spec/lib/non_rails_app/event_routing_spec.rb +2 -4
- data/example/non_rails_app/spec/spec_helper.rb +3 -11
- data/example/rails_app/Gemfile +1 -1
- data/example/rails_app/Gemfile.lock +111 -94
- data/example/rails_app/config/environments/development.rb +1 -1
- data/example/rails_app/config/environments/test.rb +1 -1
- data/example/rails_app/config/initializers/rabbit_feed.rb +0 -7
- data/example/rails_app/spec/controllers/beavers_controller_spec.rb +1 -1
- data/example/rails_app/spec/event_routing_spec.rb +2 -5
- data/example/rails_app/spec/rails_helper.rb +52 -0
- data/example/rails_app/spec/spec_helper.rb +1 -44
- data/lib/rabbit_feed/client.rb +23 -11
- data/lib/rabbit_feed/configuration.rb +2 -0
- data/lib/rabbit_feed/event_routing.rb +31 -7
- data/lib/rabbit_feed/producer.rb +0 -4
- data/lib/rabbit_feed/testing_support/rspec_matchers/publish_event.rb +11 -15
- data/lib/rabbit_feed/testing_support/test_rabbit_feed_consumer.rb +10 -0
- data/lib/rabbit_feed/testing_support/testing_helpers.rb +1 -7
- data/lib/rabbit_feed/testing_support.rb +32 -0
- data/lib/rabbit_feed/version.rb +1 -1
- data/lib/rabbit_feed.rb +5 -4
- data/rabbit_feed.gemspec +8 -8
- data/spec/lib/rabbit_feed/configuration_spec.rb +15 -7
- data/spec/lib/rabbit_feed/event_routing_spec.rb +41 -1
- data/spec/lib/rabbit_feed/producer_spec.rb +1 -1
- data/spec/lib/rabbit_feed/testing_support/rspec_matchers/publish_event_spec.rb +17 -2
- data/spec/lib/rabbit_feed/testing_support/testing_helper_spec.rb +0 -3
- data/spec/spec_helper.rb +6 -1
- metadata +53 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64fedeb5c96ffd2d48c0f6f0d09067303cfb9a10
|
4
|
+
data.tar.gz: 3da6624dc2bc0e772600af8a8ad5791ebfd0ade3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 754014379239da761351fc1d8cba7650cf9bf965f12964b614ef5932780ec179c74f78bab33fe8f7976039a87a1a3d9399b87b06145339cb4f00599adeb7e328
|
7
|
+
data.tar.gz: 2d051848279f928e5bd9de87fc1c732a854d93c776dd080069877065b98765d905c22d90ac081b806431199d43c48c5ba79943ce07bd2f5e3b433c54bfaddf57
|
data/DEVELOPING.md
CHANGED
@@ -100,15 +100,15 @@ Results in this output:
|
|
100
100
|
|
101
101
|
Transactions: 200 hits
|
102
102
|
Availability: 100.00 %
|
103
|
-
Elapsed time: 1.
|
103
|
+
Elapsed time: 1.11 secs
|
104
104
|
Data transferred: 0.16 MB
|
105
|
-
Response time: 0.
|
106
|
-
Transaction rate:
|
107
|
-
Throughput: 0.
|
108
|
-
Concurrency:
|
105
|
+
Response time: 0.05 secs
|
106
|
+
Transaction rate: 180.18 trans/sec
|
107
|
+
Throughput: 0.14 MB/sec
|
108
|
+
Concurrency: 9.37
|
109
109
|
Successful transactions: 100
|
110
110
|
Failed transactions: 0
|
111
|
-
Longest transaction: 0.
|
111
|
+
Longest transaction: 0.57
|
112
112
|
Shortest transaction: 0.00
|
113
113
|
|
114
114
|
Stopping rails application...
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,70 +1,70 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rabbit_feed (0.
|
5
|
-
activemodel
|
6
|
-
activesupport
|
7
|
-
avro
|
8
|
-
bunny
|
9
|
-
connection_pool
|
4
|
+
rabbit_feed (1.0.0)
|
5
|
+
activemodel (>= 3.2.0, < 5.0.0)
|
6
|
+
activesupport (>= 3.2.0, < 5.0.0)
|
7
|
+
avro (>= 1.5.4, < 1.8.0)
|
8
|
+
bunny (>= 1.1.9, < 1.7.0)
|
9
|
+
connection_pool (< 2.2.0)
|
10
10
|
pidfile
|
11
11
|
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org/
|
14
14
|
specs:
|
15
|
-
activemodel (4.
|
16
|
-
activesupport (= 4.
|
15
|
+
activemodel (4.2.0)
|
16
|
+
activesupport (= 4.2.0)
|
17
17
|
builder (~> 3.1)
|
18
|
-
activesupport (4.
|
19
|
-
i18n (~> 0.
|
18
|
+
activesupport (4.2.0)
|
19
|
+
i18n (~> 0.7)
|
20
20
|
json (~> 1.7, >= 1.7.7)
|
21
21
|
minitest (~> 5.1)
|
22
|
-
thread_safe (~> 0.
|
22
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
23
23
|
tzinfo (~> 1.1)
|
24
24
|
amq-protocol (1.9.2)
|
25
25
|
avro (1.7.7)
|
26
26
|
multi_json
|
27
27
|
binding_of_caller (0.7.2)
|
28
28
|
debug_inspector (>= 0.0.1)
|
29
|
-
bond (0.
|
29
|
+
bond (0.5.1)
|
30
30
|
builder (3.2.2)
|
31
31
|
bunny (1.6.3)
|
32
32
|
amq-protocol (>= 1.9.2)
|
33
|
-
codeclimate-test-reporter (0.
|
33
|
+
codeclimate-test-reporter (0.4.3)
|
34
34
|
simplecov (>= 0.7.1, < 1.0.0)
|
35
35
|
coderay (1.1.0)
|
36
|
-
columnize (0.
|
37
|
-
connection_pool (2.
|
36
|
+
columnize (0.9.0)
|
37
|
+
connection_pool (2.1.0)
|
38
38
|
debug_inspector (0.0.2)
|
39
|
-
debugger (1.6.
|
39
|
+
debugger (1.6.8)
|
40
40
|
columnize (>= 0.3.1)
|
41
41
|
debugger-linecache (~> 1.2.0)
|
42
|
-
debugger-ruby_core_source (~> 1.3.
|
42
|
+
debugger-ruby_core_source (~> 1.3.5)
|
43
43
|
debugger-linecache (1.2.0)
|
44
|
-
debugger-ruby_core_source (1.3.
|
44
|
+
debugger-ruby_core_source (1.3.7)
|
45
45
|
diff-lcs (1.2.5)
|
46
|
-
docile (1.1.
|
46
|
+
docile (1.1.5)
|
47
47
|
gherkin (2.12.2)
|
48
48
|
multi_json (~> 1.3)
|
49
|
-
i18n (0.
|
50
|
-
interception (0.
|
49
|
+
i18n (0.7.0)
|
50
|
+
interception (0.5)
|
51
51
|
jist (1.5.1)
|
52
52
|
json
|
53
53
|
json (1.8.1)
|
54
54
|
method_source (0.8.2)
|
55
|
-
minitest (5.
|
56
|
-
multi_json (1.
|
55
|
+
minitest (5.5.0)
|
56
|
+
multi_json (1.10.1)
|
57
57
|
pidfile (0.3.0)
|
58
|
-
pry (0.
|
59
|
-
coderay (~> 1.0)
|
60
|
-
method_source (~> 0.8)
|
58
|
+
pry (0.10.1)
|
59
|
+
coderay (~> 1.1.0)
|
60
|
+
method_source (~> 0.8.1)
|
61
61
|
slop (~> 3.4)
|
62
|
-
pry-debugger (0.2.
|
62
|
+
pry-debugger (0.2.3)
|
63
63
|
debugger (~> 1.3)
|
64
|
-
pry (
|
65
|
-
pry-doc (0.
|
66
|
-
pry (
|
67
|
-
yard (
|
64
|
+
pry (>= 0.9.10, < 0.11.0)
|
65
|
+
pry-doc (0.6.0)
|
66
|
+
pry (~> 0.9)
|
67
|
+
yard (~> 0.8)
|
68
68
|
pry-docmore (0.1.1)
|
69
69
|
pry
|
70
70
|
pry-doc
|
@@ -76,37 +76,44 @@ GEM
|
|
76
76
|
pry-docmore
|
77
77
|
pry-rescue
|
78
78
|
pry-stack_explorer
|
79
|
-
pry-rescue (1.
|
80
|
-
interception (>= 0.
|
79
|
+
pry-rescue (1.4.1)
|
80
|
+
interception (>= 0.5)
|
81
81
|
pry
|
82
82
|
pry-stack_explorer (0.4.9.1)
|
83
83
|
binding_of_caller (>= 0.7)
|
84
84
|
pry (>= 0.9.11)
|
85
|
-
rake (10.
|
86
|
-
rspec (
|
87
|
-
rspec-core (~>
|
88
|
-
rspec-expectations (~>
|
89
|
-
rspec-mocks (~>
|
90
|
-
rspec-core (
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
85
|
+
rake (10.4.2)
|
86
|
+
rspec (3.1.0)
|
87
|
+
rspec-core (~> 3.1.0)
|
88
|
+
rspec-expectations (~> 3.1.0)
|
89
|
+
rspec-mocks (~> 3.1.0)
|
90
|
+
rspec-core (3.1.7)
|
91
|
+
rspec-support (~> 3.1.0)
|
92
|
+
rspec-expectations (3.1.2)
|
93
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
94
|
+
rspec-support (~> 3.1.0)
|
95
|
+
rspec-its (1.1.0)
|
96
|
+
rspec-core (>= 3.0.0)
|
97
|
+
rspec-expectations (>= 3.0.0)
|
98
|
+
rspec-mocks (3.1.3)
|
99
|
+
rspec-support (~> 3.1.0)
|
100
|
+
rspec-support (3.1.2)
|
101
|
+
rutabaga (0.1.1)
|
102
|
+
turnip (>= 1.1.0, < 2.0)
|
103
|
+
simplecov (0.9.1)
|
97
104
|
docile (~> 1.1.0)
|
98
|
-
multi_json
|
105
|
+
multi_json (~> 1.0)
|
99
106
|
simplecov-html (~> 0.8.0)
|
100
107
|
simplecov-html (0.8.0)
|
101
|
-
slop (3.
|
108
|
+
slop (3.6.0)
|
102
109
|
thread_safe (0.3.4)
|
103
|
-
timecop (0.
|
104
|
-
turnip (1.2.
|
110
|
+
timecop (0.7.1)
|
111
|
+
turnip (1.2.4)
|
105
112
|
gherkin (>= 2.5)
|
106
|
-
rspec (>= 2.0, < 4.0)
|
113
|
+
rspec (>= 2.14.0, < 4.0)
|
107
114
|
tzinfo (1.2.2)
|
108
115
|
thread_safe (~> 0.1)
|
109
|
-
yard (0.8.7.
|
116
|
+
yard (0.8.7.6)
|
110
117
|
|
111
118
|
PLATFORMS
|
112
119
|
ruby
|
@@ -116,6 +123,7 @@ DEPENDENCIES
|
|
116
123
|
pry-plus
|
117
124
|
rabbit_feed!
|
118
125
|
rake
|
119
|
-
rspec
|
126
|
+
rspec (>= 2.14.0, < 3.2.0)
|
127
|
+
rspec-its
|
120
128
|
rutabaga
|
121
129
|
timecop
|
data/README.md
CHANGED
@@ -41,11 +41,6 @@ Sample:
|
|
41
41
|
If installing in a rails application, the following should be defined in `config/initializers/rabbit_feed.rb`:
|
42
42
|
|
43
43
|
```ruby
|
44
|
-
RabbitFeed.instance_eval do
|
45
|
-
self.log = Logger.new (Rails.root.join 'log', 'rabbit_feed.log')
|
46
|
-
self.environment = Rails.env
|
47
|
-
self.configuration_file_path = Rails.root.join 'config', 'rabbit_feed.yml'
|
48
|
-
end
|
49
44
|
# Define the events (if producing)
|
50
45
|
EventDefinitions do
|
51
46
|
define_event('user_creates_beaver', version: '1.0.0') do
|
@@ -67,6 +62,16 @@ EventRouting do
|
|
67
62
|
end
|
68
63
|
```
|
69
64
|
|
65
|
+
You may also override the log location (defaults to `STDOUT`), the environment (defaults to the `RAILS_ENV`), and the path to the RabbitFeed config file (defaults to `config/rabbit_feed.yml`) in the initializer, like this:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
RabbitFeed.instance_eval do
|
69
|
+
self.log = Logger.new (Rails.root.join 'log', 'rabbit_feed.log')
|
70
|
+
self.environment = Rails.env
|
71
|
+
self.configuration_file_path = Rails.root.join 'config', 'rabbit_feed.yml'
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
70
75
|
## Producing events
|
71
76
|
|
72
77
|
The producer defines the events and their payloads using the [Event Definitions DSL](https://github.com/simplybusiness/rabbit_feed#event-definitions-dsl). In a rails app, this can be defined in the [initialiser](https://github.com/simplybusiness/rabbit_feed#initialisation).
|
@@ -90,11 +95,11 @@ In the case that there are no consumers configured to subscribe to an event, the
|
|
90
95
|
|
91
96
|
### Testing the Producer
|
92
97
|
|
93
|
-
To prevent RabbitFeed from
|
98
|
+
To prevent RabbitFeed from publishing events to RabbitMQ during tests, add the following to `spec_helper.rb`:
|
94
99
|
|
95
100
|
```ruby
|
96
|
-
|
97
|
-
RabbitFeed::
|
101
|
+
RSpec.configure do |config|
|
102
|
+
RabbitFeed::TestingSupport.capture_published_events(config)
|
98
103
|
end
|
99
104
|
```
|
100
105
|
|
@@ -102,11 +107,11 @@ end
|
|
102
107
|
|
103
108
|
To verify that your application publishes an event, use the custom RSpec matcher provided with this application.
|
104
109
|
|
105
|
-
|
110
|
+
To make the custom RSpec matcher available to your tests, add the following to `spec_helper.rb`:
|
106
111
|
|
107
112
|
```ruby
|
108
113
|
RSpec.configure do |config|
|
109
|
-
|
114
|
+
RabbitFeed::TestingSupport.setup(config)
|
110
115
|
end
|
111
116
|
```
|
112
117
|
|
@@ -153,13 +158,10 @@ In the case that your consumer raises an error whilst processing an event, the e
|
|
153
158
|
|
154
159
|
### Testing the Consumer
|
155
160
|
|
156
|
-
If you want to test that your routes are behaving as expected without actually using RabbitMQ, you can
|
161
|
+
If you want to test that your routes are behaving as expected without actually using RabbitMQ, you can invoke `rabbit_feed_consumer.consume_event(event)`. The following is an example:
|
157
162
|
|
158
163
|
```ruby
|
159
164
|
describe 'consuming events' do
|
160
|
-
|
161
|
-
include RabbitFeed::TestingSupport::TestingHelpers
|
162
|
-
|
163
165
|
accumulator = []
|
164
166
|
|
165
167
|
let(:define_route) do
|
@@ -183,6 +185,14 @@ describe 'consuming events' do
|
|
183
185
|
end
|
184
186
|
```
|
185
187
|
|
188
|
+
To make the `rabbit_feed_consumer` method available to your tests, add the following to `spec_helper.rb`:
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
RSpec.configure do |config|
|
192
|
+
RabbitFeed::TestingSupport.setup(config)
|
193
|
+
end
|
194
|
+
```
|
195
|
+
|
186
196
|
## Command Line Tools
|
187
197
|
|
188
198
|
### Event Publish
|
@@ -215,6 +225,12 @@ Starts a consumer. Note: until you've specified the [event routing](https://gith
|
|
215
225
|
--daemon Run the consumer as a daemon
|
216
226
|
--help Print the available options
|
217
227
|
|
228
|
+
### Stopping the consumer
|
229
|
+
|
230
|
+
bundle exec bin/rabbit_feed shutdown
|
231
|
+
|
232
|
+
_This only applies if you've started the consumer with the `--daemon` option._
|
233
|
+
|
218
234
|
## Event Definitions DSL
|
219
235
|
|
220
236
|
Provides a means to define all events that are published by an application. Defines the event names and the payload associated with each event. The DSL is converted into a schema that is serialized along with the event payload, meaning the events are self-describing. This is accomplished using Apache [Avro](http://avro.apache.org/docs/current/). This also validates the event payload against its schema before it is published.
|
@@ -1,25 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../
|
3
3
|
specs:
|
4
|
-
rabbit_feed (0.
|
5
|
-
activemodel
|
6
|
-
activesupport
|
7
|
-
avro
|
8
|
-
bunny
|
9
|
-
connection_pool
|
4
|
+
rabbit_feed (0.4.0)
|
5
|
+
activemodel (>= 3.2.0, < 5.0.0)
|
6
|
+
activesupport (>= 3.2.0, < 5.0.0)
|
7
|
+
avro (>= 1.5.4, < 1.8.0)
|
8
|
+
bunny (>= 1.1.9, < 1.7.0)
|
9
|
+
connection_pool (< 2.2.0)
|
10
10
|
pidfile
|
11
11
|
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org/
|
14
14
|
specs:
|
15
|
-
activemodel (4.
|
16
|
-
activesupport (= 4.
|
15
|
+
activemodel (4.2.0)
|
16
|
+
activesupport (= 4.2.0)
|
17
17
|
builder (~> 3.1)
|
18
|
-
activesupport (4.
|
19
|
-
i18n (~> 0.
|
18
|
+
activesupport (4.2.0)
|
19
|
+
i18n (~> 0.7)
|
20
20
|
json (~> 1.7, >= 1.7.7)
|
21
21
|
minitest (~> 5.1)
|
22
|
-
thread_safe (~> 0.
|
22
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
23
23
|
tzinfo (~> 1.1)
|
24
24
|
amq-protocol (1.9.2)
|
25
25
|
avro (1.7.7)
|
@@ -27,22 +27,26 @@ GEM
|
|
27
27
|
builder (3.2.2)
|
28
28
|
bunny (1.6.3)
|
29
29
|
amq-protocol (>= 1.9.2)
|
30
|
-
connection_pool (2.
|
30
|
+
connection_pool (2.1.0)
|
31
31
|
diff-lcs (1.2.5)
|
32
|
-
i18n (0.
|
32
|
+
i18n (0.7.0)
|
33
33
|
json (1.8.1)
|
34
|
-
minitest (5.
|
34
|
+
minitest (5.5.0)
|
35
35
|
multi_json (1.10.1)
|
36
36
|
pidfile (0.3.0)
|
37
|
-
rake (10.
|
38
|
-
rspec (
|
39
|
-
rspec-core (~>
|
40
|
-
rspec-expectations (~>
|
41
|
-
rspec-mocks (~>
|
42
|
-
rspec-core (
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
rake (10.4.2)
|
38
|
+
rspec (3.1.0)
|
39
|
+
rspec-core (~> 3.1.0)
|
40
|
+
rspec-expectations (~> 3.1.0)
|
41
|
+
rspec-mocks (~> 3.1.0)
|
42
|
+
rspec-core (3.1.7)
|
43
|
+
rspec-support (~> 3.1.0)
|
44
|
+
rspec-expectations (3.1.2)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.1.0)
|
47
|
+
rspec-mocks (3.1.3)
|
48
|
+
rspec-support (~> 3.1.0)
|
49
|
+
rspec-support (3.1.2)
|
46
50
|
thread_safe (0.3.4)
|
47
51
|
tzinfo (1.2.2)
|
48
52
|
thread_safe (~> 0.1)
|
@@ -2,16 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'benchmark'
|
4
4
|
require 'bundler/setup'
|
5
|
-
|
5
|
+
require 'rabbit_feed'
|
6
6
|
|
7
7
|
# Prevent deprecation warnings
|
8
8
|
I18n.enforce_available_locales = true
|
9
9
|
|
10
10
|
RabbitFeed.instance_eval do
|
11
|
-
self.log
|
12
|
-
self.
|
13
|
-
self.environment = 'development'
|
14
|
-
self.configuration_file_path = 'config/rabbit_feed.yml'
|
11
|
+
self.log = Logger.new 'log/rabbit_feed.log'
|
12
|
+
self.environment = 'development'
|
15
13
|
end
|
16
14
|
|
17
15
|
payload = 'abc'*5000
|
@@ -2,12 +2,10 @@ require_relative '../../spec_helper'
|
|
2
2
|
|
3
3
|
module NonRailsApp
|
4
4
|
describe 'Event Routing' do
|
5
|
-
|
6
|
-
include RabbitFeed::TestingSupport::TestingHelpers
|
7
|
-
|
8
5
|
let(:event) { {'application' => 'rails_app', 'name' => 'user_creates_beaver'} }
|
6
|
+
|
9
7
|
it 'routes events correctly' do
|
10
|
-
expect(NonRailsApp::EventHandler).to receive(:handle_event)
|
8
|
+
expect(NonRailsApp::EventHandler).to receive(:handle_event) { |full_event| expect(full_event.payload).to eq(event)}
|
11
9
|
rabbit_feed_consumer.consume_event(event)
|
12
10
|
end
|
13
11
|
end
|
@@ -13,19 +13,11 @@ RSpec.configure do |config|
|
|
13
13
|
# order dependency and want to debug it, you can fix the order by providing
|
14
14
|
# the seed, which is printed after each run.
|
15
15
|
# --seed 1234
|
16
|
-
config.order =
|
16
|
+
config.order = 'random'
|
17
17
|
|
18
|
-
config
|
19
|
-
c.syntax = [:should, :expect]
|
20
|
-
end
|
21
|
-
|
22
|
-
config.before :each do
|
23
|
-
RabbitFeed::Producer.stub!
|
24
|
-
end
|
25
|
-
|
26
|
-
config.include(RabbitFeed::TestingSupport::RSpecMatchers)
|
18
|
+
RabbitFeed::TestingSupport.setup(config)
|
27
19
|
end
|
28
20
|
|
29
|
-
RabbitFeed.log = Logger.new('
|
21
|
+
RabbitFeed.log = Logger.new('log/rabbit_feed.log')
|
30
22
|
RabbitFeed.environment = 'test'
|
31
23
|
RabbitFeed.configuration_file_path = 'config/rabbit_feed.yml'
|
data/example/rails_app/Gemfile
CHANGED