freddy 1.4.1 → 1.4.2

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +49 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile +4 -2
  5. data/Rakefile +6 -4
  6. data/freddy.gemspec +21 -21
  7. data/lib/freddy.rb +7 -8
  8. data/lib/freddy/adapters.rb +2 -0
  9. data/lib/freddy/adapters/bunny_adapter.rb +7 -7
  10. data/lib/freddy/adapters/march_hare_adapter.rb +6 -4
  11. data/lib/freddy/consumers.rb +2 -0
  12. data/lib/freddy/consumers/respond_to_consumer.rb +14 -17
  13. data/lib/freddy/consumers/response_consumer.rb +4 -2
  14. data/lib/freddy/consumers/tap_into_consumer.rb +11 -14
  15. data/lib/freddy/delivery.rb +2 -0
  16. data/lib/freddy/error_response.rb +2 -0
  17. data/lib/freddy/invalid_request_error.rb +2 -0
  18. data/lib/freddy/message_handler.rb +3 -1
  19. data/lib/freddy/message_handler_adapaters.rb +2 -0
  20. data/lib/freddy/payload.rb +5 -3
  21. data/lib/freddy/producers.rb +2 -0
  22. data/lib/freddy/producers/reply_producer.rb +6 -6
  23. data/lib/freddy/producers/send_and_forget_producer.rb +8 -8
  24. data/lib/freddy/producers/send_and_wait_response_producer.rb +39 -31
  25. data/lib/freddy/request_manager.rb +7 -4
  26. data/lib/freddy/responder_handler.rb +2 -0
  27. data/lib/freddy/sync_response_container.rb +4 -4
  28. data/lib/freddy/timeout_error.rb +2 -0
  29. data/lib/freddy/trace_carrier.rb +4 -2
  30. data/spec/freddy/consumers/respond_to_consumer_spec.rb +1 -1
  31. data/spec/freddy/error_response_spec.rb +9 -9
  32. data/spec/freddy/freddy_spec.rb +38 -38
  33. data/spec/freddy/message_handler_spec.rb +2 -2
  34. data/spec/freddy/payload_spec.rb +5 -5
  35. data/spec/freddy/responder_handler_spec.rb +1 -1
  36. data/spec/freddy/sync_response_container_spec.rb +8 -8
  37. data/spec/freddy/trace_carrier_spec.rb +5 -5
  38. data/spec/integration/concurrency_spec.rb +9 -9
  39. data/spec/integration/reply_spec.rb +4 -4
  40. data/spec/integration/tap_into_with_group_spec.rb +2 -2
  41. data/spec/integration/tracing_spec.rb +19 -19
  42. data/spec/spec_helper.rb +6 -6
  43. metadata +9 -8
@@ -10,7 +10,7 @@ describe Freddy::MessageHandler do
10
10
  it 'delegates to the adapter' do
11
11
  expect(adapter).to receive(:success).with(delivery, x: 'y')
12
12
 
13
- subject.success(x: 'y')
13
+ handler.success(x: 'y')
14
14
  end
15
15
  end
16
16
 
@@ -18,7 +18,7 @@ describe Freddy::MessageHandler do
18
18
  it 'delegates to the adapter' do
19
19
  expect(adapter).to receive(:error).with(delivery, error: 'text')
20
20
 
21
- subject.error(error: 'text')
21
+ handler.error(error: 'text')
22
22
  end
23
23
  end
24
24
  end
@@ -13,7 +13,7 @@ describe Freddy::Payload do
13
13
  end
14
14
 
15
15
  it 'serializes time objects in a nested hash as iso8601 format strings' do
16
- expect(dump(x: {time: Time.utc(2016, 1, 4, 20, 18)}))
16
+ expect(dump(x: { time: Time.utc(2016, 1, 4, 20, 18) }))
17
17
  .to eq('{"x":{"time":"2016-01-04T20:18:00Z"}}')
18
18
  end
19
19
 
@@ -28,22 +28,22 @@ describe Freddy::Payload do
28
28
  end
29
29
 
30
30
  it 'serializes date objects in a nested hash as iso8601 format strings' do
