rabbit_feed 2.4.4 → 3.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +81 -0
  4. data/README.md +39 -5
  5. data/Rakefile +3 -19
  6. data/bin/rabbit_feed +0 -1
  7. data/example/non_rails_app/Gemfile.lock +29 -32
  8. data/example/non_rails_app/Rakefile +1 -1
  9. data/example/non_rails_app/bin/benchmark +3 -3
  10. data/example/non_rails_app/lib/non_rails_app/event_handler.rb +1 -1
  11. data/example/non_rails_app/spec/lib/non_rails_app/event_handler_spec.rb +3 -4
  12. data/example/non_rails_app/spec/lib/non_rails_app/event_routing_spec.rb +3 -3
  13. data/example/rails_app/Gemfile +4 -16
  14. data/example/rails_app/Gemfile.lock +131 -137
  15. data/example/rails_app/app/assets/javascripts/application.js +0 -1
  16. data/example/rails_app/app/controllers/application_controller.rb +0 -3
  17. data/example/rails_app/app/controllers/beavers_controller.rb +14 -15
  18. data/example/rails_app/bin/rails +1 -1
  19. data/example/rails_app/config/environments/development.rb +1 -1
  20. data/example/rails_app/config/environments/test.rb +2 -2
  21. data/example/rails_app/config/initializers/cookies_serializer.rb +1 -1
  22. data/example/rails_app/config/unicorn.rb +1 -1
  23. data/example/rails_app/config.ru +1 -1
  24. data/example/rails_app/db/schema.rb +5 -7
  25. data/example/rails_app/lib/event_handler.rb +1 -1
  26. data/example/rails_app/spec/controllers/beavers_controller_spec.rb +9 -10
  27. data/example/rails_app/spec/event_routing_spec.rb +1 -2
  28. data/example/rails_app/test/controllers/beavers_controller_test.rb +12 -12
  29. data/lib/dsl.rb +4 -4
  30. data/lib/rabbit_feed/client.rb +17 -23
  31. data/lib/rabbit_feed/configuration.rb +10 -9
  32. data/lib/rabbit_feed/connection.rb +3 -3
  33. data/lib/rabbit_feed/console_consumer.rb +22 -24
  34. data/lib/rabbit_feed/consumer.rb +2 -2
  35. data/lib/rabbit_feed/consumer_connection.rb +21 -22
  36. data/lib/rabbit_feed/event.rb +8 -28
  37. data/lib/rabbit_feed/event_definitions.rb +14 -15
  38. data/lib/rabbit_feed/event_routing.rb +26 -27
  39. data/lib/rabbit_feed/json_log_formatter.rb +1 -1
  40. data/lib/rabbit_feed/producer.rb +13 -13
  41. data/lib/rabbit_feed/producer_connection.rb +8 -9
  42. data/lib/rabbit_feed/testing_support/rspec_matchers/publish_event.rb +52 -89
  43. data/lib/rabbit_feed/testing_support/test_rabbit_feed_consumer.rb +1 -2
  44. data/lib/rabbit_feed/testing_support/testing_helpers.rb +0 -1
  45. data/lib/rabbit_feed/testing_support.rb +5 -6
  46. data/lib/rabbit_feed/version.rb +1 -1
  47. data/lib/rabbit_feed.rb +12 -13
  48. data/rabbit_feed.gemspec +16 -14
  49. data/run_benchmark +4 -3
  50. data/run_example +1 -1
  51. data/spec/features/step_definitions/connectivity_steps.rb +6 -9
  52. data/spec/lib/rabbit_feed/client_spec.rb +8 -9
  53. data/spec/lib/rabbit_feed/configuration_spec.rb +20 -23
  54. data/spec/lib/rabbit_feed/console_consumer_spec.rb +11 -13
  55. data/spec/lib/rabbit_feed/consumer_connection_spec.rb +26 -28
  56. data/spec/lib/rabbit_feed/event_definitions_spec.rb +31 -31
  57. data/spec/lib/rabbit_feed/event_routing_spec.rb +35 -62
  58. data/spec/lib/rabbit_feed/event_spec.rb +40 -87
  59. data/spec/lib/rabbit_feed/producer_connection_spec.rb +11 -7
  60. data/spec/lib/rabbit_feed/producer_spec.rb +16 -19
  61. data/spec/lib/rabbit_feed/testing_support/rspec_matchers/publish_event_spec.rb +82 -87
  62. data/spec/lib/rabbit_feed/testing_support/testing_helper_spec.rb +2 -2
  63. data/spec/spec_helper.rb +4 -10
  64. metadata +67 -45
  65. data/example/rails_app/README.rdoc +0 -28
