class RJR::Messages::Request

Message sent from client to server to invoke a JSON-RPC method

Attributes

headers[RW]

Optional headers to add to json outside of standard json-rpc request

jr_args[RW]

Arguments source is passing to destination method

jr_method[RW]

Method source is invoking on the destination

message[RW]

Message string received from the source

msg_id[RW]

ID of the message in accordance w/ json-rpc specification

Public Class Methods

is_request_message?(message) click to toggle source

Class helper to determine if the specified message is a valid json-rpc method request message.

@param [Message] message to check @return [true,false] indicating if message is request message

# File lib/rjr/messages/request.rb, line 75
def self.is_request_message?(message)
   message.has?('method') && message.has?('id')
end
new(args = {}) click to toggle source

RJR Request Message initializer

@param [Hash] args options to set on request @option args [String] :message json string received from sender @option args [Hash] :headers optional headers to set in request

and subsequent messages

@option args [String] :method method to invoke on server @option args [Array<Object>] :args to pass to server method, all

must be convertable to/from json
# File lib/rjr/messages/request.rb, line 38
def initialize(args = {})
  parse_args(args)
end

Public Instance Methods

to_json(*a) click to toggle source

Convert request message to json

# File lib/rjr/messages/request.rb, line 80
def to_json(*a)
  {'jsonrpc' => '2.0',
   'id'      => @msg_id,
   'method'  => @jr_method,
   'params'  => @jr_args}.merge(@headers).to_json(*a)
end
to_s() click to toggle source

Convert request to string format

# File lib/rjr/messages/request.rb, line 88
def to_s
  to_json.to_s
end

Private Instance Methods

parse_args(args) click to toggle source
# File lib/rjr/messages/request.rb, line 44
def parse_args(args)
  @jr_method = args[:method]
  @jr_args   = args[:args]    || []
  @headers   = args[:headers] || {}
  @msg_id    = args[:id]      || gen_uuid

  parse_message(args[:message]) if args.has_key?(:message)
end
parse_headers(message) click to toggle source
# File lib/rjr/messages/request.rb, line 62
def parse_headers(message)
  message.keys.select { |k|
    !['jsonrpc', 'id', 'method', 'params'].include?(k)
  }.each { |k| @headers[k] = message[k] }
end
parse_message(message) click to toggle source
# File lib/rjr/messages/request.rb, line 53
def parse_message(message)
  @message      = message
  @jr_method    = message['method']
  @jr_args      = message['params']
  @msg_id       = message['id']

  parse_headers(message)
end