fleck 2.2.3 → 2.2.5

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: 12549351b1fbd3d7cc3aac011b2949ed7c75d45cc00627ebce98ba87e5ffc3fd
4
- data.tar.gz: d1c254ae75c7510c6d0436a4b10610e0002478d4405c5a80034583f5b04a8b4f
3
+ metadata.gz: 0d5ba87206bea64ea05db2e32d0d66e6a086c46fa00fbb9460f8cec9001d4b17
4
+ data.tar.gz: cec7743a444f2f6056f36f2d789d323f54c32fb6120828eaaf1252e0022f897e
5
5
  SHA512:
6
- metadata.gz: 3b94e6339c1aa8151c94d473eac81c918d67e2da6c805d20725a62f044bccc41c6456dd34c3e0fa16c6559c66d208196f9ae7423ed527ad891f953edccd1f6cf
7
- data.tar.gz: 531c4ef36f289ab36dc796f24ec26a81de57bab049a9d4349372226416bcdb45b5e856d85ac528abbdf1e422351d1bbcddee24359065d61e72379fbf2975a122
6
+ metadata.gz: 6426315380da50b96552abf972dcbc167a1bcef9b3e19900094cb42ee2ffa0662cd146a39d10e69dfefb63dc57ff4655a9226d724cb83ba611e92e6b8b5e476d
7
+ data.tar.gz: ed2f0b3bdc60204c79c7ad4e0f5bda747ee54888d8921fb5c44991c37a2bac3ed95d5d82fa5a296a95ee1d68d9e3643a3f1190102b02a0cf32984e60bff15d73
data/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@
6
6
 
7
7
  Below you can see the CHANGELOG of **Fleck** gem by version number.
8
8
 
9
+ #### v2.2.5 (18 September 2026) #####
10
+
11
+ - **FIX** Keep unexpected exception details in server logs without exposing them in automatic 500 responses.
12
+
13
+ #### v2.2.4 (17 September 2026) #####
14
+
15
+ - **FIX** Return a bad-request response for malformed consumer request JSON with native Oj and
16
+ `Oj.mimic_JSON` parser errors.
17
+
9
18
  #### v2.2.0 (22 Dicember 2022) #####
10
19
 
11
20
  - **NEW** Implemented the feature which allows to add a modifier `lambda` to `param` decorator,
@@ -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,20 @@ 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
+ errors = [message]
109
+ errors << error.inspect if status < 500
110
+ response.render_error(status, errors)
95
111
  @failed = true
96
112
  end
97
113
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module Fleck
3
2
  module Core
4
3
  class Consumer
@@ -30,6 +29,14 @@ module Fleck
30
29
  @deprecated
31
30
  end
32
31
 
32
+ def reset!
33
+ @status = 200
34
+ @errors = []
35
+ @headers = {}
36
+ @body = nil
37
+ @deprecated = false
38
+ end
39
+
33
40
  def not_found(msg = nil)
34
41
  @status = 404
35
42
  @errors << 'Resource Not Found'
@@ -51,25 +58,25 @@ module Fleck
51
58
 
52
59
  def to_json(filter: false)
53
60
  data = {
54
- "status" => @status,
55
- "errors" => @errors,
56
- "headers" => @headers,
57
- "body" => @body,
58
- "deprecated" => @deprecated
61
+ 'status' => @status,
62
+ 'errors' => @errors,
63
+ 'headers' => @headers,
64
+ 'body' => @body,
65
+ 'deprecated' => @deprecated
59
66
  }
60
67
  data.filter! if filter
61
68
 
62
- return Oj.dump(data, mode: :compat)
63
- rescue => e
69
+ Oj.dump(data, mode: :compat)
70
+ rescue StandardError => e
64
71
  logger.error e.inspect + "\n" + e.backtrace.join("\n")
65
- return Oj.dump({
66
- "status" => 500,
67
- "errors" => ['Internal Server Error', 'Failed to dump the response to JSON']
68
- }, mode: :compat)
72
+ Oj.dump({
73
+ 'status' => 500,
74
+ 'errors' => ['Internal Server Error', 'Failed to dump the response to JSON']
75
+ }, mode: :compat)
69
76
  end
70
77
 
71
78
  def to_s
72
- return "#<#{self.class} #{self.to_json(filter: true)}>"
79
+ "#<#{self.class} #{to_json(filter: true)}>"
73
80
  end
74
81
  end
75
82
  end
@@ -124,7 +124,8 @@ module Fleck
124
124
  end
125
125
  rescue StandardError => e
126
126
  log_error(e)
127
- internal_server_error! error: e.inspect, interrupt: false
127
+ response.reset!
128
+ internal_server_error! interrupt: false
128
129
  ensure
129
130
  send_response!
130
131
  log_request
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.3'
5
+ VERSION = '2.2.5'
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.3
4
+ version: 2.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-11-17 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.