@@ -5,7 +5,7 @@ module RabbitFeed
5
5
  let(:pidfile) { './test.pid' }
6
6
  let(:config_file) { 'spec/fixtures/configuration.yml' }
7
7
  let(:environment) { 'test' }
8
- let(:require_file){ 'rabbit_feed.rb' }
8
+ let(:require_file) { 'rabbit_feed.rb' }
9
9
  let(:application) { 'rabbit_feed_test' }
10
10
  let(:arguments) do
11
11
  [
@@ -31,10 +31,9 @@ module RabbitFeed
31
31
  RabbitFeed.log = nil
32
32
  RabbitFeed.configuration_file_path = nil
33
33
  end
34
- subject{ described_class.new arguments }
34
+ subject { described_class.new arguments }
35
35
 
36
36
  describe '.new' do
37
-
38
37
  it { should be_valid }
39
38
 
40
39
  it 'sets the environment' do
@@ -61,7 +60,7 @@ module RabbitFeed
61
60
  let(:command) { 'blah' }
62
61
 
63
62
  it 'should be invalid' do
64
- expect{subject}.to raise_error Error
63
+ expect { subject }.to raise_error Error
65
64
  end
66
65
  end
67
66
 
@@ -69,7 +68,7 @@ module RabbitFeed
69
68
  let(:logfile) { '/blah/blah.log' }
70
69
 
71
70
  it 'should be invalid' do
72
- expect{subject}.to raise_error Error
71
+ expect { subject }.to raise_error Error
73
72
  end
74
73
  end
75
74
 
@@ -77,7 +76,7 @@ module RabbitFeed
77
76
  let(:pidfile) { '/blah/blah.pid' }
78
77
 
79
78
  it 'should be invalid' do
80
- expect{subject}.to raise_error Error
79
+ expect { subject }.to raise_error Error
81
80
  end
82
81
  end
83
82
 
@@ -85,7 +84,7 @@ module RabbitFeed
85
84
  let(:config_file) { '/blah/blah.yml' }
86
85
 
87
86
  it 'should be invalid' do
88
- expect{subject}.to raise_error Error
87
+ expect { subject }.to raise_error Error
89
88
  end
90
89
  end
91
90
 
@@ -97,7 +96,7 @@ module RabbitFeed
97
96
  end
98
97
 
99
98
  it 'should be invalid' do
100
- expect{subject}.to raise_error Error
99
+ expect { subject }.to raise_error Error
101
100
  end
102
101
 
103
102
  context 'when the RAILS_ENV is present' do
@@ -115,7 +114,7 @@ module RabbitFeed
115
114
  let(:require_file) { './' }
116
115
 
117
116
  it 'should be invalid' do
118
- expect{subject}.to raise_error Error
117
+ expect { subject }.to raise_error Error
119
118
  end
120
119
  end
121
120
  end
@@ -1,11 +1,10 @@
1
1
  module RabbitFeed
2
2
  describe Configuration do
3
-
4
3
  describe '#queue' do
5
4
  let(:options) do
6
5
  {
7
6
  application: 'rabbit_feed',
8
- environment: 'test',
7
+ environment: 'test'
9
8
  }
10
9
  end
11
10
  subject { (described_class.new options).queue }
@@ -13,13 +12,13 @@ module RabbitFeed
13
12
  it { should eq 'test.rabbit_feed' }
14
13
 
15
14
  context 'when a route_prefix_extension is set' do
16
- let(:options) do
17
- {
18
- application: 'rabbit_feed',
19
- environment: 'test',
20
- route_prefix_extension: 'foobar'
21
- }
22
- end
15
+ let(:options) do
16
+ {
17
+ application: 'rabbit_feed',
18
+ environment: 'test',
19
+ route_prefix_extension: 'foobar'
20
+ }
21
+ end
23
22
 
24
23
  it { should eq 'test.foobar.rabbit_feed' }
25
24
  end
@@ -32,7 +31,7 @@ module RabbitFeed
32
31
  let(:options) do
33
32
  {
34
33
  application: 'rabbit_feed',
35
- environment: 'test',
34
+ environment: 'test'
36
35
  }
37
36
  end
38
37
 
@@ -59,7 +58,7 @@ module RabbitFeed
59
58
  user: 'guest',
60
59
  password: 'guest',
61
60
  port: 1234,
62
- network_recovery_interval: 1,
61
+ network_recovery_interval: 1
63
62
  }
