Class: Nanook::Rpc
- Inherits:
-
Object
- Object
- Nanook::Rpc
- Defined in:
- lib/nanook/rpc.rb
Overview
The Nanook::Rpc
class is responsible for maintaining the
connection to the RPC server, calling the RPC and parsing its response into
Ruby primitives.
Internally, the Nanook class creates an instance of this class, and it's generally more convenient to interact with the RPC through an instance of #rpc instead of by instantiating this class directly:
nanook = Nanook.new
nanook.rpc(:accounts_create, wallet: wallet_id, count: 2)
Constant Summary
- DEFAULT_URI =
Default RPC server and port to connect to
"http://localhost:7076"
- DEFAULT_TIMEOUT =
Default request timeout in seconds
60
Instance Method Summary collapse
-
#call(action, params = {}) ⇒ Hash
Calls the RPC server and returns the response.
-
#initialize(uri = DEFAULT_URI, timeout: DEFAULT_TIMEOUT) ⇒ Rpc
constructor
A new instance of Rpc.
- #inspect ⇒ String
Constructor Details
#initialize(uri = DEFAULT_URI, timeout: DEFAULT_TIMEOUT) ⇒ Rpc
Returns a new instance of Rpc
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/nanook/rpc.rb', line 23 def initialize(uri=DEFAULT_URI, timeout:DEFAULT_TIMEOUT) @rpc_server = URI(uri) unless ['http', 'https'].include?(@rpc_server.scheme) raise ArgumentError.new("URI must have http or https in it. Was given: #{uri}") end @http = Net::HTTP.new(@rpc_server.host, @rpc_server.port) @http.read_timeout = timeout @request = Net::HTTP::Post.new(@rpc_server.request_uri, {"user-agent" => "Ruby nanook gem"}) @request.content_type = "application/json" end |
Instance Method Details
#call(action, params = {}) ⇒ Hash
Calls the RPC server and returns the response.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/nanook/rpc.rb', line 42 def call(action, params={}) # Stringify param values params = Hash[params.map {|k, v| [k, v.to_s] }] @request.body = { action: action }.merge(params).to_json response = @http.request(@request) if response.is_a?(Net::HTTPSuccess) hash = JSON.parse(response.body) process_hash(hash) else raise Nanook::Error.new("Encountered net/http error #{response.code}: #{response.class.name}") end end |
#inspect ⇒ String
59 60 61 |
# File 'lib/nanook/rpc.rb', line 59 def inspect "#{self.class.name}(host: \"#{@rpc_server}\", timeout: #{@http.read_timeout} object_id: \"#{"0x00%x" % (object_id << 1)}\")" end |