flickr-objects 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +55 -85
- data/lib/flickr/api/api_methods/flickr.rb +0 -1
- data/lib/flickr/api/api_methods/person.rb +3 -3
- data/lib/flickr/api/api_methods/photo.rb +12 -1
- data/lib/flickr/api/api_methods/set.rb +6 -5
- data/lib/flickr/api/flickr.rb +9 -9
- data/lib/flickr/api/person.rb +13 -29
- data/lib/flickr/api/photo.rb +51 -4
- data/lib/flickr/api/set.rb +20 -25
- data/lib/flickr/api/upload_ticket.rb +4 -2
- data/lib/flickr/api.rb +0 -2
- data/lib/flickr/api_caller.rb +5 -11
- data/lib/flickr/client/upload_client.rb +4 -16
- data/lib/flickr/client.rb +1 -1
- data/lib/flickr/configuration.rb +2 -0
- data/lib/flickr/errors.rb +19 -0
- data/lib/flickr/middleware.rb +63 -0
- data/lib/flickr/oauth.rb +109 -0
- data/lib/flickr/object/attribute/finder.rb +2 -2
- data/lib/flickr/object/attribute.rb +8 -8
- data/lib/flickr/object.rb +13 -2
- data/lib/flickr/objects/attribute_values/{collection.rb → list.rb} +1 -1
- data/lib/flickr/objects/attribute_values/photo.rb +81 -16
- data/lib/flickr/objects/attribute_values/set.rb +1 -5
- data/lib/flickr/objects/attribute_values/upload_ticket.rb +3 -5
- data/lib/flickr/objects/list.rb +86 -0
- data/lib/flickr/objects/location.rb +2 -0
- data/lib/flickr/objects/note.rb +3 -1
- data/lib/flickr/objects/permissions.rb +2 -0
- data/lib/flickr/objects/person.rb +8 -5
- data/lib/flickr/objects/photo.rb +98 -30
- data/lib/flickr/objects/set.rb +4 -5
- data/lib/flickr/objects/tag.rb +2 -0
- data/lib/flickr/objects/upload_ticket.rb +8 -6
- data/lib/flickr/objects/visibility.rb +2 -0
- data/lib/flickr/objects.rb +2 -7
- data/lib/flickr/version.rb +1 -1
- data/lib/flickr.rb +5 -0
- metadata +60 -32
- data/lib/flickr/api/api_methods/collection.rb +0 -4
- data/lib/flickr/api/api_methods/location.rb +0 -4
- data/lib/flickr/api/api_methods/media.rb +0 -14
- data/lib/flickr/api/api_methods/note.rb +0 -4
- data/lib/flickr/api/api_methods/permissions.rb +0 -4
- data/lib/flickr/api/api_methods/tag.rb +0 -4
- data/lib/flickr/api/api_methods/video.rb +0 -4
- data/lib/flickr/api/api_methods/visibility.rb +0 -4
- data/lib/flickr/api/collection.rb +0 -4
- data/lib/flickr/api/location.rb +0 -4
- data/lib/flickr/api/media.rb +0 -52
- data/lib/flickr/api/note.rb +0 -4
- data/lib/flickr/api/permissions.rb +0 -4
- data/lib/flickr/api/tag.rb +0 -4
- data/lib/flickr/api/video.rb +0 -11
- data/lib/flickr/api/visibility.rb +0 -4
- data/lib/flickr/client/middleware/retry.rb +0 -29
- data/lib/flickr/client/middleware.rb +0 -42
- data/lib/flickr/helpers/inheritable_attr_accessor.rb +0 -18
- data/lib/flickr/objects/attribute_values/media.rb +0 -70
- data/lib/flickr/objects/attribute_values/video.rb +0 -27
- data/lib/flickr/objects/collection.rb +0 -56
- data/lib/flickr/objects/media.rb +0 -72
- data/lib/flickr/objects/video.rb +0 -21
@@ -1,42 +0,0 @@
|
|
1
|
-
require "cgi"
|
2
|
-
require "flickr/client/middleware/retry"
|
3
|
-
|
4
|
-
class Flickr
|
5
|
-
class Client < Faraday::Connection
|
6
|
-
module Middleware
|
7
|
-
class CheckOAuth < Faraday::Response::Middleware
|
8
|
-
def on_complete(env)
|
9
|
-
if env[:status] != 200
|
10
|
-
message = CGI.parse(env[:body])["oauth_problem"].first
|
11
|
-
pretty_message = message.gsub('_', ' ').capitalize
|
12
|
-
raise OAuthError, pretty_message
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class CheckStatus < Faraday::Response::Middleware
|
18
|
-
def on_complete(env)
|
19
|
-
env[:body] = env[:body]["rsp"] || env[:body]
|
20
|
-
|
21
|
-
if env[:body]["stat"] != "ok"
|
22
|
-
message = env[:body]["message"] || env[:body]["err"]["msg"]
|
23
|
-
code = env[:body]["code"] || env[:body]["err"]["code"]
|
24
|
-
raise Error.new(message, code)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class OAuthError < ArgumentError
|
31
|
-
end
|
32
|
-
|
33
|
-
class Error < StandardError
|
34
|
-
attr_reader :code
|
35
|
-
|
36
|
-
def initialize(message, code = nil)
|
37
|
-
super(message)
|
38
|
-
@code = code.to_i
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
class Flickr
|
2
|
-
module InheritableAttrAccessor
|
3
|
-
def inheritable_attr_accessor(*names)
|
4
|
-
names.each do |name|
|
5
|
-
attr_reader name
|
6
|
-
|
7
|
-
define_method("#{name}=") do |value|
|
8
|
-
instance_variable_set("@#{name}", value)
|
9
|
-
if respond_to?(:children)
|
10
|
-
children.each do |child|
|
11
|
-
child.send("#{name}=", send(name))
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
class Flickr
|
2
|
-
class Media < Object
|
3
|
-
self.attribute_values = {
|
4
|
-
uploaded_at: [->{ @hash["dateuploaded"] }, ->{ @hash["dateupload"] }],
|
5
|
-
favorite?: [->{ @hash["isfavorite"] }],
|
6
|
-
posted_at: [->{ @hash["dates"]["posted"] }],
|
7
|
-
taken_at: [->{ @hash["dates"]["taken"] }, ->{ @hash["datetaken"] }],
|
8
|
-
taken_at_granularity: [->{ @hash["dates"]["takengranularity"] }, ->{ @hash["datetakengranularity"] }],
|
9
|
-
updated_at: [->{ @hash["dates"]["lastupdate"] }, ->{ @hash["lastupdate"] }],
|
10
|
-
views_count: [->{ @hash["views"] }],
|
11
|
-
public_editability: [->{ @hash["publiceditability"] }],
|
12
|
-
comments_count: [->{ @hash["comments"]["_content"] }],
|
13
|
-
has_people?: [->{ @hash["people"]["haspeople"] }],
|
14
|
-
notes: [->{ @hash["notes"]["note"] }],
|
15
|
-
tags: [
|
16
|
-
->{ @hash["tags"]["tag"].map { |h| h.merge("photo_id" => @hash["id"]) } },
|
17
|
-
->{
|
18
|
-
[
|
19
|
-
*@hash["tags"].split(" ").map {|content| {"_content" => content, "machine_tag" => 0} },
|
20
|
-
*@hash["machine_tags"].split(" ").map {|content| {"_content" => content, "machine_tag" => 1} }
|
21
|
-
]
|
22
|
-
}
|
23
|
-
],
|
24
|
-
visibility: [->{ @hash["visibility"] }, ->{ @hash.slice("ispublic", "isfriend", "isfamily") if @hash["ispublic"] }],
|
25
|
-
title: [->{ @hash["title"]["_content"] }],
|
26
|
-
description: [->{ @hash["description"]["_content"] }],
|
27
|
-
owner: [
|
28
|
-
->{
|
29
|
-
if @hash["owner"].is_a?(String)
|
30
|
-
{
|
31
|
-
"id" => @hash["owner"],
|
32
|
-
"username" => @hash["ownername"],
|
33
|
-
"iconserver" => @hash["iconserver"],
|
34
|
-
"iconfarm" => @hash["iconfarm"],
|
35
|
-
}
|
36
|
-
end
|
37
|
-
}
|
38
|
-
],
|
39
|
-
path_alias: [->{ @hash["pathalias"] }],
|
40
|
-
location_visibility: [
|
41
|
-
->{ @hash["geoperms"] },
|
42
|
-
->{
|
43
|
-
{
|
44
|
-
"isfamily" => @hash.fetch("geo_is_family"),
|
45
|
-
"isfriend" => @hash.fetch("geo_is_friend"),
|
46
|
-
"iscontact" => @hash.fetch("geo_is_contact"),
|
47
|
-
"ispublic" => @hash.fetch("geo_is_public")
|
48
|
-
}
|
49
|
-
}
|
50
|
-
],
|
51
|
-
location: [->{ @hash.slice("latitude", "longitude", "accuracy", "context", "place_id", "woeid") if @hash["latitude"] }],
|
52
|
-
largest_size: [->{ SIZES.key(SIZES.values.reverse.find { |abbr| @hash["url_#{abbr}"] }) }],
|
53
|
-
}
|
54
|
-
|
55
|
-
OTHER_SIZES = {
|
56
|
-
"Square 75" => "Square",
|
57
|
-
"Thumbnail" => "Thumbnail",
|
58
|
-
"Square 150" => "Large Square",
|
59
|
-
"Small 240" => "Small",
|
60
|
-
"Small 320" => "Small 320",
|
61
|
-
"Medium 500" => "Medium",
|
62
|
-
"Medium 640" => "Medium 640",
|
63
|
-
"Medium 800" => "Medium 800",
|
64
|
-
"Large 1024" => "Large",
|
65
|
-
"Large 1600" => "Large 1600",
|
66
|
-
"Large 2048" => "Large 2048",
|
67
|
-
"Original" => "Original"
|
68
|
-
}
|
69
|
-
end
|
70
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class Flickr
|
2
|
-
class Video < Media
|
3
|
-
self.attribute_values = attribute_values.merge(
|
4
|
-
ready?: [->{ @hash["video"]["ready"] }],
|
5
|
-
failed?: [->{ @hash["video"]["failed"] }],
|
6
|
-
pending?: [->{ @hash["video"]["pending"] }],
|
7
|
-
duration: [->{ @hash["video"]["duration"] }],
|
8
|
-
width: [->{ @hash["video"]["width"] }],
|
9
|
-
height: [->{ @hash["video"]["height"] }],
|
10
|
-
thumbnail_url: [
|
11
|
-
->(size){ @hash["url_#{SIZES[size]}"] },
|
12
|
-
->(size){ @hash["size"].find { |hash| hash["label"] == OTHER_SIZES[size] }["source"] }
|
13
|
-
],
|
14
|
-
thumbnail_width: [
|
15
|
-
->(size){ @hash["width_#{SIZES[size]}"] },
|
16
|
-
->(size){ @hash["size"].find { |hash| hash["label"] == OTHER_SIZES[size] }["width"] }
|
17
|
-
],
|
18
|
-
thumbnail_height: [
|
19
|
-
->(size){ @hash["height_#{SIZES[size]}"] },
|
20
|
-
->(size){ @hash["size"].find { |hash| hash["label"] == OTHER_SIZES[size] }["height"] }
|
21
|
-
],
|
22
|
-
source_url: [->{ @hash["size"].find { |hash| hash["label"] == "Video Player" }["source"] }],
|
23
|
-
download_url: [->{ @hash["size"].find { |hash| hash["label"] == "Site MP4" }["source"] }],
|
24
|
-
mobile_download_url: [->{ @hash["size"].find { |hash| hash["label"] == "Mobile MP4" }["source"] }],
|
25
|
-
)
|
26
|
-
end
|
27
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
class Flickr
|
2
|
-
class Collection < Object
|
3
|
-
include Enumerable
|
4
|
-
|
5
|
-
attribute :current_page, Integer
|
6
|
-
attribute :per_page, Integer
|
7
|
-
attribute :total_pages, Integer
|
8
|
-
attribute :total_entries, Integer
|
9
|
-
|
10
|
-
def initialize(collection, klass, hash, client)
|
11
|
-
unless klass == Media
|
12
|
-
objects = collection.map! do |hash|
|
13
|
-
klass.new(hash, client)
|
14
|
-
end
|
15
|
-
else
|
16
|
-
objects = collection.map! do |hash|
|
17
|
-
klass = Flickr.const_get(hash["media"].capitalize)
|
18
|
-
klass.new(hash, client)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
@hash = hash
|
23
|
-
@objects = objects
|
24
|
-
end
|
25
|
-
|
26
|
-
def find(id = nil)
|
27
|
-
if block_given?
|
28
|
-
super
|
29
|
-
else
|
30
|
-
if id.is_a?(Array)
|
31
|
-
ids = id.map(&:to_s)
|
32
|
-
select { |object| ids.include?(object.id) }
|
33
|
-
else
|
34
|
-
super() { |object| object.id == id.to_s }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def each(&block)
|
40
|
-
@objects.each(&block)
|
41
|
-
end
|
42
|
-
|
43
|
-
def empty?
|
44
|
-
@objects.empty?
|
45
|
-
end
|
46
|
-
|
47
|
-
def select!(*args, &block)
|
48
|
-
@objects.select!(*args, &block)
|
49
|
-
self
|
50
|
-
end
|
51
|
-
|
52
|
-
def select(*args, &block)
|
53
|
-
dup.select!(*args, &block)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/flickr/objects/media.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
require "flickr/helpers/base_58"
|
2
|
-
|
3
|
-
class Flickr
|
4
|
-
class Media < Object
|
5
|
-
include Base58
|
6
|
-
|
7
|
-
attribute :id, String
|
8
|
-
attribute :secret, String
|
9
|
-
attribute :server, String
|
10
|
-
attribute :farm, Integer
|
11
|
-
attribute :title, String
|
12
|
-
attribute :description, String
|
13
|
-
attribute :license, Integer
|
14
|
-
attribute :visibility, Visibility
|
15
|
-
attribute :safety_level, Integer
|
16
|
-
|
17
|
-
attribute :owner, Person
|
18
|
-
|
19
|
-
attribute :uploaded_at, Time
|
20
|
-
attribute :posted_at, Time
|
21
|
-
attribute :taken_at, Time
|
22
|
-
attribute :taken_at_granularity, Integer
|
23
|
-
attribute :updated_at, Time
|
24
|
-
|
25
|
-
attribute :views_count, Integer
|
26
|
-
attribute :comments_count, Integer
|
27
|
-
|
28
|
-
attribute :editability, Permissions
|
29
|
-
attribute :public_editability, Permissions
|
30
|
-
attribute :usage, Permissions
|
31
|
-
|
32
|
-
attribute :notes, Array(Note)
|
33
|
-
attribute :tags, Array(Tag)
|
34
|
-
|
35
|
-
attribute :has_people?, Boolean
|
36
|
-
attribute :favorite?, Boolean
|
37
|
-
|
38
|
-
attribute :path_alias
|
39
|
-
|
40
|
-
attribute :location, Location
|
41
|
-
attribute :location_visibility, Visibility
|
42
|
-
|
43
|
-
attribute :largest_size, String
|
44
|
-
|
45
|
-
SIZES = {
|
46
|
-
"Square 75" => "sq",
|
47
|
-
"Thumbnail" => "t",
|
48
|
-
"Square 150" => "q",
|
49
|
-
"Small 240" => "s",
|
50
|
-
"Small 320" => "n",
|
51
|
-
"Medium 500" => "m",
|
52
|
-
"Medium 640" => "z",
|
53
|
-
"Medium 800" => "c",
|
54
|
-
"Large 1024" => "l",
|
55
|
-
"Large 1600" => "h",
|
56
|
-
"Large 2048" => "k",
|
57
|
-
"Original" => "o"
|
58
|
-
}
|
59
|
-
|
60
|
-
def safe?; safety_level <= 1 end
|
61
|
-
def moderate?; safety_level == 2 end
|
62
|
-
def restricted?; safety_level == 3 end
|
63
|
-
|
64
|
-
def url
|
65
|
-
"http://www.flickr.com/photos/#{owner.id}/#{id}/" if owner
|
66
|
-
end
|
67
|
-
|
68
|
-
def short_url
|
69
|
-
"http://flic.kr/p/#{to_base58(id)}"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/lib/flickr/objects/video.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
class Flickr
|
2
|
-
class Video < Media
|
3
|
-
|
4
|
-
attribute :ready?, Boolean
|
5
|
-
attribute :failed?, Boolean
|
6
|
-
attribute :pending?, Boolean
|
7
|
-
|
8
|
-
attribute :duration, Integer
|
9
|
-
attribute :width, Integer
|
10
|
-
attribute :height, Integer
|
11
|
-
|
12
|
-
attribute :thumbnail_url, String
|
13
|
-
attribute :thumbnail_width, Integer
|
14
|
-
attribute :thumbnail_height, Integer
|
15
|
-
|
16
|
-
attribute :source_url, String
|
17
|
-
attribute :download_url, String
|
18
|
-
attribute :mobile_download_url, String
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|