64
63
  end
65
64
 
@@ -79,14 +78,14 @@ module RabbitFeed
79
78
  describe '.load' do
80
79
  let(:file_path) { 'spec/fixtures/configuration.yml' }
81
80
  let(:environment) { 'test_config' }
82
- let(:application) { }
81
+ let(:application) {}
83
82
  subject { described_class.load file_path, environment, application }
84
83
 
85
84
  context 'with missing configuration' do
86
85
  let(:environment) { 'production' }
87
86
 
88
87
  it 'raises an error' do
89
- expect{ subject }.to raise_error ConfigurationError
88
+ expect { subject }.to raise_error ConfigurationError
90
89
  end
91
90
  end
92
91
 
@@ -94,12 +93,11 @@ module RabbitFeed
94
93
  let(:file_path) { 'I do not exist' }
95
94
 
96
95
  it 'raises an error' do
97
- expect{ subject }.to raise_error ConfigurationError
96
+ expect { subject }.to raise_error ConfigurationError
98
97
  end
99
98
  end
100
99
 
101
100
  context 'with configuration' do
102
-
103
101
  its(:host) { should eq 'localhost' }
104
102
  its(:port) { should eq 5672 }
105
103
  its(:user) { should eq 'guest' }
@@ -132,14 +130,14 @@ module RabbitFeed
132
130
  end
133
131
 
134
132
  describe '.new' do
135
- let(:options) {{}}
133
+ let(:options) { {} }
136
134
  subject { described_class.new options }
137
135
 
138
136
  context 'with default options' do
139
137
  let(:options) do
140
138
  {
141
139
  application: 'rabbit_feed',
142
- environment: 'test',
140
+ environment: 'test'
143
141
  }
144
142
  end
145
143
 
@@ -161,8 +159,8 @@ module RabbitFeed
161
159
  let(:options) do
