class CloudPrint::Connection

Public Class Methods

new(client) click to toggle source
# File lib/cloudprint/connection.rb, line 8
def initialize client
  @client = client
end

Public Instance Methods

get(path, params = {}) click to toggle source
# File lib/cloudprint/connection.rb, line 12
def get(path, params = {})
  response = request(:get, path, params)
  parse_response(response)
end
multipart_post(path, params = {}) click to toggle source
# File lib/cloudprint/connection.rb, line 22
def multipart_post(path, params = {})
  response = request(:multipart, path, params)
  parse_response(response)
end
post(path, params = {}) click to toggle source
# File lib/cloudprint/connection.rb, line 17
def post(path, params = {})
  response = request(:post, path, params)
  parse_response(response)
end

Private Instance Methods

build_get_uri(uri, params = {}) click to toggle source
# File lib/cloudprint/connection.rb, line 79
def build_get_uri(uri, params = {})
  uri = uri.dup
  uri.query = params.any? ? URI.encode_www_form(params) : nil
  uri.request_uri
end
build_http_connection(uri) click to toggle source
# File lib/cloudprint/connection.rb, line 85
def build_http_connection(uri)
  http = Net::HTTP.new(uri.host, uri.port)

  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http
end
build_request(options) click to toggle source
# File lib/cloudprint/connection.rb, line 52
def build_request(options)
  method = options[:method]
  uri = options[:uri]

  request = case method
              when :multipart
                req = Net::HTTP::Post.new(uri.request_uri)
                # Convert hash keys to strings, because that's what Net::HTTPGenericRequest#encode_multipart_form_data assumes they are
                req.set_form(options[:params].inject({}) {|memo, (k,v)| memo[k.to_s] = v; memo }, 'multipart/form-data')
                req
              when :post
                req = Net::HTTP::Post.new(uri.request_uri)
                req.set_form_data(options[:params])
                req
              else
                req = Net::HTTP::Get.new(build_get_uri(uri, options[:params]))
            end

  set_request_headers(request)
  request
end
full_url_for(path) click to toggle source
# File lib/cloudprint/connection.rb, line 93
def full_url_for(path)
  "https://www.google.com/cloudprint" + path
end
make_http_request(options = {}) click to toggle source
# File lib/cloudprint/connection.rb, line 43
def make_http_request(options = {})
  method = options[:method]
  uri = URI.parse(options[:url])
  http = build_http_connection(uri)
  request = build_request(:method => method, :uri => uri, :params => options[:params])

  http.request(request)
end
parse_response(response) click to toggle source
# File lib/cloudprint/connection.rb, line 29
def parse_response(response)
  begin
    JSON.parse(response.body)
  rescue => e
    puts response.body
    raise e
  end
end
request(method, path, params) click to toggle source
# File lib/cloudprint/connection.rb, line 38
def request(method, path, params)
  url = full_url_for(path)
  make_http_request(:method => method, :url => url, :params => params)
end
set_request_headers(request) click to toggle source
# File lib/cloudprint/connection.rb, line 74
def set_request_headers(request)
  request['Authorization'] = "OAuth " + @client.access_token
  request['X-CloudPrint-Proxy'] = 'api-prober'
end