class Kitties::Client

Public Class Methods

new( base_uri:, token: nil ) click to toggle source

todo: add (optional) close with @http.close - why? why not?

# File lib/kittyverse/api/client.rb, line 68
def initialize( base_uri:, token: nil )
  uri = URI.parse( base_uri )
  @http = Net::HTTP.new( uri.host, uri.port )
  if uri.instance_of? URI::HTTPS
    @http.use_ssl = true
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  @base_request_uri  = uri.request_uri    ## e.g. save /v1 etc.
  ## puts "base_request_uri: >#{@base_request_uri}<"

  @request_headers = if token
                      { "x-api-token" => token  }
                     else
                      {}
                     end
end

Public Instance Methods

get( service, **params ) click to toggle source
# File lib/kittyverse/api/client.rb, line 86
def get( service, **params )

  ## add url-encoded query string from params hash e.g. ?limit=100&type=sale
  unless params.empty?
    query = URI.encode_www_form( params )
    service += "?#{query}"
  end

  puts "GET #{service}"

  request_uri = if @base_request_uri == "/"
                    service
                else
                   "#{@base_request_uri}#{service}"  ## e.g. add /v1 etc.
                end

  pp @request_headers

  req = Net::HTTP::Get.new( request_uri, @request_headers )

  res = @http.request(req)

  headers = res.to_hash   ## get all response headers

  if Kitties.debug?
    # Iterate all response headers.
    # res.each_header do |key, value|
    #  p "#{key} => #{value}"
    # end
    pp headers
    # => "content-type => application/json; charset=utf-8"
    # => "x-ratelimit-limit => 20"
    # => "x-ratelimit-remaining => 19"
    # => "x-ratelimit-reset => 1558079593"
    # ...
  end

  body = res.read_body
  ## pp body

  ## track last response
  Kitties.last_response = Response.new( res.code,
                                        res.message,
                                        headers,
                                        body )

  if res.code != '200'
    raise HttpError.new( res.code, res.message )
  end


  json = JSON.parse( body )  ## use just body (any difference?) -  why? why not?
  ## pp json
  json
end