class DuckDuckGoApi::Client

Constants

BASE_URL

Public Class Methods

query(options={}) click to toggle source
# File lib/duck_duck_go_api.rb, line 10
def query(options={})
        api_call '', options
end

Private Class Methods

api_call(method_name, options, verb=:get) click to toggle source
# File lib/duck_duck_go_api.rb, line 21
def api_call(method_name, options, verb=:get)
        response = connection(method_name, options, verb)
        parse_response response
end
api_url() click to toggle source

Private API Call Method ##############

# File lib/duck_duck_go_api.rb, line 17
def api_url
        BASE_URL + '/'
end
connection(method_name, options, verb) click to toggle source
# File lib/duck_duck_go_api.rb, line 35
def connection(method_name, options, verb)
                
        conn = Faraday.new(:url => api_url) do |faraday|
                faraday.request  :url_encoded
                faraday.adapter  Faraday.default_adapter
        end
        response = conn.get(method_name + "?" + to_query_params(options))
end
parse_response(response) click to toggle source
# File lib/duck_duck_go_api.rb, line 26
def parse_response(response)
        raise_errors response
        if response.body == " "
                {}
        else
                JSON.parse response.body
        end
end
raise_errors(response) click to toggle source
# File lib/duck_duck_go_api.rb, line 49
def raise_errors(response)
        message = "(#{response.status})"
        
        case response.status.to_i
          when 400
            raise BadRequest, message
          when 401
            raise Unauthorized, message
          when 403
            raise General, message
          when 404
            raise NotFound, message
          when 500
            raise InternalError, "An internal error is thrown."
          when 502..503
            raise Unavailable, message
        end
end
to_query_params(options) click to toggle source
# File lib/duck_duck_go_api.rb, line 45
def to_query_params(options)
        options.collect { |key, value| "#{key}=#{value}" }.join('&')
end