Class: GData::Client::Base
- Inherits:
-
Object
- Object
- GData::Client::Base
- Defined in:
- lib/gdata/client/base.rb
Overview
A client object used to interact with different Google Data APIs.
Direct Known Subclasses
Analytics, Apps, Blogger, BookSearch, Calendar, Contacts, DocList, Finance, GBase, GMail, Health, Notebook, Photos, Spreadsheets, WebmasterTools, YouTube
Instance Attribute Summary collapse
-
#auth_handler ⇒ Object
A subclass of GData::Auth that handles authentication signing.
-
#authsub_scope ⇒ Object
The broadest AuthSub scope for working with an API.
-
#clientlogin_service ⇒ Object
A default service name for ClientLogin (overriden by subclasses).
-
#clientlogin_url ⇒ Object
The default URL for ClientLogin.
-
#headers ⇒ Object
Headers to include in every request.
-
#http_service ⇒ Object
A subclass of GData::HTTP that handles making HTTP requests.
-
#source ⇒ Object
A short string identifying the current application.
-
#version ⇒ Object
The API version being used.
Instance Method Summary collapse
-
#authsub_private_key=(key) ⇒ Object
Sets a private key to use with AuthSub requests.
-
#authsub_token=(token) ⇒ Object
Sets an AuthSub token for the service.
- #authsub_url(next_url, secure = false, session = true, domain = nil, scope = nil) ⇒ Object
-
#clientlogin(username, password, captcha_token = nil, captcha_answer = nil, service = nil, account_type = nil) ⇒ Object
Performs ClientLogin for the service.
-
#delete(url) ⇒ Object
Performs an HTTP DELETE against the API.
-
#get(url) ⇒ Object
Performs an HTTP GET against the API.
-
#initialize(options = {}) ⇒ Base
constructor
A new instance of Base.
-
#make_file_request(method, url, file_path, mime_type, entry = nil) ⇒ Object
Sends an HTTP request with the given file as a stream.
-
#make_request(method, url, body = '') ⇒ Object
Sends an HTTP request and return the response.
-
#post(url, body) ⇒ Object
Performs an HTTP POST against the API.
-
#post_file(url, file_path, mime_type, entry = nil) ⇒ Object
Performs an HTTP POST with the given file.
-
#prepare_headers ⇒ Object
Constructs some necessary headers for every request.
-
#put(url, body) ⇒ Object
Performs an HTTP PUT against the API.
-
#put_file(url, file_path, mime_type, entry = nil) ⇒ Object
Performs an HTTP PUT with the given file.
Constructor Details
#initialize(options = {}) ⇒ Base
Returns a new instance of Base.
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/gdata/client/base.rb', line 40 def initialize( = {}) .each do |key, value| self.send("#{key}=", value) end @headers ||= {} @http_service ||= GData::HTTP::DefaultService @version ||= '2' @source ||= 'AnonymousApp' end |
Instance Attribute Details
#auth_handler ⇒ Object
A subclass of GData::Auth that handles authentication signing.
23 24 25 |
# File 'lib/gdata/client/base.rb', line 23 def auth_handler @auth_handler end |
#authsub_scope ⇒ Object
The broadest AuthSub scope for working with an API. This is overriden by the service-specific subclasses.
36 37 38 |
# File 'lib/gdata/client/base.rb', line 36 def authsub_scope @authsub_scope end |
#clientlogin_service ⇒ Object
A default service name for ClientLogin (overriden by subclasses).
33 34 35 |
# File 'lib/gdata/client/base.rb', line 33 def clientlogin_service @clientlogin_service end |
#clientlogin_url ⇒ Object
The default URL for ClientLogin.
31 32 33 |
# File 'lib/gdata/client/base.rb', line 31 def clientlogin_url @clientlogin_url end |
#headers ⇒ Object
Headers to include in every request.
27 28 29 |
# File 'lib/gdata/client/base.rb', line 27 def headers @headers end |
#http_service ⇒ Object
A subclass of GData::HTTP that handles making HTTP requests.
25 26 27 |
# File 'lib/gdata/client/base.rb', line 25 def http_service @http_service end |
#source ⇒ Object
A short string identifying the current application.
38 39 40 |
# File 'lib/gdata/client/base.rb', line 38 def source @source end |
#version ⇒ Object
The API version being used.
29 30 31 |
# File 'lib/gdata/client/base.rb', line 29 def version @version end |
Instance Method Details
#authsub_private_key=(key) ⇒ Object
Sets a private key to use with AuthSub requests.
174 175 176 177 178 179 180 |
# File 'lib/gdata/client/base.rb', line 174 def authsub_private_key=(key) if @auth_handler.class == GData::Auth::AuthSub @auth_handler.private_key = key else raise Error, "An AuthSub token must be set first." end end |
#authsub_token=(token) ⇒ Object
Sets an AuthSub token for the service.
169 170 171 |
# File 'lib/gdata/client/base.rb', line 169 def authsub_token=(token) self.auth_handler = GData::Auth::AuthSub.new(token) end |
#authsub_url(next_url, secure = false, session = true, domain = nil, scope = nil) ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/gdata/client/base.rb', line 160 def authsub_url(next_url, secure = false, session = true, domain = nil, scope = nil) if scope.nil? scope = @authsub_scope end GData::Auth::AuthSub.get_url(next_url, scope, secure, session, domain) end |
#clientlogin(username, password, captcha_token = nil, captcha_answer = nil, service = nil, account_type = nil) ⇒ Object
Performs ClientLogin for the service. See GData::Auth::ClientLogin for details.
146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/gdata/client/base.rb', line 146 def clientlogin(username, password, captcha_token = nil, captcha_answer = nil, service = nil, account_type = nil) if service.nil? service = @clientlogin_service end = { :account_type => account_type } self.auth_handler = GData::Auth::ClientLogin.new(service, ) if @clientlogin_url @auth_handler.auth_url = @clientlogin_url end source = GData::Auth::SOURCE_LIB_STRING + @source @auth_handler.get_token(username, password, source, captcha_token, captcha_answer) end |
#delete(url) ⇒ Object
Performs an HTTP DELETE against the API.
128 129 130 |
# File 'lib/gdata/client/base.rb', line 128 def delete(url) return self.make_request(:delete, url) end |
#get(url) ⇒ Object
Performs an HTTP GET against the API.
103 104 105 |
# File 'lib/gdata/client/base.rb', line 103 def get(url) return self.make_request(:get, url) end |
#make_file_request(method, url, file_path, mime_type, entry = nil) ⇒ Object
Sends an HTTP request with the given file as a stream
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/gdata/client/base.rb', line 52 def make_file_request(method, url, file_path, mime_type, entry = nil) if not File.readable?(open(file_path)) raise ArgumentError, "File #{file_path} is not readable." end file = File.open(open(file_path), 'rb') @headers['Slug'] = File.basename(file_path) if entry @headers['MIME-Version'] = '1.0' body = GData::HTTP::MimeBody.new(entry, file, mime_type) @headers['Content-Type'] = body.content_type response = self.make_request(method, url, body) else @headers['Content-Type'] = mime_type response = self.make_request(method, url, file) end file.close return response end |
#make_request(method, url, body = '') ⇒ Object
Sends an HTTP request and return the response.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/gdata/client/base.rb', line 72 def make_request(method, url, body = '') headers = self.prepare_headers request = GData::HTTP::Request.new(url, :headers => headers, :method => method, :body => body) if @auth_handler and @auth_handler.respond_to?(:sign_request!) @auth_handler.sign_request!(request) end service = http_service.new response = service.make_request(request) case response.status_code when 200, 201, 302 #Do nothing, it's a success. when 401, 403 raise AuthorizationError.new(response) when 400 raise BadRequestError.new(response) when 409 raise VersionConflictError.new(response) when 500 raise ServerError.new(response) else raise UnknownError.new(response) end return response end |
#post(url, body) ⇒ Object
Performs an HTTP POST against the API.
118 119 120 |
# File 'lib/gdata/client/base.rb', line 118 def post(url, body) return self.make_request(:post, url, body) end |
#post_file(url, file_path, mime_type, entry = nil) ⇒ Object
Performs an HTTP POST with the given file
123 124 125 |
# File 'lib/gdata/client/base.rb', line 123 def post_file(url, file_path, mime_type, entry = nil) return self.make_file_request(:post, url, file_path, mime_type, entry) end |
#prepare_headers ⇒ Object
Constructs some necessary headers for every request.
133 134 135 136 137 138 139 140 141 142 |
# File 'lib/gdata/client/base.rb', line 133 def prepare_headers headers = @headers headers['GData-Version'] = @version headers['User-Agent'] = GData::Auth::SOURCE_LIB_STRING + @source # by default we assume we are sending Atom entries if not headers.has_key?('Content-Type') headers['Content-Type'] = 'application/atom+xml' end return headers end |
#put(url, body) ⇒ Object
Performs an HTTP PUT against the API.
108 109 110 |
# File 'lib/gdata/client/base.rb', line 108 def put(url, body) return self.make_request(:put, url, body) end |
#put_file(url, file_path, mime_type, entry = nil) ⇒ Object
Performs an HTTP PUT with the given file
113 114 115 |
# File 'lib/gdata/client/base.rb', line 113 def put_file(url, file_path, mime_type, entry = nil) return self.make_file_request(:put, url, file_path, mime_type, entry) end |