freddy 1.6.0 → 2.2.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +31 -0
  3. data/.rubocop.yml +9 -28
  4. data/.ruby-gemset +1 -1
  5. data/.ruby-version +1 -1
  6. data/Gemfile +3 -4
  7. data/README.md +49 -18
  8. data/freddy.gemspec +12 -18
  9. data/lib/freddy/adapters/bunny_adapter.rb +20 -3
  10. data/lib/freddy/adapters.rb +3 -28
  11. data/lib/freddy/consumers/respond_to_consumer.rb +3 -13
  12. data/lib/freddy/consumers/response_consumer.rb +2 -4
  13. data/lib/freddy/consumers/tap_into_consumer.rb +25 -34
  14. data/lib/freddy/consumers.rb +1 -1
  15. data/lib/freddy/delivery.rb +45 -13
  16. data/lib/freddy/encoding.rb +27 -0
  17. data/lib/freddy/payload.rb +4 -34
  18. data/lib/freddy/producers/reply_producer.rb +12 -5
  19. data/lib/freddy/producers/send_and_forget_producer.rb +9 -12
  20. data/lib/freddy/producers/send_and_wait_response_producer.rb +19 -33
  21. data/lib/freddy/producers.rb +1 -1
  22. data/lib/freddy/request_manager.rb +1 -9
  23. data/lib/freddy/tracing.rb +37 -0
  24. data/lib/freddy/version.rb +5 -0
  25. data/lib/freddy.rb +18 -20
  26. data/spec/.rubocop.yml +26 -0
  27. data/spec/freddy/error_response_spec.rb +6 -6
  28. data/spec/freddy/freddy_spec.rb +23 -0
  29. data/spec/freddy/payload_spec.rb +25 -16
  30. data/spec/integration/concurrency_spec.rb +8 -12
  31. data/spec/integration/tap_into_with_group_spec.rb +15 -0
  32. data/spec/integration/tracing_spec.rb +45 -32
  33. data/spec/spec_helper.rb +5 -13
  34. metadata +47 -20
  35. data/.npmignore +0 -8
  36. data/.travis.yml +0 -13
  37. data/lib/freddy/adapters/march_hare_adapter.rb +0 -64
  38. data/lib/freddy/trace_carrier.rb +0 -28
  39. data/spec/freddy/trace_carrier_spec.rb +0 -56
data/spec/spec_helper.rb CHANGED
@@ -2,14 +2,9 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  Bundler.setup
4
4
 
5
- require 'codeclimate-test-reporter'
6
- SimpleCov.start do
7
- formatter SimpleCov::Formatter::MultiFormatter.new([
8
- SimpleCov::Formatter::HTMLFormatter,
9
- CodeClimate::TestReporter::Formatter
10
- ])
11
- add_filter '/spec/'
12
- end
5
+ ENV['OTEL_TRACES_EXPORTER'] = 'none'
6
+ require 'opentelemetry/sdk'
7
+ OpenTelemetry::SDK.configure
13
8
 
14
9
  require 'pry'
15
10
  require 'freddy'
@@ -22,10 +17,6 @@ RSpec.configure do |config|
22
17
  config.run_all_when_everything_filtered = true
23
18
  config.filter_run :focus
24
19
  config.order = 'random'
25
-
26
- config.before do
27
- OpenTracing.global_tracer ||= OpenTracing::Tracer.new
28
- end
29
20
  end
30
21
 
31
22
  def random_destination
@@ -43,6 +34,7 @@ end
43
34
  def wait_for
44
35
  100.times do
45
36
  return if yield
37
+
46
38
  sleep 0.005
47
39
  end
48
40
  end
@@ -53,7 +45,7 @@ def deliver(custom_destination = destination)
53
45
  end
54
46
 
55
47
  def logger
56
- Logger.new(STDOUT).tap { |l| l.level = Logger::ERROR }
48
+ Logger.new($stdout).tap { |l| l.level = Logger::ERROR }
57
49
  end
58
50
 
59
51
  def config
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.6.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - Salemove TechMovers
8
- autorequire:
7
+ - Glia TechMovers
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-15 00:00:00.000000000 Z
11
+ date: 2021-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,19 +67,33 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.6'
69
69
  - !ruby/object:Gem::Dependency
70
- name: opentracing
70
+ name: opentelemetry-api
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.4'
75
+ version: 1.0.0.rc3
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.4'
82
+ version: 1.0.0.rc3
83
+ - !ruby/object:Gem::Dependency
84
+ name: opentelemetry-semantic_conventions
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: thread
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: zlib
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.1'
97
125
  description: Messaging API
98
126
  email:
99
127
  - techmovers@salemove.com
@@ -101,13 +129,12 @@ executables: []
101
129
  extensions: []
102
130
  extra_rdoc_files: []
103
131
  files:
132
+ - ".github/workflows/ci.yml"
104
133
  - ".gitignore"
105
- - ".npmignore"
106
134
  - ".rspec"
107
135
  - ".rubocop.yml"
108
136
  - ".ruby-gemset"
109
137
  - ".ruby-version"
110
- - ".travis.yml"
111
138
  - Gemfile
112
139
  - LICENCE.txt
113
140
  - README.md
@@ -116,12 +143,12 @@ files:
116
143
  - lib/freddy.rb
117
144
  - lib/freddy/adapters.rb
118
145
  - lib/freddy/adapters/bunny_adapter.rb
119
- - lib/freddy/adapters/march_hare_adapter.rb
120
146
  - lib/freddy/consumers.rb
121
147
  - lib/freddy/consumers/respond_to_consumer.rb
122
148
  - lib/freddy/consumers/response_consumer.rb
123
149
  - lib/freddy/consumers/tap_into_consumer.rb
124
150
  - lib/freddy/delivery.rb
151
+ - lib/freddy/encoding.rb
125
152
  - lib/freddy/error_response.rb
126
153
  - lib/freddy/invalid_request_error.rb
127
154
  - lib/freddy/message_handler.rb
@@ -135,7 +162,9 @@ files:
135
162
  - lib/freddy/responder_handler.rb
136
163
  - lib/freddy/sync_response_container.rb
137
164
  - lib/freddy/timeout_error.rb
138
- - lib/freddy/trace_carrier.rb
165
+ - lib/freddy/tracing.rb
166
+ - lib/freddy/version.rb
167
+ - spec/.rubocop.yml
139
168
  - spec/freddy/consumers/respond_to_consumer_spec.rb
140
169
  - spec/freddy/error_response_spec.rb
141
170
  - spec/freddy/freddy_spec.rb
@@ -143,17 +172,16 @@ files:
143
172
  - spec/freddy/payload_spec.rb
144
173
  - spec/freddy/responder_handler_spec.rb
145
174
  - spec/freddy/sync_response_container_spec.rb
146
- - spec/freddy/trace_carrier_spec.rb
147
175
  - spec/integration/concurrency_spec.rb
148
176
  - spec/integration/reply_spec.rb
149
177
  - spec/integration/tap_into_with_group_spec.rb
150
178
  - spec/integration/tracing_spec.rb
151
179
  - spec/spec_helper.rb
152
- homepage:
180
+ homepage: https://github.com/salemove/freddy
153
181
  licenses:
154
- - Private
182
+ - MIT
155
183
  metadata: {}
156
- post_install_message:
184
+ post_install_message:
157
185
  rdoc_options: []
158
186
  require_paths:
159
187
  - lib
@@ -161,19 +189,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
189
  requirements:
162
190
  - - ">="
163
191
  - !ruby/object:Gem::Version
164
- version: '0'
192
+ version: '2.6'
165
193
  required_rubygems_version: !ruby/object:Gem::Requirement
166
194
  requirements:
167
195
  - - ">="
168
196
  - !ruby/object:Gem::Version
169
197
  version: '0'
170
198
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.7.6
173
- signing_key:
199
+ rubygems_version: 3.1.6
200
+ signing_key:
174
201
  specification_version: 4
175
202
  summary: API for inter-application messaging supporting acknowledgements and request-response
176
203
  test_files:
204
+ - spec/.rubocop.yml
177
205
  - spec/freddy/consumers/respond_to_consumer_spec.rb
178
206
  - spec/freddy/error_response_spec.rb
179
207
  - spec/freddy/freddy_spec.rb
@@ -181,7 +209,6 @@ test_files:
181
209
  - spec/freddy/payload_spec.rb
182
210
  - spec/freddy/responder_handler_spec.rb
183
211
  - spec/freddy/sync_response_container_spec.rb
184
- - spec/freddy/trace_carrier_spec.rb
185
212
  - spec/integration/concurrency_spec.rb
186
213
  - spec/integration/reply_spec.rb
187
214
  - spec/integration/tap_into_with_group_spec.rb
