hutch 0.21.0-java → 0.25.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +11 -12
  5. data/.yardopts +5 -0
  6. data/CHANGELOG.md +118 -1
  7. data/Gemfile +15 -4
  8. data/Guardfile +13 -4
  9. data/README.md +274 -24
  10. data/Rakefile +8 -1
  11. data/hutch.gemspec +6 -7
  12. data/lib/hutch.rb +11 -8
  13. data/lib/hutch/adapters/march_hare.rb +1 -1
  14. data/lib/hutch/broker.rb +113 -110
  15. data/lib/hutch/cli.rb +42 -11
  16. data/lib/hutch/config.rb +209 -59
  17. data/lib/hutch/error_handlers.rb +1 -0
  18. data/lib/hutch/error_handlers/airbrake.rb +44 -16
  19. data/lib/hutch/error_handlers/base.rb +15 -0
  20. data/lib/hutch/error_handlers/honeybadger.rb +33 -18
  21. data/lib/hutch/error_handlers/logger.rb +12 -6
  22. data/lib/hutch/error_handlers/opbeat.rb +30 -0
  23. data/lib/hutch/error_handlers/sentry.rb +14 -6
  24. data/lib/hutch/logging.rb +5 -5
  25. data/lib/hutch/publisher.rb +75 -0
  26. data/lib/hutch/tracers.rb +1 -0
  27. data/lib/hutch/tracers/opbeat.rb +37 -0
  28. data/lib/hutch/version.rb +1 -1
  29. data/lib/hutch/waiter.rb +104 -0
  30. data/lib/hutch/worker.rb +50 -66
  31. data/lib/yard-settings/handler.rb +38 -0
  32. data/lib/yard-settings/yard-settings.rb +2 -0
  33. data/spec/hutch/broker_spec.rb +162 -77
  34. data/spec/hutch/cli_spec.rb +16 -3
  35. data/spec/hutch/config_spec.rb +83 -22
  36. data/spec/hutch/error_handlers/airbrake_spec.rb +25 -10
  37. data/spec/hutch/error_handlers/honeybadger_spec.rb +24 -2
  38. data/spec/hutch/error_handlers/logger_spec.rb +14 -1
  39. data/spec/hutch/error_handlers/opbeat_spec.rb +37 -0
  40. data/spec/hutch/error_handlers/sentry_spec.rb +18 -1
  41. data/spec/hutch/logger_spec.rb +12 -6
  42. data/spec/hutch/waiter_spec.rb +51 -0
  43. data/spec/hutch/worker_spec.rb +33 -4
  44. data/spec/spec_helper.rb +7 -5
  45. data/spec/tracers/opbeat_spec.rb +44 -0
  46. data/templates/default/class/html/settings.erb +0 -0
  47. data/templates/default/class/setup.rb +4 -0
  48. data/templates/default/fulldoc/html/css/hutch.css +13 -0
  49. data/templates/default/layout/html/setup.rb +7 -0
  50. data/templates/default/method_details/html/settings.erb +5 -0
  51. data/templates/default/method_details/setup.rb +4 -0
  52. data/templates/default/method_details/text/settings.erb +0 -0
  53. data/templates/default/module/html/settings.erb +40 -0
  54. data/templates/default/module/setup.rb +4 -0
  55. metadata +41 -38
@@ -7,7 +7,19 @@ describe Hutch::Worker do
7
7
  get_serializer: nil) }
8
8
  let(:consumers) { [consumer, double('Consumer')] }
9
9
  let(:broker) { Hutch::Broker.new }
10
- subject(:worker) { Hutch::Worker.new(broker, consumers) }
10
+ let(:setup_procs) { Array.new(2) { Proc.new {} } }
11
+ subject(:worker) { Hutch::Worker.new(broker, consumers, setup_procs) }
12
+
13
+ describe ".#run" do
14
+ it "calls each setup proc" do
15
+ setup_procs.each { |prc| expect(prc).to receive(:call) }
16
+ allow(worker).to receive(:setup_queues)
17
+ allow(Hutch::Waiter).to receive(:wait_until_signaled)
18
+ allow(broker).to receive(:stop)
19
+
20
+ worker.run
21
+ end
22
+ end
11
23
 
12
24
  describe '#setup_queues' do
13
25
  it 'sets up queues for each of the consumers' do
@@ -20,7 +32,6 @@ describe Hutch::Worker do
20
32
 
21
33
  describe '#setup_queue' do
22
34
  let(:queue) { double('Queue', bind: nil, subscribe: nil) }