162
160
  {
163
161
  host: 'host_name',
164
- hosts: ['host_name0', 'host_name1'],
165
- port: 12345,
162
+ hosts: %w(host_name0 host_name1),
163
+ port: 12_345,
166
164
  user: 'user_name',
167
165
  password: 'password',
168
166
  application: 'rabbit_feed',
@@ -178,8 +176,8 @@ module RabbitFeed
178
176
  end
179
177
 
180
178
  its(:host) { should eq 'host_name' }
181
- its(:hosts) { should eq ['host_name0', 'host_name1'] }
182
- its(:port) { should eq 12345 }
179
+ its(:hosts) { should eq %w(host_name0 host_name1) }
180
+ its(:port) { should eq 12_345 }
183
181
  its(:user) { should eq 'user_name' }
184
182
  its(:password) { should eq 'password' }
185
183
  its(:application) { should eq 'rabbit_feed' }
@@ -194,9 +192,8 @@ module RabbitFeed
194
192
  end
195
193
 
196
194
  context 'with empty options' do
197
-
198
195
  it 'should raise an error' do
199
- expect{ subject }.to raise_error ConfigurationError
196
+ expect { subject }.to raise_error ConfigurationError
200
197
  end
201
198
  end
202
199
  end
@@ -11,22 +11,19 @@ module RabbitFeed
11
11
  end
12
12
 
13
13
  describe '#init' do
14
-
15
14
  it 'prints a welcome message' do
16
- expect{ subject.init }.to output(
17
- /RabbitFeed console starting at .* UTC\.\.\.
18
- Environment: test
19
- Queue: test\.rabbit_feed_console
20
- Ready\. Press CTRL\+C to exit\./).to_stdout
15
+ expect { subject.init }.to output(
16
+ /RabbitFeed console starting at .* UTC\.\.\.\nEnvironment: test\nQueue: test\.rabbit_feed_console\nReady\. Press CTRL\+C to exit\./
17
+ ).to_stdout
21
18
  end
22
19
 
23
20
  context 'when there are events on the rabbit_feed_console queue' do
24
21
  let(:queue_depth) { 1 }
25
22
 
26
23
  it 'asks to purge the queue' do
27
- expect{ subject.init }.to output(
28
- /There are currently 1 message\(s\) in the console's queue\.
29
- Would you like to purge the queue before proceeding\? \(y\/N\)>/).to_stdout
24
+ expect { subject.init }.to output(
25
+ %r{There are currently 1 message\(s\) in the console's queue\.\nWould you like to purge the queue before proceeding\? \(y\/N\)>}
26
+ ).to_stdout
30
27
  end
31
28
 
32
29
  context 'when the user wishes to purge the queue' do
@@ -34,18 +31,18 @@ Would you like to purge the queue before proceeding\? \(y\/N\)>/).to_stdout
34
31
 
35
32
  it 'purges the queue' do
36
33
  expect(connection).to receive(:purge_queue)
37
- expect{ subject.init }.to output(/Queue purged\./).to_stdout
34
+ expect { subject.init }.to output(/Queue purged\./).to_stdout
38
35
  end
39
36
  end
40
37
  end
41
38
  end
42
39
 
43
40
  describe 'receiving an event' do
44
- let(:event) { Event.new({name: 'name'},{key: :value}) }
41
+ let(:event) { Event.new({ name: 'name' }, key: :value) }
45
42
  before { subject.init }
46
43
 
47
44
  it 'prints the event' do
48
- expect{ rabbit_feed_consumer.consume_event event }.to output(
45
+ expect { rabbit_feed_consumer.consume_event event }.to output(
49
46
  /-----------------------------------------------name: -----------------------------------------------
50
47
  #Event metadata
51
48
  name: name
@@ -53,7 +50,8 @@ name: name
53
50
  #Event payload
54
51
  key: value
55
52
  ----------------------------------------------------------------------------------------------------
56
- 1 events received\./).to_stdout
53
+ 1 events received\./
54
+ ).to_stdout
57
55
  end
58
56
  end
59
57
  end
@@ -1,7 +1,7 @@
1
1
  module RabbitFeed
2
2
  describe ConsumerConnection do
3
- let(:bunny_queue) { double(:bunny_queue, bind: nil, subscribe: nil)}
4
- let(:bunny_channel) { double(:bunny_channel, prefetch: nil, nack: nil, ack: nil, queue: bunny_queue, id: 1)}
3
+ let(:bunny_queue) { double(:bunny_queue, bind: nil, subscribe: nil) }
4
+ let(:bunny_channel) { double(:bunny_channel, prefetch: nil, nack: nil, ack: nil, queue: bunny_queue, id: 1) }
5
5
  let(:bunny_connection) { double(:bunny_connection, start: nil, closed?: false, close: nil, create_channel: bunny_channel) }
6
6
  before do
7
7
  allow(Bunny).to receive(:new).and_return(bunny_connection)
@@ -15,13 +15,13 @@ module RabbitFeed
15
15
  before do
16
16
  EventRouting do
17
17
  accept_from('rabbit_feed') do
18
- event('test') {|event|}
18
+ event('test') { |event| }
19
19
  end
20
20
  end
21
21
  end
22
22
 
23
23
  it 'binds the queue to the exchange' do
24
- expect(bunny_queue).to receive(:bind).with('amq.topic', { routing_key: 'test.rabbit_feed.test'})
24
+ expect(bunny_queue).to receive(:bind).with('amq.topic', routing_key: 'test.rabbit_feed.test')
25
25
  subject
26
26
  end
27
27
 
@@ -36,8 +36,7 @@ module RabbitFeed
36
36
 
37
37
  it 'appends the route_prefix_extension to the routing_key' do
38
38
  expect(bunny_queue).to receive(:bind).with('amq.topic',
39
- { routing_key: 'test_route_prefix_extension.foobar.rabbit_feed.test'}
40
- )
39
+ routing_key: 'test_route_prefix_extension.foobar.rabbit_feed.test')
41
40
  subject