data/.npmignore DELETED
@@ -1,8 +0,0 @@
1
- .git*
2
- .rspec
3
- .ruby*
4
- Gemfile*
5
- *.gemspec
6
- spec/
7
- *.rb
8
- lib/messaging
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.1
4
- - jruby-9.1.5.0
5
- addons:
6
- code_climate:
7
- repo_token: 1f3842b985fdeff6a36168165d491ca5f444667e9381a85c899a61706a9dd285
8
- services:
9
- - rabbitmq
10
- before_script:
11
- - gem install bundler
12
- - bundle install
13
- script: bundle exec rake
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'march_hare'
4
-
5
- class Freddy
6
- module Adapters
7
- class MarchHareAdapter
8
- def self.connect(config)
9
- hare = MarchHare.connect(config)
10
- new(hare)
11
- end
12
-
13
- def initialize(hare)
14
- @hare = hare
15
- end
16
-
17
- def create_channel(prefetch: nil)
18
- hare_channel = @hare.create_channel
19
- hare_channel.basic_qos(prefetch) if prefetch
20
- Channel.new(hare_channel)
21
- end
22
-
23
- def close
24
- @hare.close
25
- end
26
-
27
- class Channel
28
- extend Forwardable
29
-
30
- NO_ROUTE = 312
31
-
32
- def initialize(channel)
33
- @channel = channel
34
- end
35
-
36
- def_delegators :@channel, :topic, :default_exchange, :consumers, :acknowledge, :reject
37
-
38
- def queue(*args)
39
- Queue.new(@channel.queue(*args))
40
- end
41
-
42
- def on_no_route
43
- @channel.on_return do |reply_code, _, exchange_name, _, properties|
44
- if exchange_name != Freddy::FREDDY_TOPIC_EXCHANGE_NAME && reply_code == NO_ROUTE
45
- yield(properties.correlation_id)
46
- end
47
- end
48
- end
49
- end
50
-
51
- class Queue < Shared::Queue
52
- def subscribe(manual_ack: false)
53
- @queue.subscribe(manual_ack: manual_ack) do |meta, payload|
54
- parsed_payload = Payload.parse(payload)
55
- delivery = Delivery.new(
56
- parsed_payload, meta, meta.routing_key, meta.delivery_tag
57
- )
58
- yield(delivery)
59
- end
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Freddy
4
- # Carrier for rabbitmq following OpenTracing API
5
- # See https://github.com/opentracing/opentracing-ruby/blob/master/lib/opentracing/carrier.rb
6
- class TraceCarrier
7
- def initialize(properties)
8
- @properties = properties
9
- end
10
-
11
- def [](key)
12
- @properties.headers && @properties.headers["x-trace-#{key}"]
13
- end
14
-
15
- def []=(key, value)
16
- @properties[:headers] ||= {}
17
- @properties[:headers]["x-trace-#{key}"] = value
18
- end
19
-
20
- def each(&block)
21
- Hash[
22
- (@properties.headers || {})
23
- .select { |key, _| key =~ /^x-trace/ }
24
- .map { |key, value| [key.sub(/x-trace-/, ''), value] }
25
- ].each(&block)
26
- end
27
- end
28
- end
@@ -1,56 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Freddy::TraceCarrier do
4
- subject(:carrier) { described_class.new(properties) }
5
-
6
- context 'when adding trace information' do
7
- let(:properties) { { x: 'y' } }
8
- let(:key_name) { 'some-key' }
9
- let(:key_value) { 'some-key' }
10
-
11
- it 'adds a header with x-trace- prefix' do
12
- carrier[key_name] = key_value
13
- expect(properties[:headers]["x-trace-#{key_name}"]).to eq(key_value)
14
- end
15
- end
16
-
17
- context 'when extracting trace information' do
18
- let(:key_name) { 'some-key' }
19
- let(:serialized_key_name) { "x-trace-#{key_name}" }
20
- let(:key_value) { 'some-key' }
21
-
22
- let(:properties) do
23
- double(headers: { serialized_key_name => key_value })
24
- end
25
-
26
- it 'extracts a header with x-trace- prefix' do
27
- expect(carrier[key_name]).to eq(key_value)
28
- end
29
- end
30
-
31
- describe '#each' do
32
- context 'when headers are present' do
33
- let(:properties) do
34
- double(
35
- headers: {
36
- 'x-trace-key1' => 'value1',
37
- 'x-trace-key2' => 'value2',
38
- 'other-key' => 'value3'
39
- }
40
- )
41
- end
42
-
43
- it 'iterates over keys starting with x-trace- prefix' do
44
- expect(carrier.each.count).to eq(2)
45
- end
46
- end
47
-
48
- context 'when no headers' do
49
- let(:properties) { double(headers: nil) }
50
-
51
- it 'iterates over an empty list' do
52
- expect(carrier.each.count).to eq(0)
53
- end
54
- end
55
- end
56
- end