Class: Evolis::PremiumSdk::RpcClient
- Inherits:
-
Object
- Object
- Evolis::PremiumSdk::RpcClient
- Defined in:
- lib/evolis/premium_sdk/rpc_client.rb
Constant Summary collapse
- JSON_RPC_VERSION =
JSON-RPC version number
'2.0'
Instance Attribute Summary collapse
-
#request ⇒ Hash
readonly
The last request made to the API.
-
#response ⇒ Hash
readonly
The last response from API.
Class Method Summary collapse
-
.make_id ⇒ String
Randomly generated number between 10 and 12 digits.
Instance Method Summary collapse
-
#call(method, args) ⇒ Hash, ...
Make call to API and process response.
-
#initialize(host, port) ⇒ RpcClient
constructor
Initializes the class and sets API host and port.
-
#process_single_response(data) ⇒ Hash, ...
Process and validate response from API.
-
#send_single_request(method, args) ⇒ Hash
The method that does the actual sending of data to API.
-
#valid_response?(data) ⇒ true, false
Validates tje response from API.
Constructor Details
#initialize(host, port) ⇒ RpcClient
Initializes the class and sets API host and port
26 27 28 29 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 26 def initialize(host, port) @host = host @port = port end |
Instance Attribute Details
#request ⇒ Hash (readonly)
Returns the last request made to the API.
12 13 14 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 12 def request @request end |
#response ⇒ Hash (readonly)
Returns the last response from API.
15 16 17 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 15 def response @response end |
Class Method Details
.make_id ⇒ String
Returns randomly generated number between 10 and 12 digits.
18 19 20 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 18 def self.make_id String rand(10**12) end |
Instance Method Details
#call(method, args) ⇒ Hash, ...
Make call to API and process response
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 37 def call(method, args) resp = send_single_request(method.to_s, args) begin data = MultiJson.decode(resp) rescue raise Error::InvalidJSON.new(resp) end return process_single_response(data) rescue Exception, StandardError => e e.extend(Error) unless e.is_a?(Error) raise e end |
#process_single_response(data) ⇒ Hash, ...
Process and validate response from API
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 87 def process_single_response(data) raise Error::InvalidResponse.new unless valid_response?(data) if !!data['error'] code = data['error']['code'] msg = data['error']['message'] raise Error::ServerError.new(code, msg) end return data['result'] end |
#send_single_request(method, args) ⇒ Hash
The method that does the actual sending of data to API
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 59 def send_single_request(method, args) @request = MultiJson.encode({ jsonrpc: JSON_RPC_VERSION, method: method, params: args, id: self.class.make_id }) begin socket = TCPSocket.open(@host, @port) socket.write(@request) socket.close_write resp = socket.read ensure socket.close if socket end raise Error::InvalidResponse.new if resp.nil? || resp.empty? return @response = resp end |
#valid_response?(data) ⇒ true, false
Validates tje response from API
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/evolis/premium_sdk/rpc_client.rb', line 103 def valid_response?(data) return false unless data.is_a?(Hash) return false if data['jsonrpc'] != JSON_RPC_VERSION return false unless data.has_key?('id') return false if data.has_key?('error') && data.has_key?('result') if data.has_key?('error') if !data['error'].is_a?(Hash) || !data['error'].has_key?('code') || !data['error'].has_key?('message') return false end if !data['error']['code'].is_a?(Fixnum) || !data['error']['message'].is_a?(String) return false end end return true rescue return false end |