module Saorin::Client::Base

Attributes

options[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/saorin/client/base.rb, line 21
def initialize(options = {})
  @options = options
end

Public Instance Methods

apply(request) click to toggle source
# File lib/saorin/client/base.rb, line 33
def apply(request)
  response = send_request dump_request(request)
  content = process_response response
  raise content if content.is_a?(Saorin::RPCError)
  content
end
batch() click to toggle source
# File lib/saorin/client/base.rb, line 63
def batch
  Batch.new self
end
call(method, *args) click to toggle source
# File lib/saorin/client/base.rb, line 25
def call(method, *args)
  apply Saorin::Request.new(method, args, :id => uuid)
end
notify(method, *args) click to toggle source
# File lib/saorin/client/base.rb, line 29
def notify(method, *args)
  apply Saorin::Request.new(method, args)
end

Protected Instance Methods

dump_request(request) click to toggle source
# File lib/saorin/client/base.rb, line 89
def dump_request(request)
  formatter.dump request
end
handle_response(hash) click to toggle source
# File lib/saorin/client/base.rb, line 105
def handle_response(hash)
  return nil if hash.nil?
  response = Response.from_hash(hash)
  response.validate
  to_content response
end
parse_response(content) click to toggle source
# File lib/saorin/client/base.rb, line 84
def parse_response(content)
  return nil if content.nil? || content.empty?
  formatter.load content
end
process_response(content) click to toggle source
# File lib/saorin/client/base.rb, line 73
def process_response(content)
  response = parse_response content
  if response.is_a?(::Array)
    response.map { |res| handle_response res }
  else
    handle_response response
  end
rescue => e
  raise Saorin::InvalidResponse, e.to_s
end
send_request(content) click to toggle source
# File lib/saorin/client/base.rb, line 69
def send_request(content)
  raise NotImplementedError
end
to_content(response) click to toggle source
# File lib/saorin/client/base.rb, line 93
def to_content(response)
  return nil if response.nil?
  if response.error?
    code, message, data = response.error.values_at('code', 'message', 'data')
    error_class = Saorin.code_to_error code
    raise Error, 'unknown error code' unless error_class
    error_class.new message, :code => code, :data => data
  else
    response.result
  end
end