Class: GoogleApis::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/google_apis/connection.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Connection

Returns a new instance of Connection.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/google_apis/connection.rb', line 7

def initialize(options)
  options = options.symbolize_keys

  @client = Google::APIClient.new(
    :application_name => "rubygem:google-apis",
    :application_version => GoogleApis::VERSION
  )

  key = Google::APIClient::PKCS12.load_key(
    File.open(options[:private_key], "rb"),
    options[:passphrase] || "notasecret"
  )

  @asserter = Google::APIClient::JWTAsserter.new(
    options[:email_address],
    "",
    key
  )
end

Instance Method Details

#discover_api(name, version = 1) ⇒ Object



27
28
29
# File 'lib/google_apis/connection.rb', line 27

def discover_api(name, version = 1)
  @client.discovered_api name, "v#{version}"
end

#download(api, uri, to = nil) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/google_apis/connection.rb', line 58

def download(api, uri, to = nil)
  options = Google::APIClient::Request.new(:uri => uri)

  if to.nil? || File.directory?(to) || to.match(/\/$/)
    to = File.join *[to, File.basename(CGI.unescape(URI.parse(uri).path))].compact
  end

  save! execute!(api, options), to
end

#execute(api, api_method, *params) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/google_apis/connection.rb', line 31

def execute(api, api_method, *params)
  options, headers = params

  if options
    parameter_keys = (api_method.discovery_document["parameters"] || {}).keys.collect(&:to_sym)
    media = options.delete(:media)
    parameters, body_object = options.partition{|k, v| parameter_keys.include?(k)}.collect{|x| Hash[x]}
  end

  if media && media.is_a?(String)
    parameters[:uploadType] = "resumable"
    parameters[:name] ||= File.basename(media)
    if directory = body_object.delete(:directory)
      parameters[:name] = File.join(directory, parameters[:name])
    end
    media = Google::APIClient::UploadIO.new(media, `file --mime -b #{media}`.split(";")[0])
  end

  options = {:api_method => api_method}
  options[:parameters] = parameters unless parameters.empty?
  options[:body_object] = body_object unless body_object.empty?
  options[:media] = media if media
  options.merge!(headers) if headers

  parse! execute!(api, options)
end

#inspectObject



68
69
70
# File 'lib/google_apis/connection.rb', line 68

def inspect
  "#<#{self.class}:#{object_hexid} [#{@asserter.issuer}]>"
end