jsonrpc2 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/jsonrpc2/interface.rb +10 -0
- data/lib/jsonrpc2/version.rb +1 -1
- data/spec/lib/interface_spec.rb +46 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38157bffab895f13838433b4564add0f49d5823a9220eafc0b8d9e402bad7931
|
4
|
+
data.tar.gz: 5ff1f88ca328078754a7fec05f386ab7308ddef82fbb4f8e357b4eceeef0d373
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b59d216b880ebeb4988573873090e9bd0807b77a8c7235ee28cfd84a6aeef219d5a7c7c9e16109a93b55d1857a01d3bf7e5ccc10f6bde4e62972199e05f2bccc
|
7
|
+
data.tar.gz: 507d80c0b89143a72c092dc994bc31d72977d5289dfb2c446d879af4b8790f0456457bc8d649a21cdcae9d632f2e8d3acb121c9f24999dcf276d39c18122a05f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## [0.3.0] - 2023-02-09
|
2
|
+
### Added
|
3
|
+
- Possibility to define callback for request calls prior to validation `JSONRPC2::Interface#before_validation`
|
4
|
+
|
1
5
|
## [0.2.0] - 2022-04-07
|
2
6
|
### Added
|
3
7
|
- Possibility to define callback for server errors with `JSONRPC2::Interface#on_server_error`
|
data/lib/jsonrpc2/interface.rb
CHANGED
@@ -239,6 +239,7 @@ module JSONRPC2
|
|
239
239
|
# @param [Hash] params Method parameters
|
240
240
|
# @return [Hash] JSON response
|
241
241
|
def call(method, id, params)
|
242
|
+
invoke_before_validation_hook(method, id, params)
|
242
243
|
if api_methods.include?(method)
|
243
244
|
begin
|
244
245
|
Types.valid_params?(self.class, method, params)
|
@@ -398,10 +399,19 @@ module JSONRPC2
|
|
398
399
|
log_error("Server error hook failed - #{error.class}: #{error.message} #{error.backtrace.join("\n ")}")
|
399
400
|
end
|
400
401
|
|
402
|
+
def invoke_before_validation_hook(method, id, params)
|
403
|
+
before_validation(method: method, id: id, params: params)
|
404
|
+
rescue => error
|
405
|
+
log_error("Before validation hook failed - #{error.class}: #{error.message} #{error.backtrace.join("\n ")}")
|
406
|
+
end
|
407
|
+
|
401
408
|
# Available for reimplementation by a subclass, noop by default
|
402
409
|
def on_server_error(request_id:, error:)
|
403
410
|
end
|
404
411
|
|
412
|
+
def before_validation(method:, id:, params:)
|
413
|
+
end
|
414
|
+
|
405
415
|
def log_error(message)
|
406
416
|
logger.error("#{env['json.request-id']} #{message}") if logger.respond_to?(:error)
|
407
417
|
end
|
data/lib/jsonrpc2/version.rb
CHANGED
data/spec/lib/interface_spec.rb
CHANGED
@@ -118,6 +118,30 @@ RSpec.describe JSONRPC2::Interface do
|
|
118
118
|
)
|
119
119
|
end
|
120
120
|
end
|
121
|
+
|
122
|
+
context 'with a correctly configured before_validation hook' do
|
123
|
+
before do
|
124
|
+
rpc_api_class.class_eval do
|
125
|
+
attr_reader :test_before_validation_data
|
126
|
+
|
127
|
+
def before_validation(method:, id:, params:)
|
128
|
+
@test_before_validation_data = {
|
129
|
+
method: method,
|
130
|
+
id: id,
|
131
|
+
params: params
|
132
|
+
}
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'invokes the hook' do
|
138
|
+
dispatch_result
|
139
|
+
|
140
|
+
expect(instance.test_before_validation_data[:method]).to eq('hello')
|
141
|
+
expect(instance.test_before_validation_data[:id]).to eq(123)
|
142
|
+
expect(instance.test_before_validation_data[:params]).to eq({ 'name' => 'Geoff' })
|
143
|
+
end
|
144
|
+
end
|
121
145
|
end
|
122
146
|
|
123
147
|
context 'with an unhandled server error' do
|
@@ -131,6 +155,28 @@ RSpec.describe JSONRPC2::Interface do
|
|
131
155
|
)
|
132
156
|
end
|
133
157
|
|
158
|
+
context 'with a correctly configured error hook' do
|
159
|
+
before do
|
160
|
+
rpc_api_class.class_eval do
|
161
|
+
attr_reader :test_error_data
|
162
|
+
|
163
|
+
def on_server_error(request_id:, error:)
|
164
|
+
@test_error_data = {
|
165
|
+
request_id: request_id,
|
166
|
+
error: error
|
167
|
+
}
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'invokes the hook' do
|
173
|
+
dispatch_result
|
174
|
+
|
175
|
+
expect(instance.test_error_data[:error].message).to eq('He-Must-Not-Be-Named')
|
176
|
+
expect(instance.test_error_data[:request_id]).to eq(nil) # Request_id is generated higher in the stack
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
134
180
|
context 'with error hook raising an error' do
|
135
181
|
let(:initialization_params) { super().merge('rack.logger' => rack_logger) }
|
136
182
|
let(:rack_logger) { instance_double(::Logger, :rack_logger, info: nil, error: nil) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonrpc2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geoff Youngs
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|