class Sheetsu::Request

Public Class Methods

new(url, basic_auth) click to toggle source
# File lib/sheetsu/request.rb, line 6
def initialize(url, basic_auth)
  @url = url
  @basic_auth = basic_auth
end

Public Instance Methods

call(method, body=nil) click to toggle source
# File lib/sheetsu/request.rb, line 11
def call(method, body=nil)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = request(method)
  request = add_headers(request)
  request = add_basic_auth(request)
  request = add_body(request, body)

  http.request(request)
end

Private Instance Methods

add_basic_auth(request) click to toggle source
# File lib/sheetsu/request.rb, line 41
def add_basic_auth(request)
  if @basic_auth.keys.any?
    request.basic_auth(CGI.unescape(@basic_auth[:api_key]), CGI.unescape(@basic_auth[:api_secret]))
  end
  request
end
add_body(request, body) click to toggle source
# File lib/sheetsu/request.rb, line 48
def add_body(request, body)
  if body
    request.body = body.to_json
  end
  request
end
add_column_value_to_url(options) click to toggle source
# File lib/sheetsu/request.rb, line 75
def add_column_value_to_url(options)
  if options[:column] && options[:value]
    @url += Sheetsu::Util.encoded_column(options)
    
    options.delete(:column)
    options.delete(:value)
  end
end
add_headers(request) click to toggle source
# File lib/sheetsu/request.rb, line 36
def add_headers(request)
  Sheetsu::Util.default_headers.each_pair { |k,v| request[k] = v }
  request
end
add_options_to_url(options) click to toggle source
# File lib/sheetsu/request.rb, line 69
def add_options_to_url(options)
  add_sheet_to_url(options)
  add_column_value_to_url(options)
  add_query_params_to_url(options)
end
add_query_params_to_url(options) click to toggle source
# File lib/sheetsu/request.rb, line 92
def add_query_params_to_url(options)
  h = Hash.new.tap do |hash|
    hash[:limit] = options[:limit] if options[:limit]
    hash[:offset] = options[:offset] if options[:offset]

    if options[:search]
      hash.merge!(options[:search])
      @url += '/search'
    end
  end

  if h.keys.any?
    @url = Sheetsu::Util.append_query_string_to_url(@url, h)
  end
end
add_sheet_to_url(options) click to toggle source
# File lib/sheetsu/request.rb, line 84
def add_sheet_to_url(options)
  if options[:sheet]
    @url += ['/sheets/', CGI::escape(options[:sheet]).to_s].join('')

    options.delete(:sheet)
  end
end
http_klass(method) click to toggle source
# File lib/sheetsu/request.rb, line 55
def http_klass(method)
  case method
  when :get    then Net::HTTP::Get
  when :post   then Net::HTTP::Post
  when :put    then Net::HTTP::Put
  when :patch  then Net::HTTP::Patch
  when :delete then Net::HTTP::Delete
  end
end
parse_response(response) click to toggle source
# File lib/sheetsu/request.rb, line 65
def parse_response(response)
  Sheetsu::Util.parse_response(response)
end
request(method) click to toggle source
# File lib/sheetsu/request.rb, line 29
def request(method)
  request = http_klass(method).new(uri.request_uri)
  add_headers(request)

  request
end
uri() click to toggle source
# File lib/sheetsu/request.rb, line 25
def uri
  @uri ||= URI.parse(@url)
end