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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/fleck/client.rb +30 -7
- data/lib/fleck/core/consumer/request.rb +21 -7
- data/lib/fleck/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 815c6aedba7e3ab97a3c057f1d35b689f4e33a5015f147975095053feeca49fb
|
|
4
|
+
data.tar.gz: 655f4eb33edd3926c23694d407a1ffbecfaf40437a9273c08a26048a4ac73ffd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
|
|
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
|
-
|
|
94
|
-
|
|
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
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.
|
|
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:
|
|
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:
|
|
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.
|