23
- before { allow(worker).to receive_messages(consumer_queue: queue) }
24
35
  before { allow(broker).to receive_messages(queue: queue, bind_queue: nil) }
25
36
 
26
37
  it 'creates a queue' do
@@ -34,9 +45,27 @@ describe Hutch::Worker do
34
45
  end
35
46
 
36
47
  it 'sets up a subscription' do
37
- expect(queue).to receive(:subscribe).with(manual_ack: true)
48
+ expect(queue).to receive(:subscribe).with(consumer_tag: %r(^hutch\-.{36}$), manual_ack: true)
38
49
  worker.setup_queue(consumer)
39
50
  end
51
+
52
+ context 'with a configured consumer tag prefix' do
53
+ before { Hutch::Config.set(:consumer_tag_prefix, 'appname') }
54
+
55
+ it 'sets up a subscription with the configured tag prefix' do
56
+ expect(queue).to receive(:subscribe).with(consumer_tag: %r(^appname\-.{36}$), manual_ack: true)
57
+ worker.setup_queue(consumer)
58
+ end
59
+ end
60
+
61
+ context 'with a configured consumer tag prefix that is too long' do
62
+ let(:maximum_size) { 255 - SecureRandom.uuid.size - 1 }
63
+ before { Hutch::Config.set(:consumer_tag_prefix, 'a'.*(maximum_size + 1)) }
64
+
65
+ it 'raises an error' do
66
+ expect { worker.setup_queue(consumer) }.to raise_error(/Tag must be 255 bytes long at most/)
67
+ end
68
+ end
40
69
  end
41
70
 
42
71
  describe '#handle_message' do
@@ -68,7 +97,7 @@ describe Hutch::Worker do
68
97
  it 'requeues the message' do
69
98
  allow(consumer_instance).to receive(:process).and_raise('failed')
70
99
  requeuer = double