31
- expect(dump(x: {date: Date.new(2016, 1, 4)}))
31
+ expect(dump(x: { date: Date.new(2016, 1, 4) }))
32
32
  .to eq('{"x":{"date":"2016-01-04"}}')
33
33
  end
34
34
 
35
35
  it 'serializes datetime objects as iso8601 format strings' do
36
- expect(dump(datetime: DateTime.new(2016, 1, 4, 20, 18)))
36
+ expect(dump(datetime: DateTime.new(2016, 1, 4, 20, 18))) # rubocop:disable Style/DateTime
37
37
  .to eq('{"datetime":"2016-01-04T20:18:00+00:00"}')
38
38
  end
39
39
 
40
40
  it 'serializes datetime objects in an array as iso8601 format strings' do
41
- expect(dump(datetime: [DateTime.new(2016, 1, 4, 20, 18)]))
41
+ expect(dump(datetime: [DateTime.new(2016, 1, 4, 20, 18)])) # rubocop:disable Style/DateTime
42
42
  .to eq('{"datetime":["2016-01-04T20:18:00+00:00"]}')
43
43
  end
44
44
 
45
45
  it 'serializes datetime objects in a nested hash as iso8601 format strings' do
46
- expect(dump(x: {datetime: DateTime.new(2016, 1, 4, 20, 18)}))
46
+ expect(dump(x: { datetime: DateTime.new(2016, 1, 4, 20, 18) })) # rubocop:disable Style/DateTime
47
47
  .to eq('{"x":{"datetime":"2016-01-04T20:18:00+00:00"}}')
48
48
  end
49
49
 
@@ -4,7 +4,7 @@ describe Freddy::ResponderHandler do
4
4
  let(:freddy) { Freddy.build(logger, config) }
5
5
 
6
6
  let(:destination) { random_destination }
7
- let(:payload) { {pay: 'load'} }
7
+ let(:payload) { { pay: 'load' } }
8
8
 
9
9
  after { freddy.close }
10
10
 
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Freddy::SyncResponseContainer do
4
4
  let(:container) { described_class.new(on_timeout) }
5
- let(:on_timeout) { Proc.new {} }
5
+ let(:on_timeout) { proc {} }
6
6
 
7
7
  context 'when timeout' do
8
- subject { container.wait_for_response(0.01) }
8
+ subject(:wait_for_response) { container.wait_for_response(0.01) }
9
9
 
10
10
  it 'raises timeout error' do
11
- expect { subject }.to raise_error do |error|
11
+ expect { wait_for_response }.to raise_error do |error|
12
12
  expect(error).to be_a(Freddy::TimeoutError)
