jsonrpc-rails 0.5.2 → 0.5.3

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: 017eda83610eb76324999392d1f824fbc274f5182a3a1412ac3aaef19e9beaa8
4
- data.tar.gz: 22f7ee6229d94a2f1dce2f03c7205d6c855b37b359a31b3ff6402e6c2fb40e4f
3
+ metadata.gz: 16369528b9adcf6bc2b66b42365e475be375d330312694626d8244f2205e9df3
4
+ data.tar.gz: 4eeda34cff81e732d5aac37d684c81eba9c7a66de1729a7f1f2c1c8097de21fb
5
5
  SHA512:
6
- metadata.gz: dac03145eeddd7906005c9ad1770b745b6f6e8a4fd5185b7146b9adc9787cc21fa18697922063ba94e2ae5b3ab64839da27f4fa88fdfbe47c6cd88cb86b93b8e
7
- data.tar.gz: 298e2f0955364e3175332f0288cffea4646afc410f73393c97573d1f3054fac105563af655a78a768e6ca3f69a920454dd6c3e7a859232df30fe93b9827e4fbc
6
+ metadata.gz: ebefd2f90219d0dd655a9e7fc21023aa38b26de412e52102bdb6d2014a75f1975c284a417d2f353989e09360c34b56c07e42af89643e99bb3fe990db886a1039
7
+ data.tar.gz: 2c447976bc3b1dc7a8e9c2ffc695278bd7ec0e44bbad864f5810c16adefb901ec1212145a8d56865e4f7a59eba36b760db71e69addac2b70422f2b8276b53a7f
@@ -35,7 +35,10 @@ module JSONRPC_Rails
35
35
 
36
36
  raw_payload = parse_json(body)
37
37
 
38
- return jsonrpc_error_response(:invalid_request) unless raw_payload.is_a?(Hash) || raw_payload.is_a?(Array)
38
+ unless raw_payload.is_a?(Hash) || raw_payload.is_a?(Array)
39
+ id = extract_id_from_raw_payload(raw_payload)
40
+ return jsonrpc_error_response(:invalid_request, id: id)
41
+ end
39
42
 
40
43
  validity, = if raw_payload.is_a?(Array)
41
44
  validate_batch(raw_payload)
@@ -89,9 +92,10 @@ module JSONRPC_Rails
89
92
 
90
93
  def validate_single(obj)
91
94
  if validate_single_structure(obj)
92
- [ :valid, nil ]
95
+ [ :valid, obj["id"] ]
93
96
  else
94
- [ jsonrpc_error_response(:invalid_request), nil ]
97
+ id = obj.is_a?(Hash) ? obj["id"] : nil
98
+ [ jsonrpc_error_response(:invalid_request, id: id), id ]
95
99
  end
96
100
  end
97
101
 
@@ -119,13 +123,22 @@ module JSONRPC_Rails
119
123
 
120
124
  # @param error_sym [Symbol]
121
125
  # @param status [Integer]
126
+ # @param id [String, Integer, nil]
122
127
  # @return [Array] Rack triplet
123
- def jsonrpc_error_response(error_sym, status: 400)
128
+ def jsonrpc_error_response(error_sym, status: 400, id: nil)
124
129
  error_obj = JSON_RPC::JsonRpcError.build(error_sym)
125
- payload = JSON_RPC::Response.new(id: nil, error: error_obj).to_json
130
+ payload = JSON_RPC::Response.new(id: id, error: error_obj).to_json
126
131
 
127
132
  [ status, { "Content-Type" => CONTENT_TYPE }, [ payload ] ]
128
133
  end
134
+
135
+ # Extract ID from raw payload if possible
136
+ def extract_id_from_raw_payload(raw)
137
+ return nil unless raw.is_a?(Hash)
138
+ raw["id"]
139
+ rescue
140
+ nil
141
+ end
129
142
  end
130
143
  end
131
144
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSONRPC_Rails
4
- VERSION = "0.5.2"
4
+ VERSION = "0.5.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonrpc-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih