Parent

Files

GData::Client::Base

A client object used to interact with different Google Data APIs.

Attributes

auth_handler[RW]

A subclass of GData::Auth that handles authentication signing.

authsub_scope[RW]

The broadest AuthSub scope for working with an API. This is overriden by the service-specific subclasses.

clientlogin_service[RW]

A default service name for ClientLogin (overriden by subclasses).

clientlogin_url[RW]

The default URL for ClientLogin.

headers[RW]

Headers to include in every request.

http_service[RW]

A subclass of GData::HTTP that handles making HTTP requests.

source[RW]

A short string identifying the current application.

version[RW]

The API version being used.

Public Class Methods

new(options = {}) click to toggle source
# File lib/gdata/client/base.rb, line 39
def initialize(options = {})
  options.each do |key, value|
    self.send("#{key}=", value)
  end
  
  @headers ||= {}
  @http_service ||= GData::HTTP::DefaultService
  @version ||= '2'
  @source ||= 'AnonymousApp'
end

Public Instance Methods

authsub_private_key=(key) click to toggle source

Sets a private key to use with AuthSub requests.

# File lib/gdata/client/base.rb, line 173
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) click to toggle source

Sets an AuthSub token for the service.

# File lib/gdata/client/base.rb, line 168
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) click to toggle source
# File lib/gdata/client/base.rb, line 159
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) click to toggle source

Performs ClientLogin for the service. See GData::Auth::ClientLogin for details.

# File lib/gdata/client/base.rb, line 145
def clientlogin(username, password, captcha_token = nil, 
  captcha_answer = nil, service = nil, account_type = nil)
  if service.nil?
    service = @clientlogin_service
  end
  options = { :account_type => account_type }
  self.auth_handler = GData::Auth::ClientLogin.new(service, options)
  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) click to toggle source

Performs an HTTP DELETE against the API.

# File lib/gdata/client/base.rb, line 127
def delete(url)
  return self.make_request(:delete, url)
end
get(url) click to toggle source

Performs an HTTP GET against the API.

# File lib/gdata/client/base.rb, line 102
def get(url)
  return self.make_request(:get, url)
end
make_file_request(method, url, file_path, mime_type, entry = nil) click to toggle source

Sends an HTTP request with the given file as a stream

# File lib/gdata/client/base.rb, line 51
def make_file_request(method, url, file_path, mime_type, entry = nil)
  if not File.readable?(file_path)
    raise ArgumentError, "File #{file_path} is not readable."
  end
  file = File.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 = '') click to toggle source

Sends an HTTP request and return the response.

# File lib/gdata/client/base.rb, line 71
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) click to toggle source

Performs an HTTP POST against the API.

# File lib/gdata/client/base.rb, line 117
def post(url, body)
  return self.make_request(:post, url, body)
end
post_file(url, file_path, mime_type, entry = nil) click to toggle source

Performs an HTTP POST with the given file

# File lib/gdata/client/base.rb, line 122
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() click to toggle source

Constructs some necessary headers for every request.

# File lib/gdata/client/base.rb, line 132
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) click to toggle source

Performs an HTTP PUT against the API.

# File lib/gdata/client/base.rb, line 107
def put(url, body)
  return self.make_request(:put, url, body)
end
put_file(url, file_path, mime_type, entry = nil) click to toggle source

Performs an HTTP PUT with the given file

# File lib/gdata/client/base.rb, line 112
def put_file(url, file_path, mime_type, entry = nil)
  return self.make_file_request(:put, url, file_path, mime_type, entry)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.