fleck 2.2.2 → 2.2.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d362b6a20a242296ef0697d57c31503067df64d05b3cee439f58449a7dbe732
4
- data.tar.gz: 76f4a6b22cdfdff8a9826702073eae8866751e4c5446c1d7fdd1aaecd6341655
3
+ metadata.gz: 815c6aedba7e3ab97a3c057f1d35b689f4e33a5015f147975095053feeca49fb
4
+ data.tar.gz: 655f4eb33edd3926c23694d407a1ffbecfaf40437a9273c08a26048a4ac73ffd
5
5
  SHA512:
6
- metadata.gz: 794a481e65666fa6ac3be6bd7014d0a20a54819849f2be83402950778de70d24728d3bd283a1fb71332504acb501fe7323e315dbcf9f20f4fe8c229e74120611
7
- data.tar.gz: 42c5b8f0dd478e595d47bde2250a5d01d4b81414ad9670288a1098bb6f7168b71949a8401e848b3f6d2e4d163d23babb70259695ccaa7314fad962b9084a0b1f
6
+ metadata.gz: d0696f5d4131e441a32b73fdce0939ed1aa002562f8aa931f58407957890b53a769b59e9537ef6c366b6de2e2a6ec249eb5226cd388d0f0426033e32e31330e3
7
+ data.tar.gz: 7fa7d2da95225e18d4a826f62eed4ec23b57621656e8b1d9ad0e8ff21184c9a00da1babdbdb95c076b69e74cb170bcfd2652a0965f0a13f1856341439ff465ab
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@
6
6
 
7
7
  Below you can see the CHANGELOG of **Fleck** gem by version number.
8
8
 
9
+ #### v2.2.4 (17 September 2026) #####
10
+
11
+ - **FIX** Return a bad-request response for malformed consumer request JSON with native Oj and
12
+ `Oj.mimic_JSON` parser errors.
13
+
9
14
  #### v2.2.0 (22 Dicember 2022) #####
10
15
 
11
16
  - **NEW** Implemented the feature which allows to add a modifier `lambda` to `param` decorator,
data/lib/fleck/client.rb CHANGED
@@ -3,7 +3,21 @@ module Fleck
3
3
  class Client
4
4
  include Fleck::Loggable
5
5
 
6
- attr_reader :local_ip, :remote_ip
6
+ @instances = ThreadSafe::Array.new
7
+
8
+ def self.<<(new_instance)
9
+ @instances << new_instance
10
+ end
11
+
12
+ def self.remove_instance(instance)
13
+ @instances.delete(instance)
14
+ end
15
+
16
+ def self.terminate_all
17
+ @instances.map(&:terminate)
18
+ end
19
+
20
+ attr_reader :local_ip, :remote_ip, :terminated
7
21
 
8
22
  def initialize(connection, queue_name = "", exchange_type: :direct, exchange_name: "", multiple_responses: false, concurrency: 1)
9
23
  @connection = connection
@@ -29,9 +43,11 @@ module Fleck
29
43
 
30
44
  logger.debug("Client initialized!")
31
45
 
32
- at_exit do
33
- terminate
34
- end
46
+ Fleck::Client << self
47
+
48
+ # at_exit do
49
+ # terminate
50
+ # end
35
51
  end
36
52
 
37
53
  def request(action: nil, version: nil, headers: {}, params: {}, async: @multiple_responses || false, timeout: @default_timeout, queue: @queue_name, rmq_options: {}, &block)
@@ -73,7 +89,8 @@ module Fleck
73
89
  def terminate
74
90
  @terminated = true
75
91
  logger.info "Unsubscribing from #{@reply_queue.name}"
76
- @subscriptions.map(&:cancel) # stop receiving new messages
92
+ # @subscriptions.map(&:cancel) # stop receiving new messages
93
+ @channel&.close unless @channel&.closed?
77
94
  logger.info "Canceling pending requests"
78
95
  # cancel pending requests
79
96
  while item = @requests.shift do
@@ -83,6 +100,8 @@ module Fleck
83
100
  logger.error e.inspect + "\n" + e.backtrace.join("\n")
84
101
  end
85
102
  end
103
+
104
+ Fleck::Client.remove_instance(self)
86
105
  end
87
106
 
88
107
 
@@ -120,5 +139,9 @@ module Fleck
120
139
  end
121
140
  end
122
141
 
123
- require "fleck/client/request"
124
- require "fleck/client/response"
142
+ at_exit do
143
+ Fleck::Client.terminate_all
144
+ end
145
+
146
+ require 'fleck/client/request'
147
+ require 'fleck/client/response'
@@ -74,7 +74,16 @@ module Fleck
74
74
  protected
75
75
 
76
76
  def parse_request!
77
- @data = Oj.load(@payload, mode: :compat).to_hash_with_indifferent_access.filtered!
77
+ begin
78
+ @data = Oj.load(@payload, mode: :compat)
79
+ rescue StandardError => e
80
+ raise unless json_parse_error?(e)
81
+
82
+ fail_request!(400, 'Bad Request', e)
83
+ return
84
+ end
85
+
86
+ @data = @data.to_hash_with_indifferent_access.filtered!
78
87
  @headers.merge!(@data['headers'] || {}).filtered!
79
88
 
80
89
  logger.debug "Request (exchange: #{@exchange.inspect}, queue: #{@queue.inspect}, " \
@@ -85,13 +94,18 @@ module Fleck
85
94
  @version = @headers['version']
86
95
  @ip = @headers['ip']
87
96
  @params = @data['params'] || {}
88
- rescue Oj::ParseError => e
89
- log_error(e)
90
- response.render_error(400, 'Bad request', e.inspect)
91
- @failed = true
92
97
  rescue StandardError => e
93
- log_error(e)
94
- response.render_error(500, 'Internal Server Error', e.inspect)
98
+ fail_request!(500, 'Internal Server Error', e)
99
+ end
100
+
101
+ def json_parse_error?(error)
102
+ error.is_a?(Oj::ParseError) || error.is_a?(EncodingError) ||
103
+ (defined?(JSON::ParserError) && error.is_a?(JSON::ParserError))
104
+ end
105
+
106
+ def fail_request!(status, message, error)
107
+ log_error(error)
108
+ response.render_error(status, [message, error.inspect])
95
109
  @failed = true
96
110
  end
97
111
  end
data/lib/fleck/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Open `Fleck` module to set `VERSION` constant.
4
4
  module Fleck
5
- VERSION = '2.2.2'
5
+ VERSION = '2.2.4'
6
6
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fleck
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-10-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -178,7 +177,6 @@ homepage: https://github.com/serioja90/fleck
178
177
  licenses:
179
178
  - MIT
180
179
  metadata: {}
181
- post_install_message:
182
180
  rdoc_options: []
183
181
  require_paths:
184
182
  - lib
@@ -193,8 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
191
  - !ruby/object:Gem::Version
194
192
  version: '0'
195
193
  requirements: []
196
- rubygems_version: 3.4.10
197
- signing_key:
194
+ rubygems_version: 4.0.16
198
195
  specification_version: 4
199
196
  summary: A Ruby gem for syncronous and asyncronous communication via Message Queue
200
197
  services.