jsonrpc_interface 0.0.1 → 0.1.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/.gitignore +1 -0
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +5 -1
- data/Gemfile.lock +55 -4
- data/README.md +327 -0
- data/Rakefile +7 -1
- data/Steepfile +7 -0
- data/jsonrpc_interface.gemspec +10 -1
- data/lib/jsonrpc/error_response.rb +47 -0
- data/lib/jsonrpc/notification.rb +41 -0
- data/lib/jsonrpc/request.rb +46 -0
- data/lib/jsonrpc/response.rb +29 -0
- data/lib/jsonrpc/rpc_object.rb +166 -0
- data/lib/jsonrpc/version.rb +5 -1
- data/lib/jsonrpc.rb +50 -0
- data/sig/jsonrpc_interface.rbs +137 -1
- metadata +80 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 25256ea9e6e7e75cb545b1d76c443678e06a4a7e94f055c0288abd3a368dde63
|
|
4
|
+
data.tar.gz: 3984365f41a8f2629011e9144df1c3f2ec421fa02f9e582517db74a5bb95f404
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eb0dde16f67f210bd10fe6c226c8cf9e421d5a12a5b5c894ac8e2687d8aa8f26375c675dfd000b7df12304e762c6e04f534dd8cc6b9ad547a3ee6b7787c18d28
|
|
7
|
+
data.tar.gz: a92f486f02ac219400b4b6aa083fd7c7e09ec4057645b8f0eaa98bb60bbab63d4172f2c71d7c1b369106459332053772b311ed7a7d6e1ddeb743d8077130e70b
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -2,6 +2,9 @@ PATH
|
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
4
|
jsonrpc_interface (0.1.0)
|
|
5
|
+
smart_schema (~> 0.11)
|
|
6
|
+
smart_types (~> 0.8)
|
|
7
|
+
smart_value-object (~> 0.2)
|
|
5
8
|
|
|
6
9
|
GEM
|
|
7
10
|
remote: https://rubygems.org/
|
|
@@ -22,23 +25,38 @@ GEM
|
|
|
22
25
|
ast (2.4.2)
|
|
23
26
|
coderay (1.1.3)
|
|
24
27
|
concurrent-ruby (1.2.2)
|
|
28
|
+
csv (3.2.6)
|
|
25
29
|
diff-lcs (1.5.0)
|
|
26
30
|
docile (1.4.0)
|
|
27
|
-
|
|
31
|
+
ffi (1.15.5)
|
|
32
|
+
fileutils (1.7.1)
|
|
33
|
+
i18n (1.14.1)
|
|
28
34
|
concurrent-ruby (~> 1.0)
|
|
29
35
|
json (2.6.3)
|
|
36
|
+
language_server-protocol (3.17.0.3)
|
|
37
|
+
listen (3.8.0)
|
|
38
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
39
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
|
40
|
+
logger (1.5.3)
|
|
30
41
|
method_source (1.0.0)
|
|
31
42
|
minitest (5.18.0)
|
|
32
43
|
parallel (1.23.0)
|
|
33
|
-
parser (3.2.2.
|
|
44
|
+
parser (3.2.2.3)
|
|
34
45
|
ast (~> 2.4.1)
|
|
46
|
+
racc
|
|
35
47
|
pry (0.14.2)
|
|
36
48
|
coderay (~> 1.1)
|
|
37
49
|
method_source (~> 1.0)
|
|
50
|
+
qonfig (0.28.0)
|
|
51
|
+
racc (1.7.0)
|
|
38
52
|
rack (3.0.7)
|
|
39
53
|
rainbow (3.1.1)
|
|
40
54
|
rake (13.0.6)
|
|
41
|
-
|
|
55
|
+
rb-fsevent (0.11.2)
|
|
56
|
+
rb-inotify (0.10.1)
|
|
57
|
+
ffi (~> 1.0)
|
|
58
|
+
rbs (3.1.0)
|
|
59
|
+
regexp_parser (2.8.1)
|
|
42
60
|
rexml (3.2.5)
|
|
43
61
|
rspec (3.12.0)
|
|
44
62
|
rspec-core (~> 3.12.0)
|
|
@@ -63,7 +81,7 @@ GEM
|
|
|
63
81
|
rubocop-ast (>= 1.28.0, < 2.0)
|
|
64
82
|
ruby-progressbar (~> 1.7)
|
|
65
83
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
66
|
-
rubocop-ast (1.
|
|
84
|
+
rubocop-ast (1.29.0)
|
|
67
85
|
parser (>= 3.2.1.0)
|
|
68
86
|
rubocop-capybara (2.18.0)
|
|
69
87
|
rubocop (~> 1.41)
|
|
@@ -83,12 +101,43 @@ GEM
|
|
|
83
101
|
rubocop-capybara (~> 2.17)
|
|
84
102
|
rubocop-factory_bot (~> 2.22)
|
|
85
103
|
ruby-progressbar (1.13.0)
|
|
104
|
+
securerandom (0.2.2)
|
|
86
105
|
simplecov (0.22.0)
|
|
87
106
|
docile (~> 1.1)
|
|
88
107
|
simplecov-html (~> 0.11)
|
|
89
108
|
simplecov_json_formatter (~> 0.1)
|
|
90
109
|
simplecov-html (0.12.3)
|
|
91
110
|
simplecov_json_formatter (0.1.4)
|
|
111
|
+
smart_engine (0.17.0)
|
|
112
|
+
smart_initializer (0.11.1)
|
|
113
|
+
qonfig (~> 0.24)
|
|
114
|
+
smart_engine (~> 0.16)
|
|
115
|
+
smart_types (~> 0.8)
|
|
116
|
+
smart_schema (0.11.0)
|
|
117
|
+
smart_engine (~> 0.17)
|
|
118
|
+
smart_types (~> 0.8)
|
|
119
|
+
smart_types (0.8.0)
|
|
120
|
+
smart_engine (~> 0.11)
|
|
121
|
+
smart_value-object (0.2.0)
|
|
122
|
+
smart_initializer (~> 0.5)
|
|
123
|
+
steep (1.4.0)
|
|
124
|
+
activesupport (>= 5.1)
|
|
125
|
+
concurrent-ruby (>= 1.2.2)
|
|
126
|
+
csv (>= 3.0.9)
|
|
127
|
+
fileutils (>= 1.1.0)
|
|
128
|
+
json (>= 2.1.0)
|
|
129
|
+
language_server-protocol (>= 3.15, < 4.0)
|
|
130
|
+
listen (~> 3.0)
|
|
131
|
+
logger (>= 1.3.0)
|
|
132
|
+
parser (>= 3.1)
|
|
133
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
134
|
+
rbs (>= 2.8.0)
|
|
135
|
+
securerandom (>= 0.1)
|
|
136
|
+
strscan (>= 1.0.0)
|
|
137
|
+
terminal-table (>= 2, < 4)
|
|
138
|
+
strscan (3.0.6)
|
|
139
|
+
terminal-table (3.0.2)
|
|
140
|
+
unicode-display_width (>= 1.1.1, < 3)
|
|
92
141
|
tzinfo (2.0.6)
|
|
93
142
|
concurrent-ruby (~> 1.0)
|
|
94
143
|
unicode-display_width (2.4.2)
|
|
@@ -102,8 +151,10 @@ DEPENDENCIES
|
|
|
102
151
|
jsonrpc_interface!
|
|
103
152
|
pry (~> 0.14)
|
|
104
153
|
rake (~> 13.0)
|
|
154
|
+
rbs (~> 3.1)
|
|
105
155
|
rspec (~> 3.12)
|
|
106
156
|
simplecov (~> 0.22)
|
|
157
|
+
steep (~> 1.4)
|
|
107
158
|
|
|
108
159
|
BUNDLED WITH
|
|
109
160
|
2.4.13
|
data/README.md
CHANGED
|
@@ -1 +1,328 @@
|
|
|
1
1
|
# JSONRPC Interface
|
|
2
|
+
|
|
3
|
+
JRPC Request, JRPC Notification, JRPC Response, JRPC Error Response, JRPC Object Builder and JRPC Error Codes in Object Oriented Way.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
- [Installation](#installation)
|
|
8
|
+
- [Usage](#usage)
|
|
9
|
+
- [Development](#development)
|
|
10
|
+
- [License](#license)
|
|
11
|
+
- [Authors](#authors)
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
gem 'jsonrpc_interface'
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```shell
|
|
20
|
+
bundle install
|
|
21
|
+
# --- or ---
|
|
22
|
+
gem install jsonrpc_interface
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ruby
|
|
26
|
+
require 'jsonrpc_interface'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
- [JSONRPC::ERRORS](#jsonrpcerrors)
|
|
32
|
+
- [JSONRPC::Request](#jsonrpcrequest)
|
|
33
|
+
- [Schema](#jsonrpcrequestschema)
|
|
34
|
+
- [JSONRPC::Notification](#jsonrpcnotification)
|
|
35
|
+
- [Schema](#jsonrpcnotificationschema)
|
|
36
|
+
- [JSONRPC::Response](#jsonrpcresponse)
|
|
37
|
+
- [JSONRPC::ErrorResponse](#jsonrpcerrorresponse)
|
|
38
|
+
- [Schema](#jsonrpcerrorresponseschema)
|
|
39
|
+
- [JSONRPC::RPCObject](#jsonrpcrpcobject)
|
|
40
|
+
- [.response](#response)
|
|
41
|
+
- [.request](#request)
|
|
42
|
+
- [.notification](#notification)
|
|
43
|
+
- [.invalid_request_error](#invalid_request_error)
|
|
44
|
+
- [.parse_error](#parse_error)
|
|
45
|
+
- [.jsonrpc_specification_violation_error](#jsonrpc_specification_violation_error)
|
|
46
|
+
- [.method_not_found_error](#method_not_found_error)
|
|
47
|
+
- [.invalid_params_error](#invalid_params_error)
|
|
48
|
+
- [.internal_error](#internal_error)
|
|
49
|
+
- [.detailed_internal_error](#detailed_internal_error)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
### JSONRPC::ERRORS
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
JSONRPC::ERRORS
|
|
57
|
+
# =>
|
|
58
|
+
{
|
|
59
|
+
parse_error: { code: -32_700, message: 'Parse Error' },
|
|
60
|
+
invalid_request: { code: -32_600, message: 'Invalid Request' },
|
|
61
|
+
method_not_found: { code: -32_601, message: 'Method Not Found' },
|
|
62
|
+
invalid_params: { code: -32_602, message: 'Invalid Params' },
|
|
63
|
+
internal_error: { code: -32_603, message: 'Internal Error' },
|
|
64
|
+
unauthorized: { code: -33_001, message: 'Unauthorized' },
|
|
65
|
+
application_error: { code: -33_002, message: 'Application Error' },
|
|
66
|
+
jsonrpc_specification_violation: { code: -33_003, message: 'JSONRPC Specification Violation' }
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### JSONRPC::Request
|
|
73
|
+
|
|
74
|
+
```ruby
|
|
75
|
+
JSONRPC::Request
|
|
76
|
+
JSONRPC::Request.new(jsonrpc: '2.0', method: 'some.method', params: { some: 'params' }, id: 'sOmEiD')
|
|
77
|
+
JSONRPC::Request#jsonrpc (String)
|
|
78
|
+
JSONRPC::Request#method (String)
|
|
79
|
+
JSONRPC::Request#params (Hash)
|
|
80
|
+
JSONRPC::Request#id (String)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### JSONRPC::Request::Schema
|
|
84
|
+
|
|
85
|
+
```ruby
|
|
86
|
+
schema do
|
|
87
|
+
required(:jsonrpc).type(:string).filled
|
|
88
|
+
required(:method).type(:string).filled
|
|
89
|
+
required(:params).type(:hash).filled
|
|
90
|
+
required(:id).type(:string).filled
|
|
91
|
+
end
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### JSONRPC::Notification
|
|
97
|
+
|
|
98
|
+
```ruby
|
|
99
|
+
JSONRPC::Notification
|
|
100
|
+
JSONRPC::Notification.new(jsonrpc: '2.0', method: 'some.method', params: { some: 'params' })
|
|
101
|
+
JSONRPC::Notification#jsonrpc (String)
|
|
102
|
+
JSONRPC::Notification#method (String)
|
|
103
|
+
JSONRPC::Notification#params (Hash)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### JSONRPC::Notification::Schema
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
schema do
|
|
110
|
+
required(:jsonrpc).type(:string).filled
|
|
111
|
+
required(:method).type(:string).filled
|
|
112
|
+
required(:params).type(:hash).filled
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### JSONRPC::Response
|
|
119
|
+
|
|
120
|
+
```ruby
|
|
121
|
+
JSONRPC::Response
|
|
122
|
+
JSONRPC::Response.new(jsonrpc: '2.0', result: { some: 'result' }, id: 'sOmEiD')
|
|
123
|
+
JSONRPC::Response#jsonrpc (String)
|
|
124
|
+
JSONRPC::Response#result (Hash)
|
|
125
|
+
JSONRPC::Response#id (String)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### JSONRPC::ErrorResponse
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
JSONRPC::ErrorResponse
|
|
134
|
+
JSONRPC::ErrorResponse.new(jsonrpc: '2.0', method: 'some.method', params: { some: 'params' }, id: nil)
|
|
135
|
+
JSONRPC::ErrorResponse.new(jsonrpc: '2.0', method: 'some.method', params: { some: 'params' }, id: 'sOmEiD')
|
|
136
|
+
JSONRPC::ErrorResponse#jsonrpc (String)
|
|
137
|
+
JSONRPC::ErrorResponse#error (Hash)
|
|
138
|
+
JSONRPC::ErrorResponse#id (String, NilClass)
|
|
139
|
+
|
|
140
|
+
JSONRPC::ErrorResponse#error
|
|
141
|
+
# signature =>
|
|
142
|
+
{ code: Integer, message: String, data: Hash }
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### JSONRPC::ErrorResponse::Schema
|
|
146
|
+
|
|
147
|
+
```ruby
|
|
148
|
+
schema do
|
|
149
|
+
required(:code).type(:integer).filled
|
|
150
|
+
required(:message).type(:string).filled
|
|
151
|
+
required(:data).type(:hash).filled
|
|
152
|
+
end
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
### JSONRPC::RPCObject
|
|
158
|
+
|
|
159
|
+
- [.response](#response)
|
|
160
|
+
- [.request](#request)
|
|
161
|
+
- [.notification](#notification)
|
|
162
|
+
- [.invalid_request_error](#invalid_request_error)
|
|
163
|
+
- [.parse_error](#parse_error)
|
|
164
|
+
- [.jsonrpc_specification_violation_error](#jsonrpc_specification_violation_error)
|
|
165
|
+
- [.method_not_found_error](#method_not_found_error)
|
|
166
|
+
- [.invalid_params_error](#invalid_params_error)
|
|
167
|
+
- [.internal_error](#internal_error)
|
|
168
|
+
- [.detailed_internal_error](#detailed_internal_error)
|
|
169
|
+
|
|
170
|
+
### .response
|
|
171
|
+
|
|
172
|
+
```ruby
|
|
173
|
+
JSONRPC::RPCObject.response(
|
|
174
|
+
{ some: 'data' },
|
|
175
|
+
request_id: SecureRandom.uuid
|
|
176
|
+
) # => JSONRPC::Response
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### .request
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
```ruby
|
|
183
|
+
JSONRPC::RPCObject.request(
|
|
184
|
+
method: 'some.method',
|
|
185
|
+
params: { some: 'params' },
|
|
186
|
+
request_id: SecureRandom.uuid
|
|
187
|
+
) # => JSONRPC::Request
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### .notification
|
|
191
|
+
|
|
192
|
+
```ruby
|
|
193
|
+
JSONRPC::RPCObject.notification(
|
|
194
|
+
method: 'some.method',
|
|
195
|
+
params: { some: 'params' }
|
|
196
|
+
) # => JSONRPC::Notification
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### .invalid_request_error
|
|
200
|
+
|
|
201
|
+
```ruby
|
|
202
|
+
JSONRPC::RPCObject.invalid_request_error({ some: 'data' })
|
|
203
|
+
JSONRPC::RPCObject.invalid_request_error({ some: 'data' }, request_id: SecureRandom.uuid)
|
|
204
|
+
|
|
205
|
+
JSONRPC::ErrorResponse#error
|
|
206
|
+
# error hash signature =>
|
|
207
|
+
{ code: -32_600, message: 'Invalid Request', data: { some: 'data' } }
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### .parse_error
|
|
211
|
+
|
|
212
|
+
```ruby
|
|
213
|
+
JSONRPC::RPCObject.parse_error
|
|
214
|
+
|
|
215
|
+
JSONRPC::ErrorResponse#error
|
|
216
|
+
# error hash signature =>
|
|
217
|
+
{ code: -32_700, message: 'Parse Error', data: {} }
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### .jsonrpc_specification_violation_error
|
|
221
|
+
|
|
222
|
+
```ruby
|
|
223
|
+
JSONRPC::RPCObject.jsonrpc_specification_violation_error
|
|
224
|
+
JSONRPC::RPCObject.jsonrpc_specification_violation_error(request_id: SecureRandom.uuid)
|
|
225
|
+
|
|
226
|
+
JSONRPC::ErrorResponse#error
|
|
227
|
+
# error hash signature =>
|
|
228
|
+
{ code: -33_003, message: 'JSONRPC Specification Violation', data: {} }
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### .method_not_found_error
|
|
232
|
+
|
|
233
|
+
```ruby
|
|
234
|
+
JSONRPC::RPCObject.method_not_found_error
|
|
235
|
+
JSONRPC::RPCObject.method_not_found_error(request_id: SecureRandom.uuid)
|
|
236
|
+
|
|
237
|
+
JSONRPC::ErrorResponse#error
|
|
238
|
+
# error hash signature =>
|
|
239
|
+
{ code: -32_601, message: 'Method Not Found', data: {} }
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### .invalid_params_error
|
|
243
|
+
|
|
244
|
+
```ruby
|
|
245
|
+
JSONRPC::RPCObject.invalid_params_error
|
|
246
|
+
JSONRPC::RPCObject.invalid_params_error(request_id: SecureRandom.uuid)
|
|
247
|
+
|
|
248
|
+
JSONRPC::ErrorResponse#error
|
|
249
|
+
# error hash signature =>
|
|
250
|
+
{ code: -32_602, message: 'Invalid Params', data: {} }
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### .internal_error
|
|
254
|
+
|
|
255
|
+
```ruby
|
|
256
|
+
JSONRPC::RPCObject.internal_error('some', 'error', 'code', error_context: { some: 'context' })
|
|
257
|
+
JSONRPC::RPCObject.internal_error('some', 'error', 'code', error_context: { some: 'context' }, request_id: SecureRandom.uuid)
|
|
258
|
+
JSONRPC::RPCObject.internal_error
|
|
259
|
+
JSONRPC::RPCObject.internal_error(request_id: SecureRandom.uuid)
|
|
260
|
+
|
|
261
|
+
JSONRPC::ErrorResponse#error
|
|
262
|
+
# error hash signature =>
|
|
263
|
+
{
|
|
264
|
+
code: -32_603,
|
|
265
|
+
message: 'Internal Error',
|
|
266
|
+
data: {
|
|
267
|
+
error_codes: ['some', 'error', 'code'],
|
|
268
|
+
error_cotnext: { some: 'context' }
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### .detailed_internal_error
|
|
274
|
+
|
|
275
|
+
```ruby
|
|
276
|
+
JSONRPC::RPCObject.detailed_internal_error(exception)
|
|
277
|
+
JSONRPC::RPCObject.detailed_internal_error(exception, request_id: SecureRandom.uuid)
|
|
278
|
+
|
|
279
|
+
JSONRPC::ErrorResponse#error
|
|
280
|
+
# signature =>
|
|
281
|
+
{
|
|
282
|
+
code: -32_603,
|
|
283
|
+
message: 'Internal Error',
|
|
284
|
+
data: {
|
|
285
|
+
error_codes: [],
|
|
286
|
+
error_cotnext: {
|
|
287
|
+
error_class: # => exception.class,
|
|
288
|
+
error_message: # => exception.message,
|
|
289
|
+
error_backtrace: # => exception.backtrace,
|
|
290
|
+
error_object: # => exception
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Development
|
|
297
|
+
|
|
298
|
+
- full build (`steep` => `rubocop` => `rspec`)
|
|
299
|
+
|
|
300
|
+
```shell
|
|
301
|
+
bundle exec rake
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
- code style check (`rubocop`):
|
|
305
|
+
|
|
306
|
+
```shell
|
|
307
|
+
bundle exec rake rubocop
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
- type validation check (`steep`):
|
|
311
|
+
|
|
312
|
+
```shell
|
|
313
|
+
bundle exec rake steep
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
- tests (`rspec`):
|
|
317
|
+
|
|
318
|
+
```shell
|
|
319
|
+
bundle exec rake rspec
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## License
|
|
323
|
+
|
|
324
|
+
Released under MIT License.
|
|
325
|
+
|
|
326
|
+
## Authors
|
|
327
|
+
|
|
328
|
+
[Rustam Ibragimov](https://github.com/0exp)
|
data/Rakefile
CHANGED
|
@@ -7,6 +7,8 @@ require 'rubocop/rake_task'
|
|
|
7
7
|
require 'rubocop-performance'
|
|
8
8
|
require 'rubocop-rspec'
|
|
9
9
|
require 'rubocop-rake'
|
|
10
|
+
require 'steep'
|
|
11
|
+
require 'steep/cli'
|
|
10
12
|
|
|
11
13
|
RuboCop::RakeTask.new(:rubocop) do |t|
|
|
12
14
|
config_path = File.expand_path(File.join('.rubocop.yml'), __dir__)
|
|
@@ -18,4 +20,8 @@ end
|
|
|
18
20
|
|
|
19
21
|
RSpec::Core::RakeTask.new(:rspec)
|
|
20
22
|
|
|
21
|
-
task
|
|
23
|
+
task :steep do
|
|
24
|
+
Steep::CLI.new(argv: ['check'], stdout: STDOUT, stderr: STDERR, stdin: STDIN).run
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
task default: %w[steep rubocop rspec]
|
data/Steepfile
ADDED
data/jsonrpc_interface.gemspec
CHANGED
|
@@ -11,7 +11,10 @@ Gem::Specification.new do |spec|
|
|
|
11
11
|
spec.email = ['iamdaiver@gmail.com']
|
|
12
12
|
|
|
13
13
|
spec.summary = 'JSONRPC Interface for Ruby projects.'
|
|
14
|
-
spec.description = 'JSONRPC Interface for Ruby projects realised in object oriented way.'
|
|
14
|
+
spec.description = 'JSONRPC Interface for Ruby projects realised in object oriented way. ' \
|
|
15
|
+
'JRPC Request, JRPC Notification, JRPC Response, JRPC Error Response, ' \
|
|
16
|
+
'JRPC Object Builder and JRPC Error Codes.'
|
|
17
|
+
|
|
15
18
|
spec.homepage = 'https://github.com/0exp/jsonrpc_interface'
|
|
16
19
|
spec.license = 'MIT'
|
|
17
20
|
|
|
@@ -27,10 +30,16 @@ Gem::Specification.new do |spec|
|
|
|
27
30
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
28
31
|
spec.require_paths = ['lib']
|
|
29
32
|
|
|
33
|
+
spec.add_dependency 'smart_schema', '~> 0.11'
|
|
34
|
+
spec.add_dependency 'smart_types', '~> 0.8'
|
|
35
|
+
spec.add_dependency 'smart_value-object', '~> 0.2'
|
|
36
|
+
|
|
30
37
|
spec.add_development_dependency 'bundler', '~> 2.4'
|
|
31
38
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
32
39
|
spec.add_development_dependency 'rspec', '~> 3.12'
|
|
33
40
|
spec.add_development_dependency 'armitage-rubocop', '~> 1.51'
|
|
34
41
|
spec.add_development_dependency 'simplecov', '~> 0.22'
|
|
35
42
|
spec.add_development_dependency 'pry', '~> 0.14'
|
|
43
|
+
spec.add_development_dependency 'steep', '~> 1.4'
|
|
44
|
+
spec.add_development_dependency 'rbs', '~> 3.1'
|
|
36
45
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @api public
|
|
4
|
+
# @since 0.1.0
|
|
5
|
+
class JSONRPC::ErrorResponse < SmartCore::ValueObject
|
|
6
|
+
# @return [SmartCore::Schema]
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
# @since 0.1.0
|
|
10
|
+
ErrorSchema = Class.new(SmartCore::Schema) do
|
|
11
|
+
schema do
|
|
12
|
+
required(:code).type(:integer).filled
|
|
13
|
+
required(:message).type(:string).filled
|
|
14
|
+
required(:data).type(:hash).filled
|
|
15
|
+
end
|
|
16
|
+
end.new
|
|
17
|
+
|
|
18
|
+
# @api public
|
|
19
|
+
# @since 0.1.0
|
|
20
|
+
SmartCore::Types::Value.define_type(:JSONRPCErrorSchema) do |type|
|
|
21
|
+
type.define_checker { |value| ErrorSchema.valid?(value) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @api public
|
|
25
|
+
# @since 0.1.0
|
|
26
|
+
property :jsonrpc, SmartCore::Types::Variadic::Enum('2.0')
|
|
27
|
+
|
|
28
|
+
# @api public
|
|
29
|
+
# @since 0.1.0
|
|
30
|
+
property :error, SmartCore::Types::Value::JSONRPCErrorSchema
|
|
31
|
+
|
|
32
|
+
# @api public
|
|
33
|
+
# @since 0.1.0
|
|
34
|
+
property :id, SmartCore::Types::Value::String.nilable
|
|
35
|
+
|
|
36
|
+
# @return [Boolean]
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
# @since 0.1.0
|
|
40
|
+
def error? = true
|
|
41
|
+
|
|
42
|
+
# @return [Boolean]
|
|
43
|
+
#
|
|
44
|
+
# @api public
|
|
45
|
+
# @since 0.1.0
|
|
46
|
+
def success? = false
|
|
47
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @api public
|
|
4
|
+
# @since 0.1.0
|
|
5
|
+
class JSONRPC::Notification < SmartCore::ValueObject
|
|
6
|
+
# @return [SmartCore::Schema]
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
# @since 0.1.0
|
|
10
|
+
Schema = Class.new(SmartCore::Schema) do
|
|
11
|
+
schema do
|
|
12
|
+
required(:jsonrpc).type(:string).filled
|
|
13
|
+
required(:method).type(:string).filled
|
|
14
|
+
required(:params).type(:hash).filled
|
|
15
|
+
end
|
|
16
|
+
end.new
|
|
17
|
+
|
|
18
|
+
# @api public
|
|
19
|
+
# @since 0.1.0
|
|
20
|
+
property :jsonrpc, SmartCore::Types::Variadic::Enum('2.0')
|
|
21
|
+
|
|
22
|
+
# @api public
|
|
23
|
+
# @since 0.1.0
|
|
24
|
+
property :method, SmartCore::Types::Value::String
|
|
25
|
+
|
|
26
|
+
# @api public
|
|
27
|
+
# @since 0.1.0
|
|
28
|
+
property :params, SmartCore::Types::Value::Hash
|
|
29
|
+
|
|
30
|
+
# @return [Boolean]
|
|
31
|
+
#
|
|
32
|
+
# @api public
|
|
33
|
+
# @since 0.1.0
|
|
34
|
+
def notification? = true
|
|
35
|
+
|
|
36
|
+
# @return [Boolean]
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
# @since 0.1.0
|
|
40
|
+
def request? = false
|
|
41
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @api public
|
|
4
|
+
# @since 0.1.0
|
|
5
|
+
class JSONRPC::Request < SmartCore::ValueObject
|
|
6
|
+
# @return [SmartCore::Schema]
|
|
7
|
+
#
|
|
8
|
+
# @api public
|
|
9
|
+
# @since 0.1.0
|
|
10
|
+
Schema = Class.new(SmartCore::Schema) do
|
|
11
|
+
schema do
|
|
12
|
+
required(:jsonrpc).type(:string).filled
|
|
13
|
+
required(:method).type(:string).filled
|
|
14
|
+
required(:params).type(:hash).filled
|
|
15
|
+
required(:id).type(:string).filled
|
|
16
|
+
end
|
|
17
|
+
end.new
|
|
18
|
+
|
|
19
|
+
# @api public
|
|
20
|
+
# @since 0.1.0
|
|
21
|
+
property :jsonrpc, SmartCore::Types::Variadic::Enum('2.0')
|
|
22
|
+
|
|
23
|
+
# @api public
|
|
24
|
+
# @since 0.1.0
|
|
25
|
+
property :method, SmartCore::Types::Value::String
|
|
26
|
+
|
|
27
|
+
# @api public
|
|
28
|
+
# @since 0.1.0
|
|
29
|
+
property :params, SmartCore::Types::Value::Hash
|
|
30
|
+
|
|
31
|
+
# @api public
|
|
32
|
+
# @since 0.1.0
|
|
33
|
+
property :id, SmartCore::Types::Value::String
|
|
34
|
+
|
|
35
|
+
# @return [Boolean]
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
# @since 0.1.0
|
|
39
|
+
def notification? = false
|
|
40
|
+
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
#
|
|
43
|
+
# @api public
|
|
44
|
+
# @since 0.1.0
|
|
45
|
+
def request? = true
|
|
46
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @api public
|
|
4
|
+
# @since 0.1.0
|
|
5
|
+
class JSONRPC::Response < SmartCore::ValueObject
|
|
6
|
+
# @api public
|
|
7
|
+
# @since 0.1.0
|
|
8
|
+
property :jsonrpc, SmartCore::Types::Variadic::Enum('2.0')
|
|
9
|
+
|
|
10
|
+
# @api public
|
|
11
|
+
# @since 0.1.0
|
|
12
|
+
property :result, SmartCore::Types::Value::Hash
|
|
13
|
+
|
|
14
|
+
# @api public
|
|
15
|
+
# @since 0.1.0
|
|
16
|
+
property :id, SmartCore::Types::Value::String
|
|
17
|
+
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
# @since 0.1.0
|
|
22
|
+
def error? = false
|
|
23
|
+
|
|
24
|
+
# @return [Boolean]
|
|
25
|
+
#
|
|
26
|
+
# @api public
|
|
27
|
+
# @since 0.1.0
|
|
28
|
+
def success? = true
|
|
29
|
+
end
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# @api public
|
|
4
|
+
# @since 0.1.0
|
|
5
|
+
module JSONRPC::RPCObject
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
# @param result [Hash<String|Symbol,Any>]
|
|
9
|
+
# @option request_id [String, NilClass]
|
|
10
|
+
# @return [JSONRPC::Response, NilClass]
|
|
11
|
+
#
|
|
12
|
+
# @api public
|
|
13
|
+
# @since 0.1.0
|
|
14
|
+
def response(result = {}, request_id: nil)
|
|
15
|
+
return if request_id == nil # NOTE: nil is treated as no result
|
|
16
|
+
|
|
17
|
+
# @type var request_id: untyped
|
|
18
|
+
JSONRPC::Response.new(jsonrpc: '2.0', result:, id: request_id)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @param data [Hash<String|Symbol,Any>]
|
|
22
|
+
# @option code [Integer]
|
|
23
|
+
# @option message [String]
|
|
24
|
+
# @option request_id [String, NilClass]
|
|
25
|
+
# @return [JSONRPC::ErrorResponse]
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
# @since 0.1.0
|
|
29
|
+
def error(
|
|
30
|
+
data = {},
|
|
31
|
+
code: JSONRPC::ERRORS[:application_error][:code],
|
|
32
|
+
message: JSONRPC::ERRORS[:application_error][:message],
|
|
33
|
+
request_id: nil
|
|
34
|
+
)
|
|
35
|
+
JSONRPC::ErrorResponse.new(
|
|
36
|
+
jsonrpc: '2.0',
|
|
37
|
+
error: { code:, message:, data: },
|
|
38
|
+
id: request_id
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
class << self; alias_method :application_error, :error; end
|
|
42
|
+
|
|
43
|
+
# @option jsonrpc [String]
|
|
44
|
+
# @option method [String]
|
|
45
|
+
# @option params [Hash<String|Symbol,Any>]
|
|
46
|
+
# @option id [String]
|
|
47
|
+
# @return [JSONRPC::Request]
|
|
48
|
+
#
|
|
49
|
+
# @api public
|
|
50
|
+
# @since 0.1.0
|
|
51
|
+
def request(jsonrpc: '2.0', method:, params:, id:)
|
|
52
|
+
JSONRPC::Request.new(jsonrpc:, method:, params:, id:)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @option jsonrpc [String]
|
|
56
|
+
# @option method [String]
|
|
57
|
+
# @option params [Hash<Symbol,Any>]
|
|
58
|
+
# @return [JSONRPC::Notification]
|
|
59
|
+
#
|
|
60
|
+
# @api public
|
|
61
|
+
# @since 0.1.0
|
|
62
|
+
def notification(jsonrpc: '2.0', method:, params:)
|
|
63
|
+
JSONRPC::Notification.new(jsonrpc:, method:, params:)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @param data [Hash]
|
|
67
|
+
# @option request_id [String, NilClass]
|
|
68
|
+
# @return [JSONRPC::ErrorResponse]
|
|
69
|
+
#
|
|
70
|
+
# @api public
|
|
71
|
+
# @since 0.1.0
|
|
72
|
+
def invalid_request_error(data = {}, request_id: nil)
|
|
73
|
+
error(
|
|
74
|
+
data,
|
|
75
|
+
code: JSONRPC::ERRORS[:invalid_request][:code],
|
|
76
|
+
message: JSONRPC::ERRORS[:invalid_request][:message],
|
|
77
|
+
request_id:
|
|
78
|
+
)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @return [JSONRPC::ErrorResponse]
|
|
82
|
+
#
|
|
83
|
+
# @api public
|
|
84
|
+
# @since 0.1.0
|
|
85
|
+
def parse_error
|
|
86
|
+
error(
|
|
87
|
+
code: JSONRPC::ERRORS[:parse_error][:code],
|
|
88
|
+
message: JSONRPC::ERRORS[:parse_error][:message]
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @option request_id [String, NilClass]
|
|
93
|
+
# @return [JSONRPC::ErrorResponse]
|
|
94
|
+
#
|
|
95
|
+
# @api public
|
|
96
|
+
# @since 0.1.0
|
|
97
|
+
def jsonrpc_specification_violation_error(request_id: nil)
|
|
98
|
+
error(
|
|
99
|
+
code: JSONRPC::ERRORS[:jsonrpc_specification_violation][:code],
|
|
100
|
+
message: JSONRPC::ERRORS[:jsonrpc_specification_violation][:message],
|
|
101
|
+
request_id:
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# @option request_id [String, NilClass]
|
|
106
|
+
# @return [JSONRPC::ErrorResponse]
|
|
107
|
+
#
|
|
108
|
+
# @api public
|
|
109
|
+
# @since 0.1.0
|
|
110
|
+
def method_not_found_error(request_id: nil)
|
|
111
|
+
error(
|
|
112
|
+
code: JSONRPC::ERRORS[:method_not_found][:code],
|
|
113
|
+
message: JSONRPC::ERRORS[:method_not_found][:message],
|
|
114
|
+
request_id:
|
|
115
|
+
)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# @param data [Hash<String|Symbol,Any>]
|
|
119
|
+
# @option request_id [String, NilClass]
|
|
120
|
+
# @return [JSONRPC::ErrorResponse]
|
|
121
|
+
#
|
|
122
|
+
# @api public
|
|
123
|
+
# @since 0.1.0
|
|
124
|
+
def invalid_params_error(data = {}, request_id: nil)
|
|
125
|
+
error(
|
|
126
|
+
data,
|
|
127
|
+
code: JSONRPC::ERRORS[:invalid_params][:code],
|
|
128
|
+
message: JSONRPC::ERRORS[:invalid_params][:message],
|
|
129
|
+
request_id:
|
|
130
|
+
)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# @param error_codes [*Array<String,Symbol>]
|
|
134
|
+
# @option error_context [Hash<String|Symbol,Any>]
|
|
135
|
+
# @option request_id [String, NilClass]
|
|
136
|
+
# @return [JSONRPC::ErrorResponse]
|
|
137
|
+
#
|
|
138
|
+
# @api public
|
|
139
|
+
# @since 0.1.0
|
|
140
|
+
def internal_error(*error_codes, error_context: {}, request_id: nil)
|
|
141
|
+
error(
|
|
142
|
+
{ error_codes:, error_context: },
|
|
143
|
+
code: JSONRPC::ERRORS[:internal_error][:code],
|
|
144
|
+
message: JSONRPC::ERRORS[:internal_error][:message],
|
|
145
|
+
request_id:
|
|
146
|
+
)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# @param exception [Exception]
|
|
150
|
+
# @option request_id [String, NilClass]
|
|
151
|
+
# @return [JSONRPC::ErrorResponse]
|
|
152
|
+
#
|
|
153
|
+
# @api public
|
|
154
|
+
# @since 0.1.0
|
|
155
|
+
def detailed_internal_error(exception, request_id: nil)
|
|
156
|
+
internal_error(
|
|
157
|
+
error_context: {
|
|
158
|
+
error_class: exception.class,
|
|
159
|
+
error_message: exception.message,
|
|
160
|
+
error_backtrace: exception.backtrace,
|
|
161
|
+
error_object: exception
|
|
162
|
+
},
|
|
163
|
+
request_id:
|
|
164
|
+
)
|
|
165
|
+
end
|
|
166
|
+
end
|
data/lib/jsonrpc/version.rb
CHANGED
data/lib/jsonrpc.rb
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'smart_core/types'
|
|
4
|
+
require 'smart_core/schema'
|
|
5
|
+
require 'smart_core/value-object'
|
|
6
|
+
|
|
7
|
+
# @api public
|
|
8
|
+
# @since 0.1.0
|
|
3
9
|
module JSONRPC
|
|
4
10
|
require_relative 'jsonrpc/version'
|
|
11
|
+
require_relative 'jsonrpc/request'
|
|
12
|
+
require_relative 'jsonrpc/notification'
|
|
13
|
+
require_relative 'jsonrpc/response'
|
|
14
|
+
require_relative 'jsonrpc/error_response'
|
|
15
|
+
require_relative 'jsonrpc/rpc_object'
|
|
16
|
+
|
|
17
|
+
# @return [Hash<Symbol,Hash<Symbol,String|Integer>>]
|
|
18
|
+
#
|
|
19
|
+
# @api public
|
|
20
|
+
# @since 0.1.0
|
|
21
|
+
ERRORS = {
|
|
22
|
+
parse_error: {
|
|
23
|
+
code: -32_700,
|
|
24
|
+
message: 'Parse Error'
|
|
25
|
+
},
|
|
26
|
+
invalid_request: {
|
|
27
|
+
code: -32_600,
|
|
28
|
+
message: 'Invalid Request'
|
|
29
|
+
},
|
|
30
|
+
method_not_found: {
|
|
31
|
+
code: -32_601,
|
|
32
|
+
message: 'Method Not Found'
|
|
33
|
+
},
|
|
34
|
+
invalid_params: {
|
|
35
|
+
code: -32_602,
|
|
36
|
+
message: 'Invalid Params'
|
|
37
|
+
},
|
|
38
|
+
internal_error: {
|
|
39
|
+
code: -32_603,
|
|
40
|
+
message: 'Internal Error'
|
|
41
|
+
},
|
|
42
|
+
unauthorized: {
|
|
43
|
+
code: -33_001,
|
|
44
|
+
message: 'Unauthorized'
|
|
45
|
+
},
|
|
46
|
+
application_error: {
|
|
47
|
+
code: -33_002,
|
|
48
|
+
message: 'Application Error'
|
|
49
|
+
},
|
|
50
|
+
jsonrpc_specification_violation: {
|
|
51
|
+
code: -33_003,
|
|
52
|
+
message: 'JSONRPC Specification Violation'
|
|
53
|
+
}
|
|
54
|
+
}.freeze
|
|
5
55
|
end
|
data/sig/jsonrpc_interface.rbs
CHANGED
|
@@ -1,3 +1,139 @@
|
|
|
1
|
-
module
|
|
1
|
+
module JSONRPC
|
|
2
2
|
VERSION: String
|
|
3
|
+
|
|
4
|
+
# TODO:
|
|
5
|
+
# - try to return the record sub-hash value:
|
|
6
|
+
# -> before: Hash[Symbol, Hash[Symbol,untyped]]
|
|
7
|
+
# -> after (does not work): Hash[Symbol, { code: Integer, message: String }]
|
|
8
|
+
ERRORS: Hash[Symbol, Hash[Symbol,untyped]]
|
|
9
|
+
|
|
10
|
+
interface _RPCRequest
|
|
11
|
+
def notification?: () -> bool
|
|
12
|
+
def request?: () -> bool
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
interface _RPCResponse
|
|
16
|
+
def error?: () -> bool
|
|
17
|
+
def success?: () -> bool
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Request
|
|
21
|
+
include _RPCRequest
|
|
22
|
+
|
|
23
|
+
attr_reader jsonrpc: String
|
|
24
|
+
attr_reader method: String
|
|
25
|
+
attr_reader params: Hash[String|Symbol,untyped]
|
|
26
|
+
attr_reader id: String|nil
|
|
27
|
+
|
|
28
|
+
def initialize: (
|
|
29
|
+
jsonrpc: String,
|
|
30
|
+
method: String,
|
|
31
|
+
params: Hash[String|Symbol,untyped],
|
|
32
|
+
id: String
|
|
33
|
+
) -> void
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Notification
|
|
37
|
+
include _RPCRequest
|
|
38
|
+
|
|
39
|
+
attr_reader jsonrpc: String
|
|
40
|
+
attr_reader method: String
|
|
41
|
+
attr_reader params: Hash[String|Symbol,untyped]
|
|
42
|
+
|
|
43
|
+
def initialize: (
|
|
44
|
+
jsonrpc: String,
|
|
45
|
+
method: String,
|
|
46
|
+
params: Hash[String|Symbol,untyped]
|
|
47
|
+
) -> void
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class Response
|
|
51
|
+
include _RPCResponse
|
|
52
|
+
|
|
53
|
+
attr_reader jsonrpc: String
|
|
54
|
+
attr_reader result: Hash[String|Symbol,untyped]
|
|
55
|
+
attr_reader id: String|nil
|
|
56
|
+
|
|
57
|
+
def initialize: (
|
|
58
|
+
jsonrpc: String,
|
|
59
|
+
result: Hash[String|Symbol,untyped],
|
|
60
|
+
id: String
|
|
61
|
+
) -> void
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class ErrorResponse
|
|
65
|
+
include _RPCResponse
|
|
66
|
+
|
|
67
|
+
attr_reader jsonrpc: String
|
|
68
|
+
attr_reader error: { code: Integer, message: String, data: Hash[String|Symbol,untyped] }
|
|
69
|
+
attr_reader id: String|nil
|
|
70
|
+
|
|
71
|
+
def initialize: (
|
|
72
|
+
jsonrpc: String,
|
|
73
|
+
error: {
|
|
74
|
+
code: Integer,
|
|
75
|
+
message: String,
|
|
76
|
+
data: Hash[String|Symbol,untyped]
|
|
77
|
+
},
|
|
78
|
+
id: String|nil
|
|
79
|
+
) -> void
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
module RPCObject
|
|
83
|
+
def self?.response: (
|
|
84
|
+
?Hash[String|Symbol,untyped],
|
|
85
|
+
?request_id: String|nil
|
|
86
|
+
) -> (Response|nil)
|
|
87
|
+
|
|
88
|
+
def self?.error: (
|
|
89
|
+
?Hash[String|Symbol,untyped],
|
|
90
|
+
?code: Integer,
|
|
91
|
+
?message: String,
|
|
92
|
+
?request_id: String|nil,
|
|
93
|
+
) -> ErrorResponse
|
|
94
|
+
|
|
95
|
+
def self?.request: (
|
|
96
|
+
?jsonrpc: String,
|
|
97
|
+
method: String,
|
|
98
|
+
params: Hash[String|Symbol,untyped],
|
|
99
|
+
id: String
|
|
100
|
+
) -> Request
|
|
101
|
+
|
|
102
|
+
def self?.notification: (
|
|
103
|
+
?jsonrpc: String,
|
|
104
|
+
method: String,
|
|
105
|
+
params: Hash[String|Symbol,untyped]
|
|
106
|
+
) -> Notification
|
|
107
|
+
|
|
108
|
+
def self?.invalid_request_error: (
|
|
109
|
+
?Hash[String|Symbol,untyped],
|
|
110
|
+
?request_id: String|nil
|
|
111
|
+
) -> ErrorResponse
|
|
112
|
+
|
|
113
|
+
def self?.parse_error: () -> ErrorResponse
|
|
114
|
+
|
|
115
|
+
def self?.jsonrpc_specification_violation_error: (
|
|
116
|
+
?request_id: String|nil
|
|
117
|
+
) -> ErrorResponse
|
|
118
|
+
|
|
119
|
+
def self?.method_not_found_error: (
|
|
120
|
+
?request_id: String|nil
|
|
121
|
+
) -> ErrorResponse
|
|
122
|
+
|
|
123
|
+
def self?.invalid_params_error: (
|
|
124
|
+
?Hash[String|Symbol,untyped],
|
|
125
|
+
?request_id: String|nil
|
|
126
|
+
) -> ErrorResponse
|
|
127
|
+
|
|
128
|
+
def self?.internal_error: (
|
|
129
|
+
*String|Symbol,
|
|
130
|
+
?error_context: Hash[String|Symbol,untyped],
|
|
131
|
+
?request_id: String|nil
|
|
132
|
+
) -> ErrorResponse
|
|
133
|
+
|
|
134
|
+
def self?.detailed_internal_error: (
|
|
135
|
+
Exception,
|
|
136
|
+
?request_id: String|nil
|
|
137
|
+
) -> ErrorResponse
|
|
138
|
+
end
|
|
3
139
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jsonrpc_interface
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rustam Ibragimov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-06-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: smart_schema
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.11'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.11'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: smart_types
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.8'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.8'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: smart_value-object
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0.2'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0.2'
|
|
13
55
|
- !ruby/object:Gem::Dependency
|
|
14
56
|
name: bundler
|
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -94,7 +136,37 @@ dependencies:
|
|
|
94
136
|
- - "~>"
|
|
95
137
|
- !ruby/object:Gem::Version
|
|
96
138
|
version: '0.14'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: steep
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '1.4'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '1.4'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: rbs
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '3.1'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '3.1'
|
|
97
167
|
description: JSONRPC Interface for Ruby projects realised in object oriented way.
|
|
168
|
+
JRPC Request, JRPC Notification, JRPC Response, JRPC Error Response, JRPC Object
|
|
169
|
+
Builder and JRPC Error Codes.
|
|
98
170
|
email:
|
|
99
171
|
- iamdaiver@gmail.com
|
|
100
172
|
executables: []
|
|
@@ -111,10 +183,16 @@ files:
|
|
|
111
183
|
- LICENSE.txt
|
|
112
184
|
- README.md
|
|
113
185
|
- Rakefile
|
|
186
|
+
- Steepfile
|
|
114
187
|
- bin/console
|
|
115
188
|
- bin/setup
|
|
116
189
|
- jsonrpc_interface.gemspec
|
|
117
190
|
- lib/jsonrpc.rb
|
|
191
|
+
- lib/jsonrpc/error_response.rb
|
|
192
|
+
- lib/jsonrpc/notification.rb
|
|
193
|
+
- lib/jsonrpc/request.rb
|
|
194
|
+
- lib/jsonrpc/response.rb
|
|
195
|
+
- lib/jsonrpc/rpc_object.rb
|
|
118
196
|
- lib/jsonrpc/version.rb
|
|
119
197
|
- lib/jsonrpc_interface.rb
|
|
120
198
|
- sig/jsonrpc_interface.rbs
|