42
41
  end
43
42
  end
@@ -51,34 +50,33 @@ module RabbitFeed
51
50
  end
52
51
 
53
52
  it 'yields the payload' do
54
- subject.consume { |payload| payload.should eq 'payload'}
53
+ subject.consume { |payload| payload.should eq 'payload' }
55
54
  end
56
55
 
57
56
  it 'acknowledges the message' do
58
57
  expect(bunny_channel).to receive(:ack)
59
- subject.consume { }
58
+ subject.consume {}
60
59
  end
61
60
 
62
61
  it 'is synchronized' do
63
62
  expect(subject).to receive(:synchronized).and_call_original
64
- subject.consume { }
63
+ subject.consume {}
65
64
  end
66
65
 
67
66
  it 'cancels the consumer' do
68
67
  expect_any_instance_of(described_class).to receive(:cancel_consumer)
69
- subject.consume { }
68
+ subject.consume {}
70
69
  end
71
70
 
72
71
  context 'when consuming' do
73
72
  before { allow(subject.send(:mutex)).to receive(:locked?).and_return(true) }
74
73
 
75
74
  it 'raises when attempting to consume in parallel' do
76
- expect{ subject.consume { } }.to raise_error 'This connection already has a consumer subscribed'
75
+ expect { subject.consume {} }.to raise_error 'This connection already has a consumer subscribed'
77
76
  end
78
77
  end
79
78
 
80
79
  context 'when an exception is raised' do
81
-
82
80
  context 'when the exception is' do
83
81
  [SystemExit.new, Interrupt.new, SignalException.new('SIGTERM')].each do |exception|
84
82
  context exception.to_s do
@@ -86,7 +84,6 @@ module RabbitFeed
86
84
  test_logger_string_io = StringIO.new
87
85
  logger = Logger.new test_logger_string_io
88
86
  logger.formatter = RabbitFeed::JsonLogFormatter
89
- old_logger = RabbitFeed.log
90
87
  RabbitFeed.log = logger
91
88
  test_logger_string_io
92
89
  end
@@ -94,15 +91,14 @@ module RabbitFeed
94
91
  before { allow(subject).to receive(:handle_message).and_raise(exception) }
95
92
 
96
93
  it 'does not re-raise error' do
97
- expect { subject.consume { } }.to_not raise_error
94
+ expect { subject.consume {} }.to_not raise_error
98
95
  end
99
96
 
100
97
  it 'logs unsubscribe_from_queue' do
101
- subject.consume { }
98
+ subject.consume {}
102
99
 
103
- expect(logger.string).to match /unsubscribe_from_queue/
100
+ expect(logger.string).to match(/unsubscribe_from_queue/)
104
101
  end
105
-
106
102
  end
107
103
  end
108
104
  end
@@ -116,17 +112,20 @@ module RabbitFeed
116
112
  end
117
113
  end
118
114
 
119
-
120
115
  context 'when consumer_exit_after_fail is false' do
121
116
  before { allow(RabbitFeed.configuration).to receive(:consumer_exit_after_fail).and_return(false) }
122
117
 
123
118
  context 'when Airbrake is defined' do
124
- after { Object.send(:remove_const, ('Airbrake').to_sym) rescue NameError }
119
+ after do
120
+ begin
121
+ Object.send(:remove_const, 'Airbrake'.to_sym)
122
+ rescue NameError; end
123
+ end
125
124
 
