freddy 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74c044f881fa44748647d92c0bb450755b69d3d1da6cbe23c87ff15e6724f415
4
- data.tar.gz: f7b80d3bebfa4240727b1cdf1f6ef84449c3e91d5db1de81dd3a6a8cb4acc0df
3
+ metadata.gz: addf621163f5d1faf987bf6ab91d027a538631303543833e1aea8946d3bc0e0b
4
+ data.tar.gz: 22d6eddbd383a2d7b7b46a4e69b2f78b1a0ba6e8a803a1c8b13be7a8be9d3948
5
5
  SHA512:
6
- metadata.gz: ba8c640285852bec4f9d318ccc8278137401152a14580be46a9ec281aca5bec6c7ca6cfd674161afd7124d0c936c103513acd14283cc24310cc03d2a1572d5f9
7
- data.tar.gz: d4abff33f63da251866dc5fb9dce48a088738aa88dc70d0351bd2b633742d118d05bc8de02e5d2274da14bbbe15d225673e90870a885157334f4f5d47d77f704
6
+ metadata.gz: 569d91cfe03265013e808bd1847c023b5e307e0411b12ef8113e54e3c471953f21f7a0ed3603c81513cf4a4d628447347d1d582e808b14cdd7f58ef5c8d5023c
7
+ data.tar.gz: bdeb3e75486d8f026e30d1766db834f2d6f7bad2e788f8d74eaaa836e428d02f56101d1e67b8ec5697cbd04ed9b891e6b98933d5c483c17e200b64cf8b877afd
@@ -15,8 +15,7 @@ jobs:
15
15
 
16
16
 
17
17
  - name: Release Gem
18
- uses: discourse/publish-rubygems-action@b55d7b91b55e61752dc6cbc2972f8e16fe6c1a02
18
+ uses: discourse/publish-rubygems-action@ec5415e2cc3509a5cc8c4eef9499cf3fb05f8391
19
19
  env:
20
- GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
21
20
  RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
22
21
  RELEASE_COMMAND: rake release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- freddy (2.6.0)
4
+ freddy (2.7.0)
5
5
  bunny (~> 2.11)
6
6
  concurrent-ruby (~> 1.0)
7
7
  oj (~> 3.6)
@@ -14,16 +14,16 @@ GEM
14
14
  specs:
15
15
  amq-protocol (2.3.2)
16
16
  ast (2.4.2)
17
- bunny (2.19.0)
17
+ bunny (2.22.0)
18
18
  amq-protocol (~> 2.3, >= 2.3.1)
19
19
  sorted_set (~> 1, >= 1.0.2)
20
20
  coderay (1.1.3)
21
- concurrent-ruby (1.1.9)
21
+ concurrent-ruby (1.2.2)
22
22
  diff-lcs (1.4.4)
23
23
  hamster (3.0.0)
24
24
  concurrent-ruby (~> 1.0)
25
25
  method_source (1.0.0)
26
- oj (3.13.21)
26
+ oj (3.15.0)
27
27
  opentelemetry-api (1.1.0)
28
28
  opentelemetry-common (0.19.6)
29
29
  opentelemetry-api (~> 1.0)
@@ -34,7 +34,7 @@ GEM
34
34
  opentelemetry-common (~> 0.19.3)
35
35
  opentelemetry-registry (~> 0.2)
36
36
  opentelemetry-semantic_conventions
37
- opentelemetry-semantic_conventions (1.8.0)
37
+ opentelemetry-semantic_conventions (1.10.0)
38
38
  opentelemetry-api (~> 1.0)
39
39
  parallel (1.22.1)
40
40
  parser (3.1.2.0)
@@ -44,7 +44,7 @@ GEM
44
44
  method_source (~> 1.0)
45
45
  rainbow (3.1.1)
46
46
  rake (13.0.6)
47
- rbtree (0.4.5)
47
+ rbtree (0.4.6)
48
48
  regexp_parser (2.5.0)
49
49
  rexml (3.2.5)
50
50
  rspec (3.10.0)
@@ -29,7 +29,7 @@ class Freddy
29
29
  private
30
30
 
31
31
  def create_queue
32
- topic_exchange = @channel.topic(Freddy::FREDDY_TOPIC_EXCHANGE_NAME)
32
+ topic_exchange = @channel.topic(exchange_name)
33
33
 
34
34
  queue =
35
35
  if group
@@ -48,7 +48,7 @@ class Freddy
48
48
  def process_message(_queue, delivery)
49
49
  @consume_thread_pool.post do
50
50
  delivery.in_span do
51
- yield delivery.payload, delivery.routing_key
51
+ yield delivery.payload, delivery.routing_key, delivery.timestamp
52
52
  @channel.acknowledge(delivery.tag)
53
53
  end
54
54
  rescue StandardError
@@ -76,6 +76,10 @@ class Freddy
76
76
  def on_exception
77
77
  @options.fetch(:on_exception, :ack)
78
78
  end
79
+
80
+ def exchange_name
81
+ @options.fetch(:exchange_name, Freddy::FREDDY_TOPIC_EXCHANGE_NAME)
82
+ end
79
83
  end
80
84
  end
81
85
  end
@@ -24,6 +24,10 @@ class Freddy
24
24
  @metadata.reply_to
25
25
  end
26
26
 
27
+ def timestamp
28
+ @metadata[:timestamp]
29
+ end
30
+
27
31
  def in_span(&block)
28
32
  name = "#{Tracing.span_destination(@exchange, @routing_key)} process"
29
33
  kind = OpenTelemetry::Trace::SpanKind::CONSUMER
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Freddy
4
- VERSION = '2.6.0'
4
+ VERSION = '2.7.0'
5
5
  end
data/lib/freddy.rb CHANGED
@@ -117,8 +117,16 @@ class Freddy
117
117
  # `:ack` simply acknowledges the message and re-raises the exception. `:reject`
118
118
  # rejects the message without requeueing it. `:requeue` rejects the message with
119
119
  # `requeue` flag.
120
- #
121
- # @yield [message] Yields received message to the block
120
+ # @option options [String] :exchange_name
121
+ # Exchange to bind to. Default is `freddy-topic`.
122
+ #
123
+ # @yield [message] Yields received message to the block.
124
+ # @yieldparam [Object] payload
125
+ # Yields the received message's payload.
126
+ # @yieldparam [String] routing_key
127
+ # Yields the received message's routing key.
128
+ # @yieldparam [Time] timestamp
129
+ # Yields received message's timestamp.
122
130
  #
123
131
  # @return [#shutdown]
124
132
  #
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Tapping into with exchange identifier' do
4
+ let(:freddy) { Freddy.build(logger, **config) }
5
+
6
+ let(:connection) { Freddy::Adapters.determine.connect(config) }
7
+ let(:topic) { 'test_topic_exchange' }
8
+ let(:channel) { connection.create_channel }
9
+ let(:message_payload) { { test: 'test' }.to_json }
10
+ let(:expected_payload) { { test: 'test' } }
11
+ let(:publish_timestamp) { Time.now.to_i }
12
+
13
+ after do
14
+ connection.close
15
+ freddy.close
16
+ end
17
+
18
+ it 'receives message' do
19
+ freddy.tap_into('pattern.*', exchange_name: topic) do |payload, _routing_key, timestamp|
20
+ @received_payload = payload
21
+ @received_timestamp = timestamp
22
+ end
23
+
24
+ channel.topic(topic).publish(message_payload, { routing_key: 'pattern.random', timestamp: publish_timestamp })
25
+
26
+ wait_for { @received_payload }
27
+ wait_for { @received_timestamp }
28
+
29
+ expect(@received_payload).to eq(expected_payload)
30
+ expect(@received_timestamp.to_i).to eq(publish_timestamp)
31
+ end
32
+
33
+ it 'receives message with nil timestamp when timestamp is not published' do
34
+ received_timestamp = 0
35
+ freddy.tap_into('pattern.*', exchange_name: topic) do |_payload, _routing_key, timestamp|
36
+ received_timestamp = timestamp
37
+ end
38
+
39
+ channel.topic(topic).publish(message_payload, { routing_key: 'pattern.random' })
40
+ default_sleep
41
+
42
+ expect(received_timestamp).to eq(nil)
43
+ end
44
+ end
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: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glia TechMovers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-17 00:00:00.000000000 Z
11
+ date: 2023-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -176,6 +176,7 @@ files:
176
176
  - spec/freddy/sync_response_container_spec.rb
177
177
  - spec/integration/concurrency_spec.rb
178
178
  - spec/integration/reply_spec.rb
179
+ - spec/integration/tap_into_with_exchange_spec.rb
179
180
  - spec/integration/tap_into_with_group_spec.rb
180
181
  - spec/integration/tracing_spec.rb
181
182
  - spec/spec_helper.rb