class GMO::PG::Dispatcher

Attributes

base_url[R]
raise_on_api_error[RW]

Public Class Methods

new(base_url) { |self| ... } click to toggle source
# File lib/gmo-pg/dispatcher.rb, line 18
def initialize(base_url)
  @base_url = base_url
  url = URI.parse(@base_url)
  @http = Net::HTTP.new(url.host, url.port)
  @http.use_ssl = true if url.scheme == 'https'
  yield self if block_given?
end

Public Instance Methods

connect() { |self| ... } click to toggle source
# File lib/gmo-pg/dispatcher.rb, line 35
def connect
  handle_error do
    @http.start { yield self if block_given? }
  end
end
dispatch(request) click to toggle source
# File lib/gmo-pg/dispatcher.rb, line 41
def dispatch(request)
  req = Net::HTTP::Post.new(request.path)
  req.body = GMO::PG::Payload.encode(request.payload)

  handle_error do
    res = @http.request(req)
    case res
    when Net::HTTPSuccess
      payload = GMO::PG::Payload.decode(res.body)
      response = request.class.corresponding_response_class.new(payload)
      raise response.errors.first.to_error if @raise_on_api_error && response.error?
      response
    else
      res.value # raise Net::XxxError
    end
  end
end
use_proxy(address: :ENV, port: nil, user: nil, pass: nil) click to toggle source
# File lib/gmo-pg/dispatcher.rb, line 26
def use_proxy(address: :ENV, port: nil, user: nil, pass: nil)
  @http.proxy_from_env = (address == :ENV)
  @http.proxy_address  = address
  @http.proxy_port     = port
  @http.proxy_user     = user
  @http.proxy_pass     = pass
  self
end

Private Instance Methods

handle_error() { || ... } click to toggle source
# File lib/gmo-pg/dispatcher.rb, line 61
def handle_error
  begin
    yield if block_given?
  rescue GMO::PG::Error
    raise
  rescue => e
    raise GMO::PG::Error.from_http_error(e)
  end
end