Module: Clamo::JSONRPC
- Defined in:
- lib/clamo/jsonrpc.rb
Defined Under Namespace
Modules: ProtocolErrors
Constant Summary collapse
- PROTOCOL_VERSION_PRAGMA =
{ jsonrpc: "2.0" }.freeze
Class Method Summary collapse
- .build_error_response(**opts) ⇒ Object
- .build_error_response_from(**opts) ⇒ Object
- .build_error_response_parse_error(**opts) ⇒ Object
- .build_request(**opts) ⇒ Object
- .build_result_response(id:, result:) ⇒ Object
- .proper_id_if_any?(request) ⇒ Boolean
- .proper_method?(request) ⇒ Boolean
- .proper_params_if_any?(request) ⇒ Boolean
- .proper_pragma?(request) ⇒ Boolean
- .valid_params?(request) ⇒ Boolean
- .valid_request?(request) ⇒ Boolean
Class Method Details
.build_error_response(**opts) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/clamo/jsonrpc.rb', line 72 def build_error_response **opts # raise if no error code present # raise if no error message present { jsonrpc: "2.0", id: opts[:id], error: { code: opts.dig(:error, :code), message: opts.dig(:error, :message), data: opts.dig(:error, :data) }.reject { |k, _| k == :data && !opts[:error].key?(:data) } } end |
.build_error_response_from(**opts) ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/clamo/jsonrpc.rb', line 84 def build_error_response_from **opts # raise unless opts[:descriptor] opts.merge( { error: { code: opts[:descriptor].code, message: opts[:descriptor]. } } ) .then { |hash| build_error_response(**hash) } end |
.build_error_response_parse_error(**opts) ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'lib/clamo/jsonrpc.rb', line 94 def build_error_response_parse_error **opts opts.merge( { error: { code: ProtocolErrors::PARSE_ERROR.code, message: ProtocolErrors::PARSE_ERROR. } } ) .then { |hash| build_error_response(**hash) } end |
.build_request(**opts) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/clamo/jsonrpc.rb', line 57 def build_request **opts # raise if no method present # raise if params present, but not an array { jsonrpc: "2.0", method: opts[:method] } .merge({ params: opts[:params] }) .merge(opts.key?(:id) ? { id: opts[:id] } : {}) end |
.build_result_response(id:, result:) ⇒ Object
66 67 68 69 70 |
# File 'lib/clamo/jsonrpc.rb', line 66 def build_result_response(id:, result:) {}.merge(PROTOCOL_VERSION_PRAGMA) .merge({ result: result }) .merge({ id: id }) end |
.proper_id_if_any?(request) ⇒ Boolean
28 29 30 31 32 33 34 35 36 |
# File 'lib/clamo/jsonrpc.rb', line 28 def proper_id_if_any?(request) if request.key?("id") request["id"].is_a?(String) || request["id"].is_a?(Integer) || request["id"].is_a?(NilClass) else true end end |
.proper_method?(request) ⇒ Boolean
24 25 26 |
# File 'lib/clamo/jsonrpc.rb', line 24 def proper_method?(request) request["method"].is_a?(String) end |
.proper_params_if_any?(request) ⇒ Boolean
38 39 40 41 42 43 44 |
# File 'lib/clamo/jsonrpc.rb', line 38 def proper_params_if_any?(request) if request.key?("params") request["params"].is_a?(Array) || request["params"].is_a?(Hash) else true end end |
.proper_pragma?(request) ⇒ Boolean
20 21 22 |
# File 'lib/clamo/jsonrpc.rb', line 20 def proper_pragma?(request) request["jsonrpc"] == "2.0" end |
.valid_params?(request) ⇒ Boolean
53 54 55 |
# File 'lib/clamo/jsonrpc.rb', line 53 def valid_params?(request) proper_params_if_any?(request) end |
.valid_request?(request) ⇒ Boolean
46 47 48 49 50 51 |
# File 'lib/clamo/jsonrpc.rb', line 46 def valid_request?(request) request.is_a?(Hash) && proper_pragma?(request) && proper_method?(request) && proper_id_if_any?(request) end |