class GdsApi::Base

def self.logger

def self.logger
  @logger ||= NullLogger.instance
end

def client

def client
  @client ||= create_client
end

def create_client

def create_client
  GdsApi::JsonClient.new(options)
end

def get_list(url)

def get_list(url)
  get_json(url) do |r|
    GdsApi::ListResponse.new(r, self)
  end
end

def initialize(endpoint_url, options = {})

def initialize(endpoint_url, options = {})
  options[:endpoint_url] = endpoint_url
  raise InvalidAPIURL unless endpoint_url =~ URI::RFC3986_Parser::RFC3986_URI
  base_options = { logger: GdsApi::Base.logger }
  default_options = base_options.merge(GdsApi::Base.default_options || {})
  @options = default_options.merge(options)
  self.endpoint = options[:endpoint_url]
end

def query_string(params)

def query_string(params)
  return "" if params.empty?
  param_pairs = params.sort.map { |key, value|
    case value
    when Array
      value.map do |v|
        "#{CGI.escape("#{key}[]")}=#{CGI.escape(v.to_s)}"
      end
    else
      "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}"
    end
  }.flatten
  "?#{param_pairs.join('&')}"
end

def uri_encode(param)

def uri_encode(param)
  Addressable::URI.encode(param.to_s)
end

def url_for_slug(slug, options = {})

def url_for_slug(slug, options = {})
  "#{base_url}/#{slug}.json#{query_string(options)}"
end