71
- allow(requeuer).to receive(:handle).ordered { |delivery_info, properties, broker, e|
100
+ allow(requeuer).to receive(:handle) { |delivery_info, properties, broker, e|
72
101
  broker.requeue delivery_info.delivery_tag
73
102
  true
74
103
  }
@@ -13,8 +13,10 @@ require 'raven'
13
13
  require 'hutch'
14
14
  require 'logger'
15
15
 
16
+ # set logger to be a null logger
17
+ Hutch::Logging.logger = Logger.new(File::NULL)
18
+
16
19
  RSpec.configure do |config|
17
- config.before(:all) { Hutch::Config.log_level = Logger::FATAL }
18
20
  config.raise_errors_for_deprecations!
19
21
 
20
22
  if defined?(JRUBY_VERSION)
@@ -22,6 +24,10 @@ RSpec.configure do |config|
22
24
  else
23
25
  config.filter_run_excluding adapter: :march_hare
24
26
  end
27
+
28
+ config.mock_with :rspec do |mocks|
29
+ mocks.verify_partial_doubles = true
30
+ end
25
31
  end
26
32
 
27
33
  # Constants (classes, etc) defined within a block passed to this method
@@ -34,7 +40,3 @@ ensure
34
40
  Object.send(:remove_const, constant)
35
41
  end
36
42
  end
37
-
38
- def deep_copy(obj)
39
- Marshal.load(Marshal.dump(obj))
40
- end
@@ -0,0 +1,44 @@
1
+ require 'hutch/message'
2
+ require 'hutch/serializers/identity'
3
+ require 'hutch/tracers'
4
+
5
+ RSpec.describe Hutch::Tracers::Opbeat do
6
+ let(:consumer) { double('the-consumer') }
7
+
8
+ subject(:tracer) { described_class.new(consumer) }
9
+
10
+ let(:message) do
11
+ Hutch::Message.new(double('the-delivery-info', routing_key: 'foo.bar',
12
+ exchange: 'foo'),
13
+ double('the-properties', message_id: 'the-id',
14
+ timestamp: 'the-time'),
15
+ double('the-payload', to_s: 'the-body'),
16
+ Hutch::Serializers::Identity)
17
+ end
18
+
19
+ it 'formats messages as extra information' do
20
+ expected_extra = {
21
+ body: 'the-body',
22
+ message_id: 'the-id',
23
+ timestamp: 'the-time',
24
+ routing_key: 'foo.bar'
25
+ }
26
+ expect(Opbeat).to receive(:transaction).with(anything,
27
+ 'messaging.hutch',
28
+ extra: expected_extra) {
29
+ double('done-callback', done: true)
30
+ }
31
+
32
+ tracer.handle(message)
33
+ end
34
+
35
+ it 'presents consumer class name as Opbeat tracing signature' do
36
+ expect(Opbeat).to receive(:transaction).with(consumer.class.name,
37
+ 'messaging.hutch',
38
+ anything) {
39
+ double('done-callback', done: true)
40
+ }
41
+
42
+ tracer.handle(message)
43
+ end
44
+ end
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ sections.push :settings
4
+ end
@@ -0,0 +1,13 @@
1
+ .settings {
2
+ border-spacing: 2.5rem;
3
+ border-collapse: collapse;
4
+ }
5
+
6
+ .settings thead th {
7
+ text-align: left;
8
+ }
9
+
10
+ .settings thead th,
11
+ .settings tbody td {
12
+ padding: .5em 1em;
13
+ }
@@ -0,0 +1,7 @@
1
+ def init
2
+ super
3
+ end
4
+
5
+ def stylesheets
6
+ super + %w(css/hutch.css)
7
+ end
@@ -0,0 +1,5 @@
1
+ <% if object['custom_field'] %>
2
+ <p>
3
+ <%= object['custom_field'] %>
4
+ </p>
5
+ <% end %>
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ sections.last.place(:settings).after(:source)
4
+ end
@@ -0,0 +1,40 @@
1
+ <% if object['setting_rows'] %>
2
+ <h2>
3
+ Configuration
4
+ </h2>
5
+
6
+ <div class="tags">
7
+ <table border="1" class="settings">
8
+ <thead>
9
+ <tr>
10
+ <th>
11
+ Setting name
12
+ </th>
13
+ <th>
14
+ Default value
15
+ </th>
16
+ <th>
17
+ Type
18
+ </th>
19
+ <th>
20
+ ENV variable
21
+ </th>
22
+ <th>
23
+ Description
24
+ </th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <% for setting in object['setting_rows'] %>
29
+ <tr>
30
+ <td><tt><%= resolve_links "{Hutch::Config##{setting[:name]} #{setting[:name]}}" %></tt></td>
31
+ <td><%= setting[:default_value] %></td>
32
+ <td><%= setting[:type] %></td>
33
+ <td><tt>HUTCH_<%= setting[:name].upcase %></tt></td>
34
+ <td><%= html_markup_markdown setting[:first_line_of_description] %></td>
35
+ </tr>
36
+ <% end %>
37
+ </tbody>
38
+ </table>
39
+ </div>
40
+ <% end %>
@@ -0,0 +1,4 @@
1
+ def init
2
+ super
3
+ sections.place(:settings).before(:children)
4
+ end
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hutch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.25.0
5
5
  platform: java
6
6
  authors:
7
7
  - Harry Marr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-03 00:00:00.000000000 Z
11
+ date: 2018-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 2.16.0
18
+ version: 3.0.0
19
19
  name: march_hare
20
20
  prerelease: false
21
21
  type: :runtime
@@ -23,7 +23,7 @@ dependencies:
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.16.0
26
+ version: 3.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 1.11.2
46
+ version: '1.12'
47
47
  name: multi_json
48
48
  prerelease: false
49
49
  type: :runtime
@@ -51,13 +51,16 @@ dependencies:
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.11.2
54
+ version: '1.12'
55
55
  - !ruby/object:Gem::Dependency
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '3.0'
60
+ version: '4.2'
61
+ - - "<"
62
+ - !ruby/object:Gem::Version
63
+ version: '6'
61
64
  name: activesupport
62
65
  prerelease: false
63
66
  type: :runtime
@@ -65,36 +68,12 @@ dependencies:
65
68
  requirements:
66
69
  - - ">="
67
70
  - !ruby/object:Gem::Version
68
- version: '3.0'
69
- - !ruby/object:Gem::Dependency
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
71
+ version: '4.2'
72
+ - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '3.0'
75
- name: rspec
76
- prerelease: false
77
- type: :development
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: 0.7.1
89
- name: simplecov
90
- prerelease: false
91
- type: :development
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.7.1
97
- description: Hutch is a Ruby library for enabling asynchronous inter-service communication using RabbitMQ.
74
+ version: '6'
75
+ description: Hutch is a Ruby library for enabling asynchronous inter-service communication
76
+ using RabbitMQ.
98
77
  email:
99
78
  - developers@gocardless.com
100
79
  executables:
@@ -103,7 +82,9 @@ extensions: []
103
82
  extra_rdoc_files: []
104
83
  files:
105
84
  - ".gitignore"
85
+ - ".rspec"
106
86
  - ".travis.yml"
87
+ - ".yardopts"
107
88
  - CHANGELOG.md
108
89
  - Gemfile
109
90
  - Guardfile
@@ -126,19 +107,26 @@ files:
126
107
  - lib/hutch/consumer.rb
127
108
  - lib/hutch/error_handlers.rb
128
109
  - lib/hutch/error_handlers/airbrake.rb
110
+ - lib/hutch/error_handlers/base.rb
129
111
  - lib/hutch/error_handlers/honeybadger.rb
130
112
  - lib/hutch/error_handlers/logger.rb
113
+ - lib/hutch/error_handlers/opbeat.rb
131
114
  - lib/hutch/error_handlers/sentry.rb
132
115
  - lib/hutch/exceptions.rb
133
116
  - lib/hutch/logging.rb
134
117
  - lib/hutch/message.rb
118
+ - lib/hutch/publisher.rb
135
119
  - lib/hutch/serializers/identity.rb
136
120
  - lib/hutch/serializers/json.rb
137
121
  - lib/hutch/tracers.rb
138
122
  - lib/hutch/tracers/newrelic.rb
139
123
  - lib/hutch/tracers/null_tracer.rb
124
+ - lib/hutch/tracers/opbeat.rb
140
125
  - lib/hutch/version.rb
126
+ - lib/hutch/waiter.rb
141
127
  - lib/hutch/worker.rb
128
+ - lib/yard-settings/handler.rb
129
+ - lib/yard-settings/yard-settings.rb
142
130
  - spec/hutch/broker_spec.rb
143
131
  - spec/hutch/cli_spec.rb
144
132
  - spec/hutch/config_spec.rb
@@ -146,13 +134,25 @@ files:
146
134
  - spec/hutch/error_handlers/airbrake_spec.rb
147
135
  - spec/hutch/error_handlers/honeybadger_spec.rb
148
136
  - spec/hutch/error_handlers/logger_spec.rb
137
+ - spec/hutch/error_handlers/opbeat_spec.rb
149
138
  - spec/hutch/error_handlers/sentry_spec.rb
150
139
  - spec/hutch/logger_spec.rb
151
140
  - spec/hutch/message_spec.rb
152
141
  - spec/hutch/serializers/json_spec.rb
142
+ - spec/hutch/waiter_spec.rb
153
143
  - spec/hutch/worker_spec.rb
154
144
  - spec/hutch_spec.rb
155
145
  - spec/spec_helper.rb
146
+ - spec/tracers/opbeat_spec.rb
147
+ - templates/default/class/html/settings.erb
148
+ - templates/default/class/setup.rb
149
+ - templates/default/fulldoc/html/css/hutch.css
150
+ - templates/default/layout/html/setup.rb
151
+ - templates/default/method_details/html/settings.erb
152
+ - templates/default/method_details/setup.rb
153
+ - templates/default/method_details/text/settings.erb
154
+ - templates/default/module/html/settings.erb
155
+ - templates/default/module/setup.rb
156
156
  homepage: https://github.com/gocardless/hutch
157
157
  licenses:
158
158
  - MIT
@@ -165,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
165
  requirements:
166
166
  - - ">="
167
167
  - !ruby/object:Gem::Version
168
- version: '0'
168
+ version: '2.2'
169
169
  required_rubygems_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
173
  version: '0'
174
174
  requirements: []
175
175
  rubyforge_project:
176
- rubygems_version: 2.4.8
176
+ rubygems_version: 2.6.13
177
177
  signing_key:
178
178
  specification_version: 4
179
179
  summary: Easy inter-service communication using RabbitMQ.
@@ -185,10 +185,13 @@ test_files:
185
185
  - spec/hutch/error_handlers/airbrake_spec.rb
186
186
  - spec/hutch/error_handlers/honeybadger_spec.rb
187
187
  - spec/hutch/error_handlers/logger_spec.rb
188
+ - spec/hutch/error_handlers/opbeat_spec.rb
188
189
  - spec/hutch/error_handlers/sentry_spec.rb
189
190
  - spec/hutch/logger_spec.rb
190
191
  - spec/hutch/message_spec.rb
191
192
  - spec/hutch/serializers/json_spec.rb
193
+ - spec/hutch/waiter_spec.rb
192
194
  - spec/hutch/worker_spec.rb
193
195
  - spec/hutch_spec.rb
194
196
  - spec/spec_helper.rb
197
+ - spec/tracers/opbeat_spec.rb