126
125
  context 'when the version is lower than 5' do
127
126
  before do
128
127
  module ::Airbrake
129
- VERSION = '4.0.0'
128
+ VERSION = '4.0.0'.freeze
130
129
  end
131
130
  allow(Airbrake).to receive(:configuration).and_return(airbrake_configuration)
132
131
  end
@@ -135,9 +134,9 @@ module RabbitFeed
135
134
  let(:airbrake_configuration) { double(:airbrake_configuration, public?: true) }
136
135
 
137
136
  it 'notifies airbrake' do
138
- expect(Airbrake).to receive(:notify_or_ignore).with(an_instance_of RuntimeError)
137
+ expect(Airbrake).to receive(:notify_or_ignore).with(an_instance_of(RuntimeError))
139
138
 
140
- expect{ subject.consume { raise 'Consuming time' } }.not_to raise_error
139
+ expect { subject.consume { raise 'Consuming time' } }.not_to raise_error
141
140
  end
142
141
  end
143
142
  end
@@ -145,23 +144,23 @@ module RabbitFeed
145
144
  context 'when the version is greater than 4' do
146
145
  before do
147
146
  module ::Airbrake
148
- AIRBRAKE_VERSION = '5.0.0'
147
+ AIRBRAKE_VERSION = '5.0.0'.freeze
149
148
  end
150
149
  end
151
150
 
152
151
  context 'and consumer_exit_after_fail is true' do
153
152
  before { allow(RabbitFeed.configuration).to receive(:consumer_exit_after_fail).and_return(true) }
154
153
  it 'notifies airbrake synchronously' do
155
- expect(Airbrake).to receive(:notify_sync).with(an_instance_of RuntimeError)
156
- expect{ subject.consume { raise 'Consuming time' } }.not_to raise_error
154
+ expect(Airbrake).to receive(:notify_sync).with(an_instance_of(RuntimeError))
155
+ expect { subject.consume { raise 'Consuming time' } }.not_to raise_error
157
156
  end
158
157
  end
159
158
 
160
159
  context 'and consumer_exit_after_fail is not true' do
161
160
  before { allow(RabbitFeed.configuration).to receive(:consumer_exit_after_fail).and_return(false) }
162
161
  it 'notifies airbrake' do
163
- expect(Airbrake).to receive(:notify).with(an_instance_of RuntimeError)
164
- expect{ subject.consume { raise 'Consuming time' } }.not_to raise_error
162
+ expect(Airbrake).to receive(:notify).with(an_instance_of(RuntimeError))
163
+ expect { subject.consume { raise 'Consuming time' } }.not_to raise_error
165
164
  end
166
165
  end
167
166
  end
@@ -172,7 +171,6 @@ module RabbitFeed
172
171
  subject.consume { raise 'Consuming time' }
173
172
  end
174
173
  end
175
-
176
174
  end
177
175
  end
178
176
  end
@@ -19,7 +19,7 @@ module RabbitFeed
19
19
  it { should_not be_nil }
20
20
  it { should be_valid }
21
21
  its(:name) { should eq 'customer_purchases_policy' }
22
- its(:sensitive_fields) { should match_array(['price', 'policy_id']) }
22
+ its(:sensitive_fields) { should match_array(%w(price policy_id)) }
23
23
 
24
24
  describe EventDefinitions::Event do
25
25
  let(:name) { 'event_name' }
@@ -31,7 +31,7 @@ module RabbitFeed
31
31
  definition
32
32
  end
33
33
  event.payload_contains do
34
- field 'field', { type: 'string', definition: 'field definition' }
34
+ field 'field', type: 'string', definition: 'field definition'
35
35
  end
36
36
  end
37
37
  end
@@ -39,30 +39,30 @@ module RabbitFeed
39
39
  it { should be_valid }
40
40
  its(:fields) { should_not be_empty }
41
41
  its(:schema) { should be_a Avro::Schema }
42
- its(:metadata_schema) { should eq({
43
- name: 'event_metadata',
44
- type: 'record',
45
- fields: [
46
- {name: 'application', type: 'string', doc: 'The name of the application that created the event'},
47
- {name: 'host', type: 'string', doc: 'The hostname of the server on which the event was created'},
48
- {name: 'environment', type: 'string', doc: 'The environment in which the event was created'},
49
- {name: 'version', type: 'string', doc: 'The version of the event payload'},
50
- {name: 'schema_version', type: 'string', doc: 'The version of the event schema'},
51
- {name: 'name', type: 'string', doc: 'The name of the event'},
52
- {name: 'created_at_utc', type: 'string', doc: 'The UTC time that the event was created'},
53
- ]})
54
- }
55
- its(:payload_schema) { should eq({
56
- name: 'event_name_payload',
57
- type: 'record',
58
- fields: [{name: 'field', type: 'string', doc: 'field definition'}],
59
- })
60
- }
61
- its(:event_schema) { should match([
62
- { name: 'payload', type: an_instance_of(Hash), doc: 'The event payload (defined by the source system)' },
63
- { name: 'metadata', type: an_instance_of(Hash), doc: 'The event metadata (defined by rabbit feed)' },
64
- ])
65
- }
42
+ its(:metadata_schema) do
43
+ should eq(name: 'event_metadata',
44
+ type: 'record',
45
+ fields: [
46
+ { name: 'application', type: 'string', doc: 'The name of the application that created the event' },
47
+ { name: 'host', type: 'string', doc: 'The hostname of the server on which the event was created' },
48
+ { name: 'environment', type: 'string', doc: 'The environment in which the event was created' },
49
+ { name: 'version', type: 'string', doc: 'The version of the event payload' },
50
+ { name: 'schema_version', type: 'string', doc: 'The version of the event schema' },
51
+ { name: 'name', type: 'string', doc: 'The name of the event' },
52
+ { name: 'created_at_utc', type: 'string', doc: 'The UTC time that the event was created' }
53
+ ])
54
+ end
55
+ its(:payload_schema) do
56
+ should eq(name: 'event_name_payload',
57
+ type: 'record',
58
+ fields: [{ name: 'field', type: 'string', doc: 'field definition' }])
59
+ end
60
+ its(:event_schema) do
61
+ should match([
62
+ { name: 'payload', type: an_instance_of(Hash), doc: 'The event payload (defined by the source system)' },
63
+ { name: 'metadata', type: an_instance_of(Hash), doc: 'The event metadata (defined by rabbit feed)' }
64
+ ])
65
+ end
66
66
 
67
67
  context 'when the name is nil' do
68
68
  let(:name) {}
@@ -99,16 +99,16 @@ module RabbitFeed
99
99
  let(:name) { 'event_name' }
100
100
  let(:type) { 'string' }
101
101
  let(:definition) { 'event definition' }
102
- subject{ EventDefinitions::Field.new name, type, definition }
102
+ subject { EventDefinitions::Field.new name, type, definition }
103
103
 
104
104
  it { should be_valid }
105
- its(:schema) { should eq({ name: name, type: type, doc: definition }) }
105
+ its(:schema) { should eq(name: name, type: type, doc: definition) }
106
106
 
107
107
  context 'when the name is nil' do
108
108
  let(:name) {}
109
109
 
110
110
  it 'raises a configuration error' do
111
- expect{ subject }.to raise_error ConfigurationError
111
+ expect { subject }.to raise_error ConfigurationError
112
112
  end
113
113
  end
114
114
 
@@ -116,7 +116,7 @@ module RabbitFeed
116
116
  let(:type) {}
117
117
 
118
118
  it 'raises a configuration error' do
119
- expect{ subject }.to raise_error ConfigurationError
119
+ expect { subject }.to raise_error ConfigurationError
120
120
  end
121
121
  end
122
122
 
@@ -124,7 +124,7 @@ module RabbitFeed
124
124
  let(:definition) {}
125
125
 
126
126
  it 'raises a configuration error' do
127
- expect{ subject }.to raise_error ConfigurationError
127
+ expect { subject }.to raise_error ConfigurationError
128
128
  end
129
129
  end
130
130
  end