13
13
  expect(error.response).to eq(
14
14
  error: 'RequestTimeout',
@@ -22,15 +22,15 @@ describe Freddy::SyncResponseContainer do
22
22
  let(:delivery) { {} }
23
23
 
24
24
  it 'raises timeout error' do
25
- expect {
25
+ expect do
26
26
  container.call(nil, delivery)
27
- }.to raise_error(StandardError, 'unexpected nil value for response')
27
+ end.to raise_error(StandardError, 'unexpected nil value for response')
28
28
  end
29
29
  end
30
30
 
31
31
  describe '#wait_for_response' do
32
32
  let(:timeout) { 2 }
33
- let(:response) { {msg: 'response'} }
33
+ let(:response) { { msg: 'response' } }
34
34
  let(:delivery) { OpenStruct.new(type: 'success') }
35
35
 
36
36
  context 'when called after #call' do
@@ -45,9 +45,9 @@ describe Freddy::SyncResponseContainer do
45
45
  end
46
46
 
47
47
  it 'does not wait for timeout' do
48
- expect {
48
+ expect do
49
49
  container.wait_for_response(timeout)
50
- }.to change(Time, :now).by_at_most(max_wait_time_in_seconds)
50
+ end.to change(Time, :now).by_at_most(max_wait_time_in_seconds)
51
51
  end
52
52
  end
53
53
  end
@@ -4,7 +4,7 @@ describe Freddy::TraceCarrier do
4
4
  subject(:carrier) { described_class.new(properties) }
5
5
 
6
6
  context 'when adding trace information' do
7
- let(:properties) { {x: 'y'} }
7
+ let(:properties) { { x: 'y' } }
8
8
  let(:key_name) { 'some-key' }
9
9
  let(:key_value) { 'some-key' }
10
10
 
@@ -20,7 +20,7 @@ describe Freddy::TraceCarrier do
20
20
  let(:key_value) { 'some-key' }
21
21
 
22
22
  let(:properties) do
23
- double(headers: {serialized_key_name => key_value})
23
+ double(headers: { serialized_key_name => key_value })
24
24
  end
25
25
 
26
26
  it 'extracts a header with x-trace- prefix' do
@@ -33,9 +33,9 @@ describe Freddy::TraceCarrier do
33
33
  let(:properties) do
34
34
  double(
35
35
  headers: {
36
- "x-trace-key1" => "value1",
37
- "x-trace-key2" => "value2",
38
- "other-key" => "value3"
36
+ 'x-trace-key1' => 'value1',
37
+ 'x-trace-key2' => 'value2',
38
+ 'other-key' => 'value3'
39
39
  }
40
40
  )
41
41
  end
@@ -9,7 +9,7 @@ describe 'Concurrency' do
9
9
  after { [freddy1, freddy2, freddy3].each(&:close) }
10
10
 
11
11
  it 'supports multiple requests in #respond_to' do
12
- freddy1.respond_to 'Concurrency1' do |payload, msg_handler|
12
+ freddy1.respond_to 'Concurrency1' do |_payload, msg_handler|
13
13
  begin
14
14
  freddy1.deliver_with_response 'Concurrency2', msg: 'noop'
15
15
  result2 = freddy1.deliver_with_response 'Concurrency3', msg: 'noop'
@@ -19,16 +19,16 @@ describe 'Concurrency' do
19
19
  end
20
20
  end
21
21
 
22
- freddy2.respond_to 'Concurrency2' do |payload, msg_handler|
22
+ freddy2.respond_to 'Concurrency2' do |_payload, msg_handler|
23
23
  begin
24
- msg_handler.success({from: 'Concurrency2'})
24
+ msg_handler.success(from: 'Concurrency2')
25
25
  rescue Freddy::InvalidRequestError => e
26
26
  msg_handler.error(e.response)
27
27
  end
28
28
  end
29
29
 
30
- freddy3.respond_to 'Concurrency3' do |payload, msg_handler|
31
- msg_handler.success({from: 'Concurrency3'})
30
+ freddy3.respond_to 'Concurrency3' do |_payload, msg_handler|
31
+ msg_handler.success(from: 'Concurrency3')
32
32
  end
33
33
 
34
34
  result =
@@ -51,8 +51,8 @@ describe 'Concurrency' do
51
51
  received1 = true
52
52
  end
53
53
 
54
- freddy2.respond_to 'TapConcurrency' do |payload, msg_handler|
55
- msg_handler.success({from: 'TapConcurrency'})
54
+ freddy2.respond_to 'TapConcurrency' do |_payload, msg_handler|
55
+ msg_handler.success(from: 'TapConcurrency')
56
56
  received2 = true
57
57
  end
58
58
 
@@ -86,9 +86,9 @@ describe 'Concurrency' do
86
86
  expect(results.count).to eq(10)
87
87
  end
88
88
 
89
- context 'concurrent executions of deliver_with_response' do
89
+ context 'with concurrent executions of deliver_with_response' do
90
90
  let(:nr_of_threads) { 50 }
91
- let(:payload) { {pay: 'load'} }
91
+ let(:payload) { { pay: 'load' } }
92
92
  let(:msg_counter) { Hamster::MutableSet[] }
93
93
  let(:queue_name) { random_destination }
94
94
 
@@ -4,14 +4,14 @@ describe 'Reply' do
4
4
  let(:freddy) { Freddy.build(logger, config) }
5
5
 
6
6
  let(:destination) { random_destination }
7
- let(:request_payload) { {req: 'load'} }
8
- let(:response_payload) { {res: 'load'} }
7
+ let(:request_payload) { { req: 'load' } }
8
+ let(:response_payload) { { res: 'load' } }
9
9
 
10
10
  after { freddy.close }
11
11
 
12
12
  context 'when a synchronized request' do
13
13
  before do
14
- freddy.respond_to(destination) do |payload, msg_handler|
14
+ freddy.respond_to(destination) do |_payload, msg_handler|
15
15
  msg_handler.success(response_payload)
16
16
  end
17
17
  end
@@ -22,7 +22,7 @@ describe 'Reply' do
22
22
  end
23
23
 
24
24
  it 'does not send the reply to the topic queue' do
25
- freddy.tap_into 'amq.*' do |payload|
25
+ freddy.tap_into 'amq.*' do |_payload|
26
26
  @message_received = true
27
27
  end
28
28
 
@@ -14,8 +14,8 @@ describe 'Tapping into with group identifier' do
14
14
  msg_counter = Hamster::MutableSet[]
15
15
 
16
16
  group_id = arbitrary_id
17
- responder1.tap_into(destination, group: group_id) {|msg| msg_counter << 'r1' }
18
- responder2.tap_into(destination, group: group_id) {|msg| msg_counter << 'r2' }
17
+ responder1.tap_into(destination, group: group_id) { |_msg| msg_counter << 'r1' }
18
+ responder2.tap_into(destination, group: group_id) { |_msg| msg_counter << 'r2' }
19
19
  deliverer.deliver(destination, {})
20
20
 
21
21
  default_sleep
@@ -16,23 +16,23 @@ describe 'Tracing' do
16
16
  let(:destination2) { random_destination }
17
17
 
18
18
  before do
19
- freddy.respond_to(destination) do |payload, msg_handler|
20
- msg_handler.success({
19
+ freddy.respond_to(destination) do |_payload, msg_handler|
20
+ msg_handler.success(
21
21
  trace_initiator: {
22
22
  trace_id: active_span.context.trace_id,
23
23
  parent_id: active_span.context.parent_id,
24
24
  span_id: active_span.context.span_id
25
25
  },
26
26
  current_receiver: freddy.deliver_with_response(destination2, {})
27
- })
27
+ )
28
28
  end
29
29
 
30
- freddy2.respond_to(destination2) do |payload, msg_handler|
31
- msg_handler.success({
30
+ freddy2.respond_to(destination2) do |_payload, msg_handler|
31
+ msg_handler.success(
32
32
  trace_id: active_span.context.trace_id,
33
33
  parent_id: active_span.context.parent_id,
34
34
  span_id: active_span.context.span_id
35
- })
35
+ )
36
36
  end
37
37
  end
38
38
 
@@ -51,15 +51,15 @@ describe 'Tracing' do
51
51
  it 'has parent_id' do
52
52
  response = freddy.deliver_with_response(destination, {})
53
53
  current_receiver = response.fetch(:current_receiver)
54
- expect(current_receiver.fetch(:parent_id)).to_not be_nil
54
+ expect(current_receiver.fetch(:parent_id)).not_to be_nil
55
55
  end
56
56
 
57
57
  it 'has generated span_id' do
58
58
  response = freddy.deliver_with_response(destination, {})
59
59
  trace_initiator = response.fetch(:trace_initiator)
60
60
  current_receiver = response.fetch(:current_receiver)
61
- expect(current_receiver.fetch(:span_id)).to_not be_nil
62
- expect(current_receiver.fetch(:span_id)).to_not eq(trace_initiator.fetch(:span_id))
61
+ expect(current_receiver.fetch(:span_id)).not_to be_nil
62
+ expect(current_receiver.fetch(:span_id)).not_to eq(trace_initiator.fetch(:span_id))
63
63
  end
64
64
  end
65
65
 
@@ -73,7 +73,7 @@ describe 'Tracing' do
73
73
  let(:destination3) { random_destination }
74
74
 
75
75
  before do
76
- freddy.respond_to(destination) do |payload, msg_handler|
76
+ freddy.respond_to(destination) do |_payload, msg_handler|
77
77
  msg_handler.success({
78
78
  trace_initiator: {
79
79
  trace_id: active_span.context.trace_id,
@@ -83,23 +83,23 @@ describe 'Tracing' do
83
83
  }.merge(freddy.deliver_with_response(destination2, {})))
84
84
  end
85
85
 
86
- freddy2.respond_to(destination2) do |payload, msg_handler|
87
- msg_handler.success({
86
+ freddy2.respond_to(destination2) do |_payload, msg_handler|
87
+ msg_handler.success(
88
88
  previous_receiver: {
89
89
  trace_id: active_span.context.trace_id,
90
90
  parent_id: active_span.context.parent_id,
91
91
  span_id: active_span.context.span_id
92
92
  },
93
93
  current_receiver: freddy2.deliver_with_response(destination3, {})
94
- })
94
+ )
95
95
  end
96
96
 
97
- freddy3.respond_to(destination3) do |payload, msg_handler|
98
- msg_handler.success({
97
+ freddy3.respond_to(destination3) do |_payload, msg_handler|
98
+ msg_handler.success(
99
99
  trace_id: active_span.context.trace_id,
100
100
  parent_id: active_span.context.parent_id,
101
101
  span_id: active_span.context.span_id
102
- })
102
+ )
103
103
  end
104
104
  end
105
105
 
@@ -119,15 +119,15 @@ describe 'Tracing' do
119
119
  it 'has parent_id' do
120
120
  response = freddy.deliver_with_response(destination, {})
121
121
  current_receiver = response.fetch(:current_receiver)
122
- expect(current_receiver.fetch(:parent_id)).to_not be_nil
122
+ expect(current_receiver.fetch(:parent_id)).not_to be_nil
123
123
  end
124
124
 
125
125
  it 'has generated span_id' do
126
126
  response = freddy.deliver_with_response(destination, {})
127
127
  previous_receiver = response.fetch(:previous_receiver)
128
128
  current_receiver = response.fetch(:current_receiver)
129
- expect(current_receiver.fetch(:span_id)).to_not be_nil
130
- expect(current_receiver.fetch(:span_id)).to_not eq(previous_receiver.fetch(:span_id))
129
+ expect(current_receiver.fetch(:span_id)).not_to be_nil
130
+ expect(current_receiver.fetch(:span_id)).not_to eq(previous_receiver.fetch(:span_id))
131
131
  end
132
132
  end
133
133
 
@@ -5,9 +5,9 @@ Bundler.setup
5
5
  require 'codeclimate-test-reporter'
6
6
  SimpleCov.start do
7
7
  formatter SimpleCov::Formatter::MultiFormatter.new([
8
- SimpleCov::Formatter::HTMLFormatter,
9
- CodeClimate::TestReporter::Formatter
10
- ])
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ CodeClimate::TestReporter::Formatter
10
+ ])
11
11
  add_filter '/spec/'
12
12
  end
13
13
 
@@ -40,9 +40,9 @@ def default_sleep
40
40
  sleep 0.05
41
41
  end
42
42
 
43
- def wait_for(&block)
43
+ def wait_for
44
44
  100.times do
45
- return if block.call
45
+ return if yield
46
46
  sleep 0.005
47
47
  end
48
48
  end
@@ -57,7 +57,7 @@ def logger
57
57
  end
58
58
 
59
59
  def config
60
- {host: 'localhost', port: 5672, user: 'guest', pass: 'guest'}
60
+ { host: 'localhost', port: 5672, user: 'guest', pass: 'guest' }
61
61
  end
62
62
 
63
63
  def spawn_echo_responder(freddy, queue_name)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freddy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salemove TechMovers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-11 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,33 +67,33 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.13'
69
69
  - !ruby/object:Gem::Dependency
70
- name: thread
70
+ name: opentracing
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.1'
75
+ version: '0.4'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.1'
82
+ version: '0.4'
83
83
  - !ruby/object:Gem::Dependency
84
- name: opentracing
84
+ name: thread
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.4'
89
+ version: '0.1'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.4'
96
+ version: '0.1'
97
97
  description: Messaging API
98
98
  email:
99
99
  - techmovers@salemove.com
@@ -104,6 +104,7 @@ files:
104
104
  - ".gitignore"
105
105
  - ".npmignore"
106
106
  - ".rspec"
107
+ - ".rubocop.yml"
107
108
  - ".ruby-gemset"
108
109
  - ".ruby-version"
109
110
  - ".travis.yml"