flickr-objects 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/README.md +49 -63
 - data/lib/flickr/api/abstract/params_processor.rb +68 -0
 - data/lib/flickr/api/abstract.rb +113 -0
 - data/lib/flickr/api/general.rb +75 -0
 - data/lib/flickr/api/person.rb +91 -39
 - data/lib/flickr/api/photo.rb +213 -108
 - data/lib/flickr/api/set.rb +114 -55
 - data/lib/flickr/api/upload_ticket.rb +17 -6
 - data/lib/flickr/api.rb +90 -35
 - data/lib/flickr/attributes.rb +200 -0
 - data/lib/flickr/base_converter.rb +29 -0
 - data/lib/flickr/client/data.rb +47 -0
 - data/lib/flickr/client/oauth.rb +44 -0
 - data/lib/flickr/client/upload.rb +55 -0
 - data/lib/flickr/client.rb +77 -33
 - data/lib/flickr/configuration.rb +85 -14
 - data/lib/flickr/error.rb +58 -0
 - data/lib/flickr/middleware.rb +52 -28
 - data/lib/flickr/oauth.rb +89 -74
 - data/lib/flickr/object/attribute_locations/list.rb +25 -0
 - data/lib/flickr/object/attribute_locations/location.rb +29 -0
 - data/lib/flickr/object/attribute_locations/permissions.rb +31 -0
 - data/lib/flickr/object/attribute_locations/person/upload_status.rb +32 -0
 - data/lib/flickr/object/attribute_locations/person.rb +78 -0
 - data/lib/flickr/object/attribute_locations/photo/exif.rb +29 -0
 - data/lib/flickr/object/attribute_locations/photo/note.rb +36 -0
 - data/lib/flickr/object/attribute_locations/photo/tag.rb +23 -0
 - data/lib/flickr/object/attribute_locations/photo.rb +164 -0
 - data/lib/flickr/object/attribute_locations/set.rb +53 -0
 - data/lib/flickr/object/attribute_locations/upload_ticket.rb +30 -0
 - data/lib/flickr/object/attribute_locations/visibility.rb +24 -0
 - data/lib/flickr/object/list/kaminari.rb +30 -0
 - data/lib/flickr/object/list/normal.rb +27 -0
 - data/lib/flickr/object/list/will_paginate.rb +31 -0
 - data/lib/flickr/object/list.rb +87 -0
 - data/lib/flickr/object/location.rb +35 -0
 - data/lib/flickr/object/permissions.rb +18 -0
 - data/lib/flickr/object/person/upload_status.rb +22 -0
 - data/lib/flickr/object/person.rb +93 -0
 - data/lib/flickr/object/photo/exif.rb +35 -0
 - data/lib/flickr/object/photo/note.rb +20 -0
 - data/lib/flickr/object/photo/size.rb +67 -0
 - data/lib/flickr/object/photo/tag.rb +23 -0
 - data/lib/flickr/object/photo.rb +349 -0
 - data/lib/flickr/object/set.rb +114 -0
 - data/lib/flickr/object/upload_ticket.rb +31 -0
 - data/lib/flickr/object/visibility.rb +16 -0
 - data/lib/flickr/object.rb +118 -27
 - data/lib/flickr/sanitized_file.rb +70 -0
 - data/lib/flickr/version.rb +4 -2
 - data/lib/flickr.rb +69 -15
 - metadata +89 -103
 - data/lib/flickr/api/api_methods/flickr.rb +0 -5
 - data/lib/flickr/api/api_methods/person.rb +0 -14
 - data/lib/flickr/api/api_methods/photo.rb +0 -26
 - data/lib/flickr/api/api_methods/set.rb +0 -18
 - data/lib/flickr/api/api_methods/upload_ticket.rb +0 -5
 - data/lib/flickr/api/flickr.rb +0 -35
 - data/lib/flickr/api_caller.rb +0 -98
 - data/lib/flickr/client/methods_client.rb +0 -22
 - data/lib/flickr/client/upload_client.rb +0 -62
 - data/lib/flickr/errors.rb +0 -19
 - data/lib/flickr/helpers/base_58.rb +0 -15
 - data/lib/flickr/helpers/boolean.rb +0 -4
 - data/lib/flickr/helpers/core_ext.rb +0 -5
 - data/lib/flickr/object/attribute/converter.rb +0 -49
 - data/lib/flickr/object/attribute/finder.rb +0 -32
 - data/lib/flickr/object/attribute.rb +0 -45
 - data/lib/flickr/objects/attribute_values/list.rb +0 -10
 - data/lib/flickr/objects/attribute_values/location.rb +0 -14
 - data/lib/flickr/objects/attribute_values/note.rb +0 -11
 - data/lib/flickr/objects/attribute_values/permissions.rb +0 -12
 - data/lib/flickr/objects/attribute_values/person/upload_status.rb +0 -16
 - data/lib/flickr/objects/attribute_values/person.rb +0 -24
 - data/lib/flickr/objects/attribute_values/photo.rb +0 -84
 - data/lib/flickr/objects/attribute_values/set.rb +0 -17
 - data/lib/flickr/objects/attribute_values/tag.rb +0 -9
 - data/lib/flickr/objects/attribute_values/upload_ticket.rb +0 -9
 - data/lib/flickr/objects/attribute_values/visibility.rb +0 -10
 - data/lib/flickr/objects/list.rb +0 -86
 - data/lib/flickr/objects/location.rb +0 -26
 - data/lib/flickr/objects/note.rb +0 -14
 - data/lib/flickr/objects/permissions.rb +0 -14
 - data/lib/flickr/objects/person/upload_status.rb +0 -14
 - data/lib/flickr/objects/person.rb +0 -43
 - data/lib/flickr/objects/photo.rb +0 -113
 - data/lib/flickr/objects/set.rb +0 -29
 - data/lib/flickr/objects/tag.rb +0 -17
 - data/lib/flickr/objects/upload_ticket.rb +0 -18
 - data/lib/flickr/objects/visibility.rb +0 -12
 - data/lib/flickr/objects.rb +0 -25
 
| 
         @@ -0,0 +1,200 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "date"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              ##
         
     | 
| 
      
 6 
     | 
    
         
            +
              # A helper class for true/false type.
         
     | 
| 
      
 7 
     | 
    
         
            +
              #
         
     | 
| 
      
 8 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              class Boolean
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              ##
         
     | 
| 
      
 14 
     | 
    
         
            +
              # A module that provides functionality of defining attributes of which locations
         
     | 
| 
      
 15 
     | 
    
         
            +
              # can be found in the JSON response from Flickr.
         
     | 
| 
      
 16 
     | 
    
         
            +
              #
         
     | 
| 
      
 17 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 18 
     | 
    
         
            +
              #
         
     | 
| 
      
 19 
     | 
    
         
            +
              module Attributes
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                ##
         
     | 
| 
      
 22 
     | 
    
         
            +
                # Registers an attribute (name + type), defining the getter method (and in the
         
     | 
| 
      
 23 
     | 
    
         
            +
                # boolean case an additional predicated alias).
         
     | 
| 
      
 24 
     | 
    
         
            +
                #
         
     | 
| 
      
 25 
     | 
    
         
            +
                def attribute(name, type)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  new_attribute = Attribute.new(name, type)
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  attributes << new_attribute
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  define_method(name) do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    self.class.attributes.find(name).value(self)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  alias_method "#{name}?", name if type == Boolean
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  new_attribute
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                ##
         
     | 
| 
      
 39 
     | 
    
         
            +
                # List of all registered attributes.
         
     | 
| 
      
 40 
     | 
    
         
            +
                #
         
     | 
| 
      
 41 
     | 
    
         
            +
                def attributes
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @attributes ||= AttributeSet.new
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              ##
         
     | 
| 
      
 48 
     | 
    
         
            +
              # This class stores the information about attributes. It stores the name, locations
         
     | 
| 
      
 49 
     | 
    
         
            +
              # and type, and it is responsible for retrieving the attribute values from Flickr's
         
     | 
| 
      
 50 
     | 
    
         
            +
              # JSON response, and optionally coercing them to the right type (for example, time
         
     | 
| 
      
 51 
     | 
    
         
            +
              # can be represented in JSON only as a string, and here we convert it to actual
         
     | 
| 
      
 52 
     | 
    
         
            +
              # instance of Ruby's `Time` class).
         
     | 
| 
      
 53 
     | 
    
         
            +
              #
         
     | 
| 
      
 54 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 55 
     | 
    
         
            +
              #
         
     | 
| 
      
 56 
     | 
    
         
            +
              class Attribute
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                attr_reader :name, :type, :locations
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                def initialize(name, type)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  @name, @type = name, type
         
     | 
| 
      
 62 
     | 
    
         
            +
                  @locations = []
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def add_locations(locations)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @locations = locations + @locations
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                def value(object)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  value = find_value(object)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  coerce(value, object, @type)
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                private
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                ##
         
     | 
| 
      
 77 
     | 
    
         
            +
                # Finds attribute value in the JSON response by looking at the given locations.
         
     | 
| 
      
 78 
     | 
    
         
            +
                #
         
     | 
| 
      
 79 
     | 
    
         
            +
                def find_value(context)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  locations.each do |location|
         
     | 
| 
      
 81 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 82 
     | 
    
         
            +
                      value = context.instance_exec(&location)
         
     | 
| 
      
 83 
     | 
    
         
            +
                      next if value.nil?
         
     | 
| 
      
 84 
     | 
    
         
            +
                      return value
         
     | 
| 
      
 85 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 86 
     | 
    
         
            +
                    end
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                ##
         
     | 
| 
      
 93 
     | 
    
         
            +
                # It coerces the found attribute value into a given type. For example, "boolean"
         
     | 
| 
      
 94 
     | 
    
         
            +
                # type is represented in JSON as an integer (1/0), so values of this type need to
         
     | 
| 
      
 95 
     | 
    
         
            +
                # be coerced the appropriate true/false values.
         
     | 
| 
      
 96 
     | 
    
         
            +
                #
         
     | 
| 
      
 97 
     | 
    
         
            +
                def coerce(value, object, type)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  return value if value.nil?
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  if type.is_a?(Enumerable)
         
     | 
| 
      
 101 
     | 
    
         
            +
                    objects = value.map { |e| coerce(e, object, type.first) }
         
     | 
| 
      
 102 
     | 
    
         
            +
                    if type.respond_to?(:find_by)
         
     | 
| 
      
 103 
     | 
    
         
            +
                      return type.class.new({}).populate(objects)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    else
         
     | 
| 
      
 105 
     | 
    
         
            +
                      return type.class.new(objects)
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
                  elsif type.ancestors.include? Flickr::Object
         
     | 
| 
      
 108 
     | 
    
         
            +
                    return type.new(value, object.access_token)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  else
         
     | 
| 
      
 110 
     | 
    
         
            +
                    COERCIONS.fetch(type).each do |coercion|
         
     | 
| 
      
 111 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 112 
     | 
    
         
            +
                        return coercion.call(value)
         
     | 
| 
      
 113 
     | 
    
         
            +
                      rescue
         
     | 
| 
      
 114 
     | 
    
         
            +
                      end
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                  value
         
     | 
| 
      
 119 
     | 
    
         
            +
                end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                COERCIONS = {
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  String => [
         
     | 
| 
      
 124 
     | 
    
         
            +
                    ->(value) { String(value) },
         
     | 
| 
      
 125 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  Time => [
         
     | 
| 
      
 128 
     | 
    
         
            +
                    ->(value) { Time.at(Integer(value)) },
         
     | 
| 
      
 129 
     | 
    
         
            +
                    ->(value) { DateTime.parse(value).to_time },
         
     | 
| 
      
 130 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                  Boolean => [
         
     | 
| 
      
 133 
     | 
    
         
            +
                    ->(value) { Integer(value) == 1 },
         
     | 
| 
      
 134 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                  Integer => [
         
     | 
| 
      
 137 
     | 
    
         
            +
                    ->(value) { Integer(value) },
         
     | 
| 
      
 138 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  Float => [
         
     | 
| 
      
 141 
     | 
    
         
            +
                    ->(value) { Float(value) },
         
     | 
| 
      
 142 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                  Hash => [
         
     | 
| 
      
 145 
     | 
    
         
            +
                    ->(value) { value },
         
     | 
| 
      
 146 
     | 
    
         
            +
                  ],
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                  Array => [
         
     | 
| 
      
 149 
     | 
    
         
            +
                    ->(value) { Array(value) },
         
     | 
| 
      
 150 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                }
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
              end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
              ##
         
     | 
| 
      
 157 
     | 
    
         
            +
              # Container for the attributes.
         
     | 
| 
      
 158 
     | 
    
         
            +
              #
         
     | 
| 
      
 159 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 160 
     | 
    
         
            +
              #
         
     | 
| 
      
 161 
     | 
    
         
            +
              class AttributeSet
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                include Enumerable
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
                def initialize(*attributes)
         
     | 
| 
      
 166 
     | 
    
         
            +
                  @attributes = Array.new(attributes)
         
     | 
| 
      
 167 
     | 
    
         
            +
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                def each(*args, &block)
         
     | 
| 
      
 170 
     | 
    
         
            +
                  @attributes.each(*args, &block)
         
     | 
| 
      
 171 
     | 
    
         
            +
                end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                ##
         
     | 
| 
      
 174 
     | 
    
         
            +
                # Shorthand for finding attributes by name.
         
     | 
| 
      
 175 
     | 
    
         
            +
                #
         
     | 
| 
      
 176 
     | 
    
         
            +
                def find(name = nil)
         
     | 
| 
      
 177 
     | 
    
         
            +
                  if name
         
     | 
| 
      
 178 
     | 
    
         
            +
                    super() { |attribute| attribute.name == name }
         
     | 
| 
      
 179 
     | 
    
         
            +
                  else
         
     | 
| 
      
 180 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 181 
     | 
    
         
            +
                  end
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
                ##
         
     | 
| 
      
 185 
     | 
    
         
            +
                # Shorthand for adding locations to multiple attributes at once.
         
     | 
| 
      
 186 
     | 
    
         
            +
                #
         
     | 
| 
      
 187 
     | 
    
         
            +
                def add_locations(hash)
         
     | 
| 
      
 188 
     | 
    
         
            +
                  hash.each do |attribute_name, locations|
         
     | 
| 
      
 189 
     | 
    
         
            +
                    find(attribute_name).add_locations(locations)
         
     | 
| 
      
 190 
     | 
    
         
            +
                  end
         
     | 
| 
      
 191 
     | 
    
         
            +
                end
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
                def <<(attribute)
         
     | 
| 
      
 194 
     | 
    
         
            +
                  @attributes << attribute
         
     | 
| 
      
 195 
     | 
    
         
            +
                  self
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
              end
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              ##
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Converts numbers to different bases, used for generating URLs in Flickr. For example,
         
     | 
| 
      
 5 
     | 
    
         
            +
              # base 58 is used for generating short URLs.
         
     | 
| 
      
 6 
     | 
    
         
            +
              #
         
     | 
| 
      
 7 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
      
 9 
     | 
    
         
            +
              module BaseConverter
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                extend self
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                BASE58_ALPHABET = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ".chars.to_a.freeze
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def to_base58(number)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  number = Integer(number)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  result = ""
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 20 
     | 
    
         
            +
                    number, remainder = number.divmod(58)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    result = BASE58_ALPHABET[remainder] + result
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end while number > 0
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  result
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                ##
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Client for query and maniuplation of Flickr's photo data.
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                class Data < Flickr::Client
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(access_token = nil)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    access_token ||= Array.new(2, nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    super() do |builder|
         
     | 
| 
      
 13 
     | 
    
         
            +
                      # Request
         
     | 
| 
      
 14 
     | 
    
         
            +
                      builder.use FaradayMiddleware::OAuth,
         
     | 
| 
      
 15 
     | 
    
         
            +
                        consumer_key:    api_key,
         
     | 
| 
      
 16 
     | 
    
         
            +
                        consumer_secret: shared_secret,
         
     | 
| 
      
 17 
     | 
    
         
            +
                        token:           access_token[0],
         
     | 
| 
      
 18 
     | 
    
         
            +
                        token_secret:    access_token[1]
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                      # Response
         
     | 
| 
      
 21 
     | 
    
         
            +
                      builder.use Flickr::Middleware::CheckStatus
         
     | 
| 
      
 22 
     | 
    
         
            +
                      builder.use FaradayMiddleware::ParseJson
         
     | 
| 
      
 23 
     | 
    
         
            +
                      builder.use Flickr::Middleware::CheckOAuth
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  private
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  def do_request(http_method, flickr_method, params = {})
         
     | 
| 
      
 30 
     | 
    
         
            +
                    super(http_method, "rest") do |req|
         
     | 
| 
      
 31 
     | 
    
         
            +
                      req.params[:method] = flickr_method
         
     | 
| 
      
 32 
     | 
    
         
            +
                      req.params.update(params)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def url
         
     | 
| 
      
 37 
     | 
    
         
            +
                    if use_ssl?
         
     | 
| 
      
 38 
     | 
    
         
            +
                      "https://secure.flickr.com/services"
         
     | 
| 
      
 39 
     | 
    
         
            +
                    else
         
     | 
| 
      
 40 
     | 
    
         
            +
                      "http://api.flickr.com/services"
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                ##
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Client for OAuth authentication.
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                class OAuth < Flickr::Client
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  NO_CALLBACK = "oob".freeze
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def initialize(request_token = nil)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    request_token ||= Array.new(2, nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    super() do |builder|
         
     | 
| 
      
 15 
     | 
    
         
            +
                      builder.use FaradayMiddleware::OAuth,
         
     | 
| 
      
 16 
     | 
    
         
            +
                        consumer_key:    api_key,
         
     | 
| 
      
 17 
     | 
    
         
            +
                        consumer_secret: shared_secret,
         
     | 
| 
      
 18 
     | 
    
         
            +
                        token:           request_token[0],
         
     | 
| 
      
 19 
     | 
    
         
            +
                        token_secret:    request_token[1]
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                      builder.use Flickr::Middleware::ParseOAuth
         
     | 
| 
      
 22 
     | 
    
         
            +
                      builder.use Flickr::Middleware::CheckOAuth
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def get_request_token(params = {})
         
     | 
| 
      
 27 
     | 
    
         
            +
                    params[:oauth_callback] ||= NO_CALLBACK
         
     | 
| 
      
 28 
     | 
    
         
            +
                    get "request_token", params
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def get_access_token(params = {})
         
     | 
| 
      
 32 
     | 
    
         
            +
                    get "access_token", params
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  private
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def url
         
     | 
| 
      
 38 
     | 
    
         
            +
                    "http://www.flickr.com/services/oauth"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                ##
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Client for uploading photos.
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                class Upload < Flickr::Client
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(access_token = nil)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    access_token ||= Array.new(2, nil)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    super() do |builder|
         
     | 
| 
      
 13 
     | 
    
         
            +
                      # Request
         
     | 
| 
      
 14 
     | 
    
         
            +
                      builder.use FaradayMiddleware::OAuth,
         
     | 
| 
      
 15 
     | 
    
         
            +
                        consumer_key:    api_key,
         
     | 
| 
      
 16 
     | 
    
         
            +
                        consumer_secret: shared_secret,
         
     | 
| 
      
 17 
     | 
    
         
            +
                        token:           access_token[0],
         
     | 
| 
      
 18 
     | 
    
         
            +
                        token_secret:    access_token[1]
         
     | 
| 
      
 19 
     | 
    
         
            +
                      builder.use Faraday::Request::Multipart
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                      # Response
         
     | 
| 
      
 22 
     | 
    
         
            +
                      builder.use Flickr::Middleware::CheckStatus
         
     | 
| 
      
 23 
     | 
    
         
            +
                      builder.use FaradayMiddleware::ParseXml
         
     | 
| 
      
 24 
     | 
    
         
            +
                      builder.use Flickr::Middleware::CheckOAuth
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def upload(params = {})
         
     | 
| 
      
 29 
     | 
    
         
            +
                    params[:photo] = UploadIO(params[:photo])
         
     | 
| 
      
 30 
     | 
    
         
            +
                    post "upload", params
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def replace(params = {})
         
     | 
| 
      
 34 
     | 
    
         
            +
                    params[:photo] = UploadIO(params[:photo])
         
     | 
| 
      
 35 
     | 
    
         
            +
                    post "replace", params
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  private
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def UploadIO(file)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    Faraday::UploadIO.new(file, file.content_type, file.path)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  def url
         
     | 
| 
      
 45 
     | 
    
         
            +
                    if use_ssl?
         
     | 
| 
      
 46 
     | 
    
         
            +
                      "https://secure.flickr.com/services"
         
     | 
| 
      
 47 
     | 
    
         
            +
                    else
         
     | 
| 
      
 48 
     | 
    
         
            +
                      "http://api.flickr.com/services"
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/flickr/client.rb
    CHANGED
    
    | 
         @@ -2,56 +2,100 @@ require "faraday" 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require "faraday_middleware"
         
     | 
| 
       3 
3 
     | 
    
         
             
            require "flickr/middleware"
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              ##
         
     | 
| 
      
 8 
     | 
    
         
            +
              # This abstract class is the base for the client classes which communicate with
         
     | 
| 
      
 9 
     | 
    
         
            +
              # the Flickr API. For example, the part of Flickr API for uploading photos need
         
     | 
| 
      
 10 
     | 
    
         
            +
              # requests to be marked as multipart, while the part for querying data of photos
         
     | 
| 
      
 11 
     | 
    
         
            +
              # doesn't need it. So it's obvious that we need separate classes.
         
     | 
| 
      
 12 
     | 
    
         
            +
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              # This class just extracts the common behaviour, like including the API key
         
     | 
| 
      
 14 
     | 
    
         
            +
              # in requests.
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              # @private
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
      
 18 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                extend Flickr::AutoloadHelper
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                autoload_dir "flickr/client",
         
     | 
| 
      
 23 
     | 
    
         
            +
                  :Data   => "data",
         
     | 
| 
      
 24 
     | 
    
         
            +
                  :Upload => "upload",
         
     | 
| 
      
 25 
     | 
    
         
            +
                  :OAuth  => "oauth"
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       7 
27 
     | 
    
         
             
                DEFAULTS = {
         
     | 
| 
       8 
     | 
    
         
            -
                  open_timeout:  
     | 
| 
       9 
     | 
    
         
            -
                  timeout: 
     | 
| 
      
 28 
     | 
    
         
            +
                  open_timeout: 8,
         
     | 
| 
      
 29 
     | 
    
         
            +
                  timeout:      10,
         
     | 
| 
       10 
30 
     | 
    
         
             
                }
         
     | 
| 
       11 
31 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                def initialize 
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
      
 32 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 33 
     | 
    
         
            +
                  @connection = Faraday.new(url, connection_options) do |builder|
         
     | 
| 
      
 34 
     | 
    
         
            +
                    builder.use Flickr::Middleware::CatchTimeout
         
     | 
| 
      
 35 
     | 
    
         
            +
                    yield builder if block_given?
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    builder.adapter :net_http
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def get(*args, &block)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  do_request(:get, *args, &block)
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
       14 
44 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 45 
     | 
    
         
            +
                def post(*args, &block)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  do_request(:post, *args, &block)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
       17 
48 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                  proxy = Flickr.configuration.proxy
         
     | 
| 
      
 49 
     | 
    
         
            +
                private
         
     | 
| 
       20 
50 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                def connection_options
         
     | 
| 
      
 52 
     | 
    
         
            +
                  {
         
     | 
| 
       23 
53 
     | 
    
         
             
                    params: {
         
     | 
| 
       24 
54 
     | 
    
         
             
                      format: "json",
         
     | 
| 
       25 
55 
     | 
    
         
             
                      nojsoncallback: 1,
         
     | 
| 
       26 
     | 
    
         
            -
                      api_key: api_key
         
     | 
| 
      
 56 
     | 
    
         
            +
                      api_key: api_key,
         
     | 
| 
       27 
57 
     | 
    
         
             
                    },
         
     | 
| 
       28 
58 
     | 
    
         
             
                    request: {
         
     | 
| 
       29 
59 
     | 
    
         
             
                      open_timeout: open_timeout,
         
     | 
| 
       30 
     | 
    
         
            -
                      timeout: timeout
         
     | 
| 
      
 60 
     | 
    
         
            +
                      timeout: timeout,
         
     | 
| 
       31 
61 
     | 
    
         
             
                    },
         
     | 
| 
       32 
     | 
    
         
            -
                    proxy: proxy
         
     | 
| 
      
 62 
     | 
    
         
            +
                    proxy: proxy,
         
     | 
| 
       33 
63 
     | 
    
         
             
                  }
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
       34 
65 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                    builder.use FaradayMiddleware::OAuth,
         
     | 
| 
       39 
     | 
    
         
            -
                      consumer_key: api_key,
         
     | 
| 
       40 
     | 
    
         
            -
                      consumer_secret: shared_secret,
         
     | 
| 
       41 
     | 
    
         
            -
                      token: access_token.first,
         
     | 
| 
       42 
     | 
    
         
            -
                      token_secret: access_token.last
         
     | 
| 
       43 
     | 
    
         
            -
                    yield builder if block_given?
         
     | 
| 
      
 66 
     | 
    
         
            +
                def url
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # Should be implemented in subclasses
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
       44 
69 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 70 
     | 
    
         
            +
                def do_request(http_method, *args, &block)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  response = @connection.send(http_method, *args, &block)
         
     | 
| 
      
 72 
     | 
    
         
            +
                  response.body
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
       49 
74 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                   
     | 
| 
      
 75 
     | 
    
         
            +
                def api_key
         
     | 
| 
      
 76 
     | 
    
         
            +
                  Flickr.api_key
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                def shared_secret
         
     | 
| 
      
 80 
     | 
    
         
            +
                  Flickr.shared_secret
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                def open_timeout
         
     | 
| 
      
 84 
     | 
    
         
            +
                  Flickr.open_timeout || DEFAULTS[:open_timeout]
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                def timeout
         
     | 
| 
      
 88 
     | 
    
         
            +
                  Flickr.timeout || DEFAULTS[:timeout]
         
     | 
| 
       52 
89 
     | 
    
         
             
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                def use_ssl?
         
     | 
| 
      
 92 
     | 
    
         
            +
                  !!Flickr.use_ssl
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                def proxy
         
     | 
| 
      
 96 
     | 
    
         
            +
                  Flickr.proxy
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
       53 
99 
     | 
    
         
             
              end
         
     | 
| 
       54 
     | 
    
         
            -
            end
         
     | 
| 
       55 
100 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
            require "flickr/client/upload_client"
         
     | 
| 
      
 101 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/flickr/configuration.rb
    CHANGED
    
    | 
         @@ -1,25 +1,96 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
              class Configuration
         
     | 
| 
       3 
     | 
    
         
            -
                attr_accessor :api_key
         
     | 
| 
       4 
     | 
    
         
            -
                attr_accessor :shared_secret
         
     | 
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
       5 
2 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
              ##
         
     | 
| 
      
 4 
     | 
    
         
            +
              # Provides general configuration options for the library.
         
     | 
| 
      
 5 
     | 
    
         
            +
              #
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Configuration
         
     | 
| 
       8 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
                ##
         
     | 
| 
      
 9 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 10 
     | 
    
         
            +
                #     Flickr.configure do |config|
         
     | 
| 
      
 11 
     | 
    
         
            +
                #       config.api_key = "..."
         
     | 
| 
      
 12 
     | 
    
         
            +
                #       config.shared_secret = "..."
         
     | 
| 
      
 13 
     | 
    
         
            +
                #       # ...
         
     | 
| 
      
 14 
     | 
    
         
            +
                #     end
         
     | 
| 
      
 15 
     | 
    
         
            +
                #
         
     | 
| 
      
 16 
     | 
    
         
            +
                def configure
         
     | 
| 
      
 17 
     | 
    
         
            +
                  yield self
         
     | 
| 
      
 18 
     | 
    
         
            +
                  self
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                ##
         
     | 
| 
      
 22 
     | 
    
         
            +
                # API key and shared secret are necessary for making API requests. You can apply
         
     | 
| 
      
 23 
     | 
    
         
            +
                # for them [here][api_key].
         
     | 
| 
      
 24 
     | 
    
         
            +
                #
         
     | 
| 
      
 25 
     | 
    
         
            +
                # [api_key]: http://www.flickr.com/services/apps/create/apply
         
     | 
| 
      
 26 
     | 
    
         
            +
                #
         
     | 
| 
      
 27 
     | 
    
         
            +
                attr_accessor :api_key, :shared_secret
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                ##
         
     | 
| 
      
 30 
     | 
    
         
            +
                # Required for authenticated requests.
         
     | 
| 
      
 31 
     | 
    
         
            +
                #
         
     | 
| 
      
 32 
     | 
    
         
            +
                #     config.access_token_key    = "KEY"
         
     | 
| 
      
 33 
     | 
    
         
            +
                #     config.access_token_secret = "SECRET"
         
     | 
| 
      
 34 
     | 
    
         
            +
                #
         
     | 
| 
      
 35 
     | 
    
         
            +
                # For details on how to obtain it, take a look at the {Flickr::OAuth} module.
         
     | 
| 
      
 36 
     | 
    
         
            +
                #
         
     | 
| 
      
 37 
     | 
    
         
            +
                attr_accessor :access_token_key, :access_token_secret
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                ##
         
     | 
| 
      
 40 
     | 
    
         
            +
                # @return [Array(string, string)]
         
     | 
| 
      
 41 
     | 
    
         
            +
                # @private
         
     | 
| 
      
 42 
     | 
    
         
            +
                #
         
     | 
| 
      
 43 
     | 
    
         
            +
                def access_token
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if access_token_key and access_token_secret
         
     | 
| 
      
 45 
     | 
    
         
            +
                    [access_token_key, access_token_secret]
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                ##
         
     | 
| 
      
 50 
     | 
    
         
            +
                # Time to wait for the connection to Flickr to open. After that
         
     | 
| 
      
 51 
     | 
    
         
            +
                # {Flickr::TimeoutError} is thrown.
         
     | 
| 
      
 52 
     | 
    
         
            +
                #
         
     | 
| 
      
 53 
     | 
    
         
            +
                # Default is `5` seconds.
         
     | 
| 
      
 54 
     | 
    
         
            +
                #
         
     | 
| 
       9 
55 
     | 
    
         
             
                attr_accessor :open_timeout
         
     | 
| 
      
 56 
     | 
    
         
            +
                ##
         
     | 
| 
      
 57 
     | 
    
         
            +
                # Time to wait for the first block of response from Flickr. After that
         
     | 
| 
      
 58 
     | 
    
         
            +
                # {Flickr::TimeoutError} is thrown.
         
     | 
| 
      
 59 
     | 
    
         
            +
                #
         
     | 
| 
      
 60 
     | 
    
         
            +
                # Default is `10` seconds.
         
     | 
| 
      
 61 
     | 
    
         
            +
                #
         
     | 
| 
       10 
62 
     | 
    
         
             
                attr_accessor :timeout
         
     | 
| 
       11 
63 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
      
 64 
     | 
    
         
            +
                ##
         
     | 
| 
      
 65 
     | 
    
         
            +
                # You can choose to make requests over a secure connection (SSL).
         
     | 
| 
      
 66 
     | 
    
         
            +
                #
         
     | 
| 
      
 67 
     | 
    
         
            +
                #     config.use_ssl = true
         
     | 
| 
      
 68 
     | 
    
         
            +
                #
         
     | 
| 
      
 69 
     | 
    
         
            +
                # Default is `false`.
         
     | 
| 
      
 70 
     | 
    
         
            +
                #
         
     | 
| 
      
 71 
     | 
    
         
            +
                attr_accessor :use_ssl
         
     | 
| 
      
 72 
     | 
    
         
            +
                alias secure= use_ssl=
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                ##
         
     | 
| 
      
 75 
     | 
    
         
            +
                # You can choose to go over a proxy.
         
     | 
| 
      
 76 
     | 
    
         
            +
                #
         
     | 
| 
      
 77 
     | 
    
         
            +
                #     config.proxy = "http://proxy.com"
         
     | 
| 
      
 78 
     | 
    
         
            +
                #
         
     | 
| 
       13 
79 
     | 
    
         
             
                attr_accessor :proxy
         
     | 
| 
       14 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                ##
         
     | 
| 
      
 82 
     | 
    
         
            +
                # When retrieving photos from Flickr, you can enable automatic compatibility
         
     | 
| 
      
 83 
     | 
    
         
            +
                # with a pagination library.
         
     | 
| 
      
 84 
     | 
    
         
            +
                #
         
     | 
| 
      
 85 
     | 
    
         
            +
                #     config.pagination = :will_paginate
         
     | 
| 
      
 86 
     | 
    
         
            +
                #
         
     | 
| 
      
 87 
     | 
    
         
            +
                # Supports [WillPaginate][will_paginate] and [Kaminari][kaminari].
         
     | 
| 
      
 88 
     | 
    
         
            +
                #
         
     | 
| 
      
 89 
     | 
    
         
            +
                # [will_paginate]: https://github.com/mislav/will_paginate
         
     | 
| 
      
 90 
     | 
    
         
            +
                # [kaminari]: https://github.com/amatsuda/kaminari
         
     | 
| 
      
 91 
     | 
    
         
            +
                #
         
     | 
| 
       15 
92 
     | 
    
         
             
                attr_accessor :pagination
         
     | 
| 
       16 
93 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                def fetch(*attributes)
         
     | 
| 
       18 
     | 
    
         
            -
                  attributes.map { |attribute| send(attribute) }
         
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                def access_token
         
     | 
| 
       22 
     | 
    
         
            -
                  [access_token_key, access_token_secret]
         
     | 
| 
       23 
     | 
    
         
            -
                end
         
     | 
| 
       24 
94 
     | 
    
         
             
              end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
       25 
96 
     | 
    
         
             
            end
         
     | 
    
        data/lib/flickr/error.rb
    ADDED
    
    | 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Flickr
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              class Error < StandardError
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ##
         
     | 
| 
      
 7 
     | 
    
         
            +
              # This error is raised when there is an OAuth error (for example when the
         
     | 
| 
      
 8 
     | 
    
         
            +
              # access token is missing on requests which require authentication).
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              class OAuthError < Error
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              ##
         
     | 
| 
      
 14 
     | 
    
         
            +
              # This error is raised when there is an error in the request.
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              # @see #code
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
      
 18 
     | 
    
         
            +
              class ApiError < Error
         
     | 
| 
      
 19 
     | 
    
         
            +
                ##
         
     | 
| 
      
 20 
     | 
    
         
            +
                # Flickr's code of the error. The list possible errors and their codes is
         
     | 
| 
      
 21 
     | 
    
         
            +
                # shown below every API method on {http://flickr.com/services/api}.
         
     | 
| 
      
 22 
     | 
    
         
            +
                # For example:
         
     | 
| 
      
 23 
     | 
    
         
            +
                #
         
     | 
| 
      
 24 
     | 
    
         
            +
                #   - 100: There is no API key
         
     | 
| 
      
 25 
     | 
    
         
            +
                #   - 105: Service currently unavailable
         
     | 
| 
      
 26 
     | 
    
         
            +
                #   - ...
         
     | 
| 
      
 27 
     | 
    
         
            +
                #
         
     | 
| 
      
 28 
     | 
    
         
            +
                # @example
         
     | 
| 
      
 29 
     | 
    
         
            +
                #   begin
         
     | 
| 
      
 30 
     | 
    
         
            +
                #     Flickr.photos.get_recent
         
     | 
| 
      
 31 
     | 
    
         
            +
                #   rescue Flickr::ApiError => error
         
     | 
| 
      
 32 
     | 
    
         
            +
                #     puts "There is no API key" if error.code == 100
         
     | 
| 
      
 33 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 34 
     | 
    
         
            +
                # @return [Integer]
         
     | 
| 
      
 35 
     | 
    
         
            +
                #
         
     | 
| 
      
 36 
     | 
    
         
            +
                attr_reader :code
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                ##
         
     | 
| 
      
 39 
     | 
    
         
            +
                # @private
         
     | 
| 
      
 40 
     | 
    
         
            +
                #
         
     | 
| 
      
 41 
     | 
    
         
            +
                def initialize(message, code = nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  super(message)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @code = code.to_i
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                def message
         
     | 
| 
      
 47 
     | 
    
         
            +
                  "#{code}: #{super}"
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              ##
         
     | 
| 
      
 52 
     | 
    
         
            +
              # @see Flickr::Configuration#open_timeout
         
     | 
| 
      
 53 
     | 
    
         
            +
              # @see Flickr::Configuration#timeout
         
     | 
| 
      
 54 
     | 
    
         
            +
              #
         
     | 
| 
      
 55 
     | 
    
         
            +
              class TimeoutError < Error
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     |