class Flickr::Api::Abstract

This class abstracts the interface for communication with the Flickr API.

@see Flickr::ApiError @see Flickr::OAuthError @see Flickr::TimeoutError

Public Class Methods

new(access_token = nil) click to toggle source

@private

# File lib/flickr/api/abstract.rb, line 27
def initialize(access_token = nil)
  @access_token = access_token
end
object_class() click to toggle source

@private

# File lib/flickr/api/abstract.rb, line 20
def self.object_class
  Flickr::Object.const_get(name.match(/^Flickr::Api::/).post_match)
end

Public Instance Methods

find(id) click to toggle source

@param id [String] ID of the object to be instantiated @example

person = Flickr.photos.find("1")
person.photos.each do |photo|
  # ...
end
# File lib/flickr/api/abstract.rb, line 39
def find(id)
  object_class = self.class.object_class
  object_class.new({"id" => id}, @access_token)
end

Private Instance Methods

client() click to toggle source
# File lib/flickr/api/abstract.rb, line 67
def client
  {
    data:   Flickr::Client::Data.new(@access_token),
    upload: Flickr::Client::Upload.new(@access_token),
  }
end
get(flickr_method, params = {}) click to toggle source
# File lib/flickr/api/abstract.rb, line 46
def get(flickr_method, params = {})
  make_request(:get, flickr_method, params)
end
make_request(http_method, flickr_method, params = {}) click to toggle source
# File lib/flickr/api/abstract.rb, line 54
def make_request(http_method, flickr_method, params = {})
  process_params(params, flickr_method)
  client[:data].send(http_method, "flickr.#{flickr_method}", params)
end
new_list(class_name, attributes_list, list_attributes = {}) click to toggle source

@example

photos = new_list(:Photo, [{"id" => "1"}], {"page" => 1})
photos #=> #<Flickr::Object::List:0x007ffe6b51d468
       #   @attributes={"page"=>1},
       #   @objects=
       #    [#<Flickr::Object::Photo:0x007ffe6b4ff760 owner=#<Flickr::Object::Person:0x007ffe6b52d408 >>,
       #     #<Flickr::Object::Photo:0x007ffe6b4fdcd0 owner=#<Flickr::Object::Person:0x007ffe6b556ab0 >>]>
# File lib/flickr/api/abstract.rb, line 106
def new_list(class_name, attributes_list, list_attributes = {})
  objects = attributes_list.map { |attributes| new_object(class_name, attributes) }
  list = Flickr::Object::List.new(list_attributes)
  list.populate(objects)
end
new_object(class_name, attributes) click to toggle source

@example

photo = new_object(:Photo, {"id" => "1"})
photo #=> #<Flickr::Object::Photo:0x007fcb9e08dee8 id="1">
# File lib/flickr/api/abstract.rb, line 92
def new_object(class_name, attributes)
  object_class = self.class.object_class.const_get(class_name)
  object_class.new(attributes, @access_token)
end
post(flickr_method, params = {}) click to toggle source
# File lib/flickr/api/abstract.rb, line 50
def post(flickr_method, params = {})
  make_request(:post, flickr_method, params)
end
process_params(params, flickr_method) click to toggle source

Enhances params, allowing nicer syntax.

@example

params = {sizes: ["Thumbnail", "Medium 500"]}
process_params(params, "flickr.photos.search")
params #=> {extras: "url_t,url_m"}

@see Flickr::Api::Abstract::ParamsProcessor

# File lib/flickr/api/abstract.rb, line 83
def process_params(params, flickr_method)
  ParamsProcessor.new(params).process_for(flickr_method)
end
replace(params = {}) click to toggle source
# File lib/flickr/api/abstract.rb, line 63
def replace(params = {})
  client[:upload].replace(params)
end
upload(params = {}) click to toggle source
# File lib/flickr/api/abstract.rb, line 59
def upload(params = {})
  client[:upload].upload(params)
end