flickr-objects 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,164 @@
|
|
1
|
+
require "flickr/base_converter"
|
2
|
+
|
3
|
+
module Flickr
|
4
|
+
class Object
|
5
|
+
|
6
|
+
class Photo
|
7
|
+
|
8
|
+
attributes.add_locations(
|
9
|
+
uploaded_at: [
|
10
|
+
-> { @attributes["dateuploaded"] },
|
11
|
+
-> { @attributes["dateupload"] },
|
12
|
+
],
|
13
|
+
favorite: [
|
14
|
+
-> { @attributes["isfavorite"] },
|
15
|
+
],
|
16
|
+
posted_at: [
|
17
|
+
-> { @attributes["dates"]["posted"] },
|
18
|
+
],
|
19
|
+
taken_at: [
|
20
|
+
-> { @attributes["dates"]["taken"] },
|
21
|
+
-> { @attributes["datetaken"] }
|
22
|
+
],
|
23
|
+
taken_at_granularity: [
|
24
|
+
-> { @attributes["dates"]["takengranularity"] },
|
25
|
+
-> { @attributes["datetakengranularity"] },
|
26
|
+
],
|
27
|
+
updated_at: [
|
28
|
+
-> { @attributes["dates"]["lastupdate"] },
|
29
|
+
-> { @attributes["lastupdate"] },
|
30
|
+
],
|
31
|
+
views_count: [
|
32
|
+
-> { @attributes["views"] },
|
33
|
+
],
|
34
|
+
public_editability: [
|
35
|
+
-> { @attributes["publiceditability"] },
|
36
|
+
],
|
37
|
+
comments_count: [
|
38
|
+
-> { @attributes["comments"]["_content"] },
|
39
|
+
],
|
40
|
+
has_people: [
|
41
|
+
-> { @attributes["people"]["haspeople"] },
|
42
|
+
],
|
43
|
+
safe: [
|
44
|
+
-> { safety_level <= 1 },
|
45
|
+
],
|
46
|
+
moderate: [
|
47
|
+
-> { safety_level == 2 },
|
48
|
+
],
|
49
|
+
restricted: [
|
50
|
+
-> { safety_level == 3 },
|
51
|
+
],
|
52
|
+
notes: [
|
53
|
+
-> { @attributes["notes"]["note"] },
|
54
|
+
],
|
55
|
+
tags: [
|
56
|
+
-> {
|
57
|
+
@attributes["tags"]["tag"].map do |hash|
|
58
|
+
hash.merge("photo_id" => id)
|
59
|
+
end
|
60
|
+
},
|
61
|
+
-> {
|
62
|
+
tags = @attributes["tags"].split(" ").map do |content|
|
63
|
+
{"_content" => content, "machine_tag" => 0}
|
64
|
+
end
|
65
|
+
machine_tags = @attributes["machine_tags"].split(" ").map do |content|
|
66
|
+
{"_content" => content, "machine_tag" => 1}
|
67
|
+
end
|
68
|
+
|
69
|
+
tags + machine_tags
|
70
|
+
},
|
71
|
+
],
|
72
|
+
visibility: [
|
73
|
+
-> {
|
74
|
+
{
|
75
|
+
"ispublic" => @attributes.fetch("ispublic"),
|
76
|
+
"isfriend" => @attributes.fetch("isfriend"),
|
77
|
+
"isfamily" => @attributes.fetch("isfamily"),
|
78
|
+
}
|
79
|
+
}
|
80
|
+
],
|
81
|
+
title: [
|
82
|
+
-> { @attributes["title"]["_content"] },
|
83
|
+
],
|
84
|
+
description: [
|
85
|
+
-> { @attributes["description"]["_content"] },
|
86
|
+
],
|
87
|
+
owner: [
|
88
|
+
-> {
|
89
|
+
if @attributes["owner"].is_a?(String)
|
90
|
+
{
|
91
|
+
"nsid" => @attributes["owner"],
|
92
|
+
"username" => @attributes["ownername"] || @attributes["username"],
|
93
|
+
"iconserver" => @attributes["iconserver"],
|
94
|
+
"iconfarm" => @attributes["iconfarm"],
|
95
|
+
}
|
96
|
+
end
|
97
|
+
},
|
98
|
+
],
|
99
|
+
path_alias: [
|
100
|
+
-> { @attributes["pathalias"] },
|
101
|
+
],
|
102
|
+
location_visibility: [
|
103
|
+
-> { @attributes["geoperms"] },
|
104
|
+
-> {
|
105
|
+
{
|
106
|
+
"isfamily" => @attributes.fetch("geo_is_family"),
|
107
|
+
"isfriend" => @attributes.fetch("geo_is_friend"),
|
108
|
+
"iscontact" => @attributes.fetch("geo_is_contact"),
|
109
|
+
"ispublic" => @attributes.fetch("geo_is_public"),
|
110
|
+
}
|
111
|
+
}
|
112
|
+
],
|
113
|
+
location: [
|
114
|
+
-> {
|
115
|
+
{
|
116
|
+
"latitude" => @attributes.fetch("latitude"),
|
117
|
+
"longitude" => @attributes.fetch("longitude"),
|
118
|
+
"accuracy" => @attributes["accuracy"],
|
119
|
+
"context" => @attributes["context"],
|
120
|
+
"place_id" => @attributes["place_id"],
|
121
|
+
"woeid" => @attributes["woeid"],
|
122
|
+
}
|
123
|
+
},
|
124
|
+
],
|
125
|
+
available_sizes: [
|
126
|
+
-> {
|
127
|
+
sizes = Size.all.select do |size|
|
128
|
+
@attributes["url_#{size.abbreviation}"] or
|
129
|
+
@attributes["sizes"] && @attributes["sizes"]["size"].find { |h| h["label"] == size.label }
|
130
|
+
end
|
131
|
+
|
132
|
+
sizes.map(&:name)
|
133
|
+
},
|
134
|
+
],
|
135
|
+
largest_size: [
|
136
|
+
-> { available_sizes.last },
|
137
|
+
],
|
138
|
+
rotation: [
|
139
|
+
-> { @attributes["rotation"] },
|
140
|
+
],
|
141
|
+
source_url: [
|
142
|
+
-> { @attributes["url_#{@size.abbreviation}"] },
|
143
|
+
-> { @attributes["sizes"]["size"].find { |hash| hash["label"] == @size.label }["source"] }
|
144
|
+
],
|
145
|
+
height: [
|
146
|
+
-> { @attributes["height_#{@size.abbreviation}"] },
|
147
|
+
-> { @attributes["sizes"]["size"].find { |hash| hash["label"] == @size.label }["height"] }
|
148
|
+
],
|
149
|
+
width: [
|
150
|
+
-> { @attributes["width_#{@size.abbreviation}"] },
|
151
|
+
-> { @attributes["sizes"]["size"].find { |hash| hash["label"] == @size.label }["width"] }
|
152
|
+
],
|
153
|
+
url: [
|
154
|
+
-> { "http://www.flickr.com/photos/#{owner.id}/#{id}" if owner.id && id },
|
155
|
+
],
|
156
|
+
short_url: [
|
157
|
+
-> { "http://flic.kr/p/#{BaseConverter.to_base58(id)}" if id },
|
158
|
+
],
|
159
|
+
)
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class Set
|
5
|
+
|
6
|
+
attributes.add_locations(
|
7
|
+
owner: [
|
8
|
+
-> {
|
9
|
+
if @attributes["owner"]
|
10
|
+
{
|
11
|
+
"id" => @attributes["owner"],
|
12
|
+
"username" => @attributes["username"],
|
13
|
+
}
|
14
|
+
end
|
15
|
+
},
|
16
|
+
],
|
17
|
+
url: [
|
18
|
+
-> { "http://www.flickr.com/photos/#{owner.id}/sets/#{id}" },
|
19
|
+
],
|
20
|
+
photos_count: [
|
21
|
+
-> { @attributes["photos"] },
|
22
|
+
-> { @attributes["count_photos"] },
|
23
|
+
],
|
24
|
+
views_count: [
|
25
|
+
-> { @attributes["count_views"] },
|
26
|
+
],
|
27
|
+
comments_count: [
|
28
|
+
-> { @attributes["count_comments"] },
|
29
|
+
],
|
30
|
+
title: [
|
31
|
+
-> { @attributes["title"]["_content"] },
|
32
|
+
],
|
33
|
+
description: [
|
34
|
+
-> { @attributes["description"]["_content"] },
|
35
|
+
],
|
36
|
+
permissions: [
|
37
|
+
-> { {"can_comment" => @attributes["can_comment"]} },
|
38
|
+
],
|
39
|
+
created_at: [
|
40
|
+
-> { @attributes["date_create"] },
|
41
|
+
],
|
42
|
+
updated_at: [
|
43
|
+
-> { @attributes["date_update"] },
|
44
|
+
],
|
45
|
+
primary_photo: [
|
46
|
+
-> { {"id" => @attributes.fetch("primary")} },
|
47
|
+
],
|
48
|
+
)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class UploadTicket
|
5
|
+
|
6
|
+
attributes.add_locations(
|
7
|
+
status: [
|
8
|
+
-> { @attributes["complete"] },
|
9
|
+
],
|
10
|
+
complete: [
|
11
|
+
-> { status == 1 },
|
12
|
+
],
|
13
|
+
failed: [
|
14
|
+
-> { status == 2 },
|
15
|
+
],
|
16
|
+
invalid: [
|
17
|
+
-> { @attributes["invalid"] || 0},
|
18
|
+
],
|
19
|
+
valid: [
|
20
|
+
-> { not invalid? },
|
21
|
+
],
|
22
|
+
photo: [
|
23
|
+
-> { {"id" => @attributes.fetch("photoid")} },
|
24
|
+
],
|
25
|
+
)
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class Visibility
|
5
|
+
|
6
|
+
attributes.add_locations(
|
7
|
+
public: [
|
8
|
+
-> { @attributes["ispublic"] },
|
9
|
+
],
|
10
|
+
friends: [
|
11
|
+
-> { @attributes["isfriend"] },
|
12
|
+
],
|
13
|
+
family: [
|
14
|
+
-> { @attributes["isfamily"] },
|
15
|
+
],
|
16
|
+
contacts: [
|
17
|
+
-> { @attributes["iscontact"] },
|
18
|
+
],
|
19
|
+
)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "kaminari"
|
2
|
+
require "kaminari/models/array_extension"
|
3
|
+
|
4
|
+
module Flickr
|
5
|
+
class Object
|
6
|
+
|
7
|
+
class List < Kaminari::PaginatableArray
|
8
|
+
|
9
|
+
##
|
10
|
+
# @private
|
11
|
+
#
|
12
|
+
def initialize(attributes)
|
13
|
+
raise ArgumentError, "attributes should not be nil" if attributes.nil?
|
14
|
+
|
15
|
+
@attributes = attributes
|
16
|
+
super([], offset: current_page, limit: per_page, total_count: total_entries)
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# @private
|
21
|
+
#
|
22
|
+
def populate(objects)
|
23
|
+
replace(objects)
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class List < Array
|
5
|
+
|
6
|
+
##
|
7
|
+
# @private
|
8
|
+
#
|
9
|
+
def initialize(attributes)
|
10
|
+
raise ArgumentError, "attributes should not be nil" if attributes.nil?
|
11
|
+
|
12
|
+
@attributes = attributes
|
13
|
+
super()
|
14
|
+
end
|
15
|
+
|
16
|
+
##
|
17
|
+
# @private
|
18
|
+
#
|
19
|
+
def populate(objects)
|
20
|
+
replace(objects)
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "will_paginate/collection"
|
2
|
+
|
3
|
+
module Flickr
|
4
|
+
class Object
|
5
|
+
|
6
|
+
class List < WillPaginate::Collection
|
7
|
+
|
8
|
+
##
|
9
|
+
# @private
|
10
|
+
#
|
11
|
+
def initialize(attributes)
|
12
|
+
raise ArgumentError, "attributes should not be nil" if attributes.nil?
|
13
|
+
|
14
|
+
@attributes = attributes
|
15
|
+
@attributes = {"page" => 1, "per_page" => 1, "total" => 1} if @attributes.empty?
|
16
|
+
|
17
|
+
super(current_page, per_page, total_entries)
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# @private
|
22
|
+
#
|
23
|
+
def populate(objects)
|
24
|
+
replace(objects)
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "flickr/object/list/#{Flickr.pagination || "normal"}"
|
2
|
+
require "flickr/attributes"
|
3
|
+
|
4
|
+
module Flickr
|
5
|
+
class Object
|
6
|
+
|
7
|
+
##
|
8
|
+
# Flickr offers pagination when returning collection responses, so this
|
9
|
+
# class encapsulates this data, and also provides useful finder methods,
|
10
|
+
# similar to ActiveRecord's.
|
11
|
+
#
|
12
|
+
class List
|
13
|
+
|
14
|
+
extend Flickr::Attributes
|
15
|
+
|
16
|
+
attribute :current_page, Integer
|
17
|
+
attribute :per_page, Integer
|
18
|
+
attribute :total_pages, Integer
|
19
|
+
attribute :total_entries, Integer
|
20
|
+
|
21
|
+
##
|
22
|
+
# @see Flickr::Object#attributes
|
23
|
+
#
|
24
|
+
attr_reader :attributes
|
25
|
+
|
26
|
+
##
|
27
|
+
# If block is given, does a regular Enumerable#find, otherwise finds by
|
28
|
+
# ID(s).
|
29
|
+
#
|
30
|
+
# @param id_or_ids [String, Array<String>] ID(s) of the object(s) to find.
|
31
|
+
# @return [Flickr::Object, Array<Flickr::Object>, nil]
|
32
|
+
#
|
33
|
+
def find(id_or_ids = nil)
|
34
|
+
return super if block_given?
|
35
|
+
|
36
|
+
if id_or_ids.is_a?(Enumerable)
|
37
|
+
id_or_ids.map { |id| find(id) }
|
38
|
+
else
|
39
|
+
find_by(id: id_or_ids.to_s)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Finds by a hash of attributes. Supports nesting (see the example).
|
45
|
+
#
|
46
|
+
# @param attributes [Hash] Attributes by which to search.
|
47
|
+
# @return [Flickr::Object, nil]
|
48
|
+
# @example
|
49
|
+
# photos.find_by(id: "1", owner: {username: "janko"})
|
50
|
+
#
|
51
|
+
def find_by(attributes)
|
52
|
+
find { |object| object.matches?(attributes) }
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Filters by a hash of attributes. Supports nesting (see the example).
|
57
|
+
#
|
58
|
+
# @param attributes [Hash] Attributes by which to search
|
59
|
+
# @return [Array<Flickr::Object>]
|
60
|
+
# @example
|
61
|
+
# photos.filter(owner: {username: "janko"})
|
62
|
+
#
|
63
|
+
def filter(attributes)
|
64
|
+
select { |object| object.matches?(attributes) }
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# @deprecated It provides #find_by_<attribute> methods, but they are now
|
69
|
+
# deprecated in favor of the obviously superior {#find_by} (repeating
|
70
|
+
# ActiveRecord's mistake :P).
|
71
|
+
#
|
72
|
+
def method_missing(name, *args, &block)
|
73
|
+
if name.to_s =~ /find_by_\w+/
|
74
|
+
Flickr.deprecation_warn "#find_by_<attribute>(<value>) is deprecated; use #find_by(:<attribute> => <value>) instead"
|
75
|
+
attribute_name = name[/(?<=find_by_)\w+/]
|
76
|
+
find { |object| object.send(attribute_name) == args.first }
|
77
|
+
else
|
78
|
+
super
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
require_relative "attribute_locations/list"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class Location < Flickr::Object
|
5
|
+
|
6
|
+
class Area < Flickr::Object
|
7
|
+
|
8
|
+
attribute :name, String
|
9
|
+
attribute :place_id, String
|
10
|
+
attribute :woe_id, String
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
attribute :latitude, Float
|
15
|
+
attribute :longitude, Float
|
16
|
+
attribute :accuracy, Integer
|
17
|
+
attribute :context, Integer
|
18
|
+
attribute :place_id, String
|
19
|
+
attribute :woe_id, String
|
20
|
+
|
21
|
+
attribute :indoors, Boolean
|
22
|
+
attribute :outdoors, Boolean
|
23
|
+
|
24
|
+
attribute :neighbourhood, Area
|
25
|
+
attribute :locality, Area
|
26
|
+
attribute :county, Area
|
27
|
+
attribute :region, Area
|
28
|
+
attribute :country, Area
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
require_relative "attribute_locations/location"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class Permissions < Flickr::Object
|
5
|
+
|
6
|
+
attribute :can_comment, Boolean
|
7
|
+
attribute :can_add_meta, Boolean
|
8
|
+
attribute :can_download, Boolean
|
9
|
+
attribute :can_blog, Boolean
|
10
|
+
attribute :can_print, Boolean
|
11
|
+
attribute :can_share, Boolean
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require_relative "attribute_locations/permissions"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
class Person
|
4
|
+
|
5
|
+
class UploadStatus < Flickr::Object
|
6
|
+
|
7
|
+
class Month < Object
|
8
|
+
attribute :maximum, Integer
|
9
|
+
attribute :used, Integer
|
10
|
+
attribute :remaining, Integer
|
11
|
+
end
|
12
|
+
|
13
|
+
attribute :current_month, Month
|
14
|
+
attribute :maximum_photo_size, Integer
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
require_relative "../attribute_locations/person/upload_status"
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
|
4
|
+
class Person < Flickr::Object
|
5
|
+
|
6
|
+
autoload_names :UploadStatus
|
7
|
+
|
8
|
+
attribute :id, String
|
9
|
+
attribute :nsid, String
|
10
|
+
attribute :username, String
|
11
|
+
attribute :real_name, String
|
12
|
+
attribute :location, String
|
13
|
+
attribute :time_zone, Hash
|
14
|
+
attribute :description, String
|
15
|
+
attribute :has_pro_account, Boolean
|
16
|
+
|
17
|
+
attribute :icon_server, Integer
|
18
|
+
attribute :icon_farm, Integer
|
19
|
+
attribute :buddy_icon_url, String
|
20
|
+
|
21
|
+
attribute :photos_url, String
|
22
|
+
attribute :profile_url, String
|
23
|
+
attribute :mobile_url, String
|
24
|
+
|
25
|
+
attribute :first_photo_taken, Time
|
26
|
+
attribute :first_photo_uploaded, Time
|
27
|
+
attribute :favorited_at, Time
|
28
|
+
|
29
|
+
attribute :photos_count, Integer
|
30
|
+
attribute :photo_views_count, Integer
|
31
|
+
|
32
|
+
attribute :path_alias, String
|
33
|
+
|
34
|
+
##
|
35
|
+
# @return [self]
|
36
|
+
# @see Flickr::Api::Person#get_info
|
37
|
+
#
|
38
|
+
def get_info!(params = {})
|
39
|
+
person = api.get_info(id, params)
|
40
|
+
update(person.attributes)
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# @return [Flickr::Object::List<Flickr::Object::Photo>]
|
45
|
+
# @see Flickr::Api::Person#get_photos
|
46
|
+
#
|
47
|
+
def get_photos(params = {})
|
48
|
+
api.get_photos(id, params)
|
49
|
+
end
|
50
|
+
alias photos get_photos
|
51
|
+
|
52
|
+
##
|
53
|
+
# @return [Flickr::Object::List<Flickr::Object::Photo>]
|
54
|
+
# @see Flickr::Api::Person#get_photos_of
|
55
|
+
#
|
56
|
+
def get_photos_of(params = {})
|
57
|
+
api.get_photos_of(id, params)
|
58
|
+
end
|
59
|
+
alias photos_of get_photos_of
|
60
|
+
|
61
|
+
##
|
62
|
+
# @return [Flickr::Object::List<Flickr::Object::Photo>]
|
63
|
+
# @see Flickr::Api::Person#get_public_photos
|
64
|
+
#
|
65
|
+
def get_public_photos(params = {})
|
66
|
+
api.get_public_photos(id, params)
|
67
|
+
end
|
68
|
+
alias public_photos get_public_photos
|
69
|
+
|
70
|
+
##
|
71
|
+
# @return [Flickr::Object::List<Flickr::Object::Photo>]
|
72
|
+
# @see Flickr::Api::Person#get_public_photos_from_contacts
|
73
|
+
#
|
74
|
+
def get_public_photos_from_contacts(params = {})
|
75
|
+
api.get_public_photos_from_contacts(id, params)
|
76
|
+
end
|
77
|
+
alias public_photos_from_contacts get_public_photos_from_contacts
|
78
|
+
|
79
|
+
##
|
80
|
+
# @return [Flickr::Object::List<Flickr::Object::Set>]
|
81
|
+
# @see Flickr::Api::Person#get_sets
|
82
|
+
#
|
83
|
+
def get_sets(params = {})
|
84
|
+
api.get_sets(id, params)
|
85
|
+
end
|
86
|
+
alias sets get_sets
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
require_relative "attribute_locations/person"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
class Photo
|
4
|
+
|
5
|
+
class Exif < Flickr::Object
|
6
|
+
|
7
|
+
class Item < Object
|
8
|
+
attribute :tagspace, String
|
9
|
+
attribute :tagspace_id, String
|
10
|
+
attribute :tag, String
|
11
|
+
attribute :label, String
|
12
|
+
attribute :raw, String
|
13
|
+
attribute :clean, String
|
14
|
+
end
|
15
|
+
|
16
|
+
attribute :items, List[Item]
|
17
|
+
|
18
|
+
##
|
19
|
+
# Fetches the item with the given label and grabs the value.
|
20
|
+
#
|
21
|
+
# @param label [String] Label of the exif data
|
22
|
+
# @return [String]
|
23
|
+
#
|
24
|
+
def [](label)
|
25
|
+
item = items.find { |item| item.label == label }
|
26
|
+
item.clean || item.raw
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
require_relative "../attribute_locations/photo/exif"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Flickr
|
2
|
+
class Object
|
3
|
+
class Photo
|
4
|
+
|
5
|
+
class Note < Flickr::Object
|
6
|
+
|
7
|
+
attribute :id, String
|
8
|
+
attribute :author, Person
|
9
|
+
attribute :coordinates, Array[Integer]
|
10
|
+
attribute :width, Integer
|
11
|
+
attribute :height, Integer
|
12
|
+
attribute :content, String
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require_relative "../attribute_locations/photo/note"
|