class DNPedia::API

Constants

BASE_URL
DEFAULT_HEADERS
DEFAULT_PARAMS
HOST

Public Instance Methods

Private Instance Methods

_get(path, params = {}, &block) click to toggle source
# File lib/dnpedia/api.rb, line 91
def _get(path, params = {}, &block)
  uri = url_for(path)
  uri.query = URI.encode_www_form(params)
  get = Net::HTTP::Get.new(uri, DEFAULT_HEADERS)

  request(get, &block)
end
decompress_gzip_body(body) click to toggle source
# File lib/dnpedia/api.rb, line 69
def decompress_gzip_body(body)
  io = StringIO.new(body)
  gz = Zlib::GzipReader.new(io)
  gz.read
rescue Zlib::GzipFile::Error => e
  raise Error, e.message
end
https_options() click to toggle source
# File lib/dnpedia/api.rb, line 55
def https_options
  if proxy = ENV["HTTPS_PROXY"] || ENV["https_proxy"]
    uri = URI(proxy)
    {
      proxy_address: uri.hostname,
      proxy_port: uri.port,
      proxy_from_env: false,
      use_ssl: true
    }
  else
    { use_ssl: true }
  end
end
normalize(word) click to toggle source
# File lib/dnpedia/api.rb, line 44
def normalize(word)
  return word if word.start_with?("~")
  return word unless word.include?("%")

  "~#{word}"
end
request(req) { |parse body| ... } click to toggle source
# File lib/dnpedia/api.rb, line 77
def request(req)
  Net::HTTP.start(HOST, 443, https_options) do |http|
    response = http.request(req)

    code = response.code.to_i
    raise Error, "Unsupported response code returned: #{code}" if code != 200

    body = response.body
    body = decompress_gzip_body(body) if response["content-encoding"] == "gzip"

    yield JSON.parse body
  end
end
url_for(path) click to toggle source
# File lib/dnpedia/api.rb, line 51
def url_for(path)
  URI(BASE_URL + path)
end