flickr-objects 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/LICENSE +22 -0
  2. data/README.md +95 -49
  3. data/lib/flickr/api/api_methods/collection.rb +4 -0
  4. data/lib/flickr/api/api_methods/flickr.rb +6 -0
  5. data/lib/flickr/api/api_methods/location.rb +4 -0
  6. data/lib/flickr/api/api_methods/media.rb +14 -0
  7. data/lib/flickr/api/api_methods/note.rb +4 -0
  8. data/lib/flickr/api/api_methods/permissions.rb +4 -0
  9. data/lib/flickr/api/api_methods/person.rb +12 -0
  10. data/lib/flickr/api/api_methods/photo.rb +4 -0
  11. data/lib/flickr/api/api_methods/set.rb +13 -0
  12. data/lib/flickr/api/api_methods/tag.rb +4 -0
  13. data/lib/flickr/api/api_methods/upload_ticket.rb +5 -0
  14. data/lib/flickr/api/api_methods/video.rb +4 -0
  15. data/lib/flickr/api/api_methods/visibility.rb +4 -0
  16. data/lib/flickr/api/collection.rb +4 -0
  17. data/lib/flickr/api/flickr.rb +2 -7
  18. data/lib/flickr/api/location.rb +4 -0
  19. data/lib/flickr/api/media.rb +0 -11
  20. data/lib/flickr/api/note.rb +4 -0
  21. data/lib/flickr/api/permissions.rb +4 -0
  22. data/lib/flickr/api/person.rb +0 -13
  23. data/lib/flickr/api/set.rb +0 -18
  24. data/lib/flickr/api/tag.rb +4 -0
  25. data/lib/flickr/api/upload_ticket.rb +8 -0
  26. data/lib/flickr/api/visibility.rb +4 -0
  27. data/lib/flickr/api.rb +6 -5
  28. data/lib/flickr/api_caller.rb +13 -4
  29. data/lib/flickr/client/middleware/retry.rb +0 -9
  30. data/lib/flickr/client/upload_client.rb +5 -6
  31. data/lib/flickr/client.rb +2 -2
  32. data/lib/flickr/objects/collection.rb +0 -2
  33. data/lib/flickr/objects/location.rb +0 -2
  34. data/lib/flickr/objects/media.rb +0 -2
  35. data/lib/flickr/objects/note.rb +0 -2
  36. data/lib/flickr/objects/permissions.rb +0 -2
  37. data/lib/flickr/objects/person.rb +0 -3
  38. data/lib/flickr/objects/photo.rb +0 -3
  39. data/lib/flickr/objects/set.rb +0 -3
  40. data/lib/flickr/objects/tag.rb +0 -2
  41. data/lib/flickr/objects/upload_ticket.rb +0 -2
  42. data/lib/flickr/objects/video.rb +0 -3
  43. data/lib/flickr/objects/visibility.rb +0 -2
  44. data/lib/flickr/objects.rb +7 -6
  45. data/lib/flickr/version.rb +1 -1
  46. metadata +40 -3
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Janko Marohnić
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -30,46 +30,77 @@ If you don't have your API key and shared secret yet, you can apply for them
30
30
  Let's start with a general example.
31
31
 
32
32
  ```ruby
33
- person_id = "78733179@N04"
34
- person = Flickr.people.find(preson_id)
35
- photos = person.get_public_photos #=> API request
33
+ photos = Flickr.photos.search(user_id: "78733179@N04") #=> [#<Flickr::Photo: ...>, #<Flickr::Photo: ...>, ...]
36
34
 
37
35
  photo = photos.first
38
- photo.id #=> "231233252"
39
- photo.title #=> "My cat"
40
- photo.visibility.public? #=> true
41
- photo.description #=> nil
42
- photo.get_info! # makes an API request
43
- photo.description #=> "He's trying to catch a fly"
36
+ photo.id #=> "231233252"
37
+ photo.title #=> "My cat"
38
+ photo.visibility.public? #=> true
39
+ photo.tags = "cats funny" # API request
40
+ photo.get_info! # API request
41
+ photo.tags.join(" ") #=> "cats funny"
44
42
  ```
45
43
 
46
- So, we've seen 2 API requests here:
44
+ Methods like `Flickr.photos.search` are **class** API methods, and methods like `photo.tags=` and
45
+ `photo.get_info!` are **instance** API methods.
47
46
 
48
- - `person.get_public_photos` (`Flickr::Person#get_public_photos`)
49
- - `photo.get_info!` (`Flickr::Photo#get_info!`)
47
+ - `Flickr.photos.search` <=> `Flickr::Photo.search`
48
+ - `photo.tags=` <=> `Flickr::Photo#tags=`
49
+ - `photo.get_info!` <=> `Flickr::Photo#get_info!`
50
50
 
51
- They correspond to the API methods listed on Flickr's official [API page](http://flickr.com/api).
52
- `Flickr::Person#get_public_photos` corresponds to `flickr.people.getPublicPhotos`, and
53
- `Flickr::Photo#get_info!` corresponds to `flickr.photos.getInfo`.
51
+ API methods under the hood call methods described on Flickr's official [API page](http://flickr.com/api).
52
+ In our example, we have this correspondence:
54
53
 
55
- Let's say you want to call Flickr's `flickr.photosets.getList`. To find out how to call it,
56
- you can use `Flickr.api_methods` in the console. This method acts like a
57
- documentation for API methods. So, for example:
54
+ - `Flickr::Photo.search` <=> flickr.photos.search
55
+ - `Flickr::Photo#tags=` <=> flickr.photos.setTags
56
+ - `Flickr::Photo#get_info!` <=> flickr.photos.getInfo
57
+
58
+ Raw Flickr's API methods always take a hash of parameters. So, for example,
59
+ flickr.people.findByEmail takes the `:find_email` parameter. But this gem
60
+ implies these kind of obvious parameters, so instead of having to call it like this:
61
+
62
+ ```ruby
63
+ Flickr.people.find_by_email(find_email: "janko.marohnic@gmail.com")
64
+ ```
65
+
66
+ you can rather call it like this:
67
+
68
+ ```ruby
69
+ Flickr.people.find_by_email("janko.marohnic@gmail.com")
70
+ ```
71
+
72
+ You can still pass a hash of other parameters as the last argument. For the
73
+ documentation on valid arguments, just look at the source code under
74
+ `lib/flickr/api/`. In our example, because `.find_by_email` belongs to `people`,
75
+ the method is located in [`lib/flickr/api/person.rb`](https://github.com/janko-m/flickr-objects/blob/master/lib/flickr/api/person.rb#L3-6).
76
+
77
+ Now, let's say that you want to use a method that fetches all sets from a
78
+ person. And you find out that this method is "flickr.photosets.getList".
79
+ How can you now find out where it is located in this gem? Well, that's where
80
+ `Flickr.api_methods` comes in handy. You can call it in the console:
58
81
 
59
82
  ```ruby
60
83
  Flickr.api_methods["flickr.photosets.getList"] #=> ["Flickr::Person#get_sets"]
61
84
  ```
62
85
 
63
- Now you found out that it corresponds to `Flickr::Person#get_sets`, which means
64
- you can call it like this:
86
+ Now you found out that it is located in `Flickr::Person#get_sets`.
65
87
 
66
88
  ```ruby
89
+ # You can now call it like this:
67
90
  sets = Flickr.people.find(person_id).get_sets
68
91
  sets.first.id #=> "12312324"
92
+
93
+ # Or like this:
94
+ sets = Flickr.find_by_username("josh").get_sets
95
+ sets.first.id #=> "12312324"
69
96
  ```
70
97
 
71
98
  ## Sizes
72
99
 
100
+ When you upload photos to Flickr, Flickr automatically makes different versions
101
+ (sizes) of your photo. So, for example you have "Medium 500", "Small 320", and
102
+ so on. Here's how you use this in the gem:
103
+
73
104
  ```ruby
74
105
  person = Flickr.person.find(person_id)
75
106
  photo = person.get_public_photos(sizes: :all).first
@@ -81,19 +112,39 @@ photo.height #=> 280
81
112
 
82
113
  photo.medium!(500)
83
114
  photo.width #=> 500
115
+
116
+ # You can also call it like this:
117
+ photo.small240!
118
+ photo.width #=> 240
119
+ ```
120
+
121
+ It is important here that you pass `sizes: :all` to `Flickr::Person#get_public_photos`.
122
+ So, in your (Rails) application, one could use it like this:
123
+
124
+ ```ruby
125
+ class PhotosController < ApplicationController
126
+ def index
127
+ person = Flickr.people.find("78733179@N04")
128
+ @photos = person.get_public_photos(sizes: :all).map(&:medium500!)
129
+ end
130
+ end
131
+ ```
132
+ ```erb
133
+ <% @photos.each do |photo| %>
134
+ <%= image_tag photo.source_url, size: "#{photo.width}x#{photo.height}" %>
135
+ <% end %>
84
136
  ```
85
137
 
86
138
  ## Authenticated requests
87
139
 
88
- If you need to make authenticated API requests (which you'll often want), you can create a kind
89
- of a instance, assigning to it user's access token. That instance then has the same interface as `Flickr`.
140
+ If you need to make authenticated API requests (which you'll probably often want), you can create a kind
141
+ of a instance, assigning to it the user's access token. That instance then has the same interface as `Flickr`.
90
142
 
91
143
  ```ruby
92
144
  flickr = Flickr.new("ACCESS_TOKEN_KEY", "ACCESS_TOKEN_SECRET")
93
145
 
94
146
  flickr.test_login #=> {"id" => "78733179@N04", "username" => ...}
95
- flickr.people.find(person_id).get_public_photos
96
- # ...
147
+ flickr.people.find("78733179@N04").get_photos #=> [#<Flickr::Photo ...>, #<Flickr::Photo, ...>, ...]
97
148
  ```
98
149
 
99
150
  If you're in a Rails application, probably the best solution for authenticating
@@ -105,14 +156,12 @@ You can also assign the access token globally in your configuration.
105
156
 
106
157
  ```ruby
107
158
  Flickr.configure do |config|
108
- config.api_key = "API_KEY"
109
- config.shared_secret = "SHARED_SECRET"
110
159
  config.access_token_key = "ACCESS_TOKEN_KEY"
111
160
  config.access_token_secret = "ACCESS_TOKEN_SECRET"
112
161
  end
113
162
  ```
114
163
 
115
- This is useful if you're, for example, using Flickr as a photo storage in your
164
+ This is especially useful if you're, for example, using Flickr as a photo storage in your
116
165
  application, and that access token is actually yours.
117
166
 
118
167
 
@@ -124,26 +173,21 @@ photo = Flickr.photos.find(photo_id).get_info!
124
173
  photo.title #=> "Dandelions"
125
174
  ```
126
175
 
127
- You can also upload asynchronously, which will return the upload ticket, which
128
- you can then use to check when the upload has finished.
129
-
130
- ```ruby
131
- ticket_id = Flickr.upload("/path/to/photo.jpg", title: "Dandelions", ansync: true)
132
- ticket = Flickr.check_upload_tickets(ticket_id).first
133
- ticket.complete? #=> false
176
+ In the first argument you can pass in either a string (path to the file) or an open file.
177
+ For the details on the additional options you can pass in, check out Flickr's [upload
178
+ documentation](http://www.flickr.com/services/api/upload.api.html).
134
179
 
135
- sleep 1
180
+ For asynchronous upload take a look at [this wiki](https://github.com/janko-m/flickr-objects/wiki/Upload).
136
181
 
137
- ticket = Flickr.check_upload_tickets(ticked_id).first
138
- ticket.complete? #=> true
139
- ticket.photo.id #=> "232594385"
140
- ```
182
+ ## Attributes and methods
141
183
 
142
- ## Attributes
184
+ For the list of attributes and methods that Flickr objects have, the best place to look at
185
+ is the source code. The source code is delibarately written in a way that it's
186
+ really easy to read, even for someone who doesn't have experience in looking into other
187
+ people's code.
143
188
 
144
- For the list of attributes that Flickr objects have, the best place to look at
145
- is the source code. For example, list of common attributes that `Flickr::Photo`
146
- and `Flickr::Video` have can be found in `lib/flickr/objects/media.rb`.
189
+ For example, list of common attributes that `Flickr::Photo`
190
+ and `Flickr::Video` have can be found in [`lib/flickr/objects/media.rb`]("https://github.com/janko-m/flickr-objects/blob/master/lib/flickr/objects/media.rb").
147
191
 
148
192
  ![Flickr::Media](http://farm9.staticflickr.com/8195/8133340670_38c60aaca7.jpg)
149
193
 
@@ -151,12 +195,14 @@ As you can see, it is very readable ;)
151
195
 
152
196
  ## Few words
153
197
 
154
- Most of the API methods are not covered yet (because they are so many for one
155
- person). All the most important API methods should be implemented, so a person
156
- with normal demands should have everything he needs. If you feel like some API
157
- methods should have higher priority to be covered, feel free to post it in
158
- issues, and I will try to get it covered in the next version. Pull requests are
159
- also very welcome :)
198
+ Most of the API methods are not covered yet (because they are so many).
199
+ The most important API methods should be already implemented, so a person
200
+ with normal demands should have everything he needs.
201
+
202
+ If you feel like some API methods (that are not yet covered) should have
203
+ a higher priority to be covered, feel free to let me know (maybe best via
204
+ [Twitter](https://twitter.com/m_janko)), and I will try to get them covered
205
+ in the next version. Pull requests are also very welcome :)
160
206
 
161
207
  ## Social
162
208
 
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Collection < Object
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ class Flickr
2
+ api_method :check_upload_tickets, "flickr.photos.upload.checkTickets"
3
+ api_method :test_login, "flickr.test.login"
4
+ api_method :test_echo, "flickr.test.echo"
5
+ api_method :test_null, "flickr.test.null"
6
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Location < Object
3
+ end
4
+ end
@@ -0,0 +1,14 @@
1
+ class Flickr
2
+ class Media < Object
3
+ class_api_method :get_from_contacts, "flickr.photos.getContactsPhotos"
4
+ class_api_method :search, "flickr.photos.search"
5
+
6
+ instance_api_method :add_tags, "flickr.photos.addTags"
7
+ instance_api_method :delete, "flickr.photos.delete"
8
+ instance_api_method :get_info!, "flickr.photos.getInfo"
9
+ instance_api_method :get_sizes!, "flickr.photos.getSizes"
10
+ instance_api_method :remove_tag, "flickr.photos.removeTag"
11
+ instance_api_method :set_content_type, "flickr.photos.setContentType", aliases: [:content_type=]
12
+ instance_api_method :set_tags, "flickr.photos.setTags", aliases: [:tags=]
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Note < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Permissions < Object
3
+ end
4
+ end
@@ -0,0 +1,12 @@
1
+ class Flickr
2
+ class Person < Object
3
+ class_api_method :find_by_email, "flickr.people.findByEmail"
4
+ class_api_method :find_by_username, "flickr.people.findByUsername"
5
+
6
+ instance_api_method :get_info!, "flickr.people.getInfo"
7
+ instance_api_method :get_photos, "flickr.people.getPhotos", aliases: [:get_videos, :get_media]
8
+ instance_api_method :get_public_photos, "flickr.people.getPublicPhotos", aliases: [:get_public_videos, :get_public_media]
9
+ instance_api_method :get_public_photos_from_contacts, "flickr.photos.getContactsPublicPhotos", aliases: [:get_public_videos_from_contacts, :get_public_media_from_contacts]
10
+ instance_api_method :get_sets, "flickr.photosets.getList"
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Photo < Media
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ class Flickr
2
+ class Set < Object
3
+ class_api_method :create, "flickr.photosets.create"
4
+
5
+ instance_api_method :add_photo, "flickr.photosets.addPhoto", aliases: [:add_video, :add_media]
6
+ instance_api_method :delete, "flickr.photosets.delete"
7
+ instance_api_method :edit_photos, "flickr.photosets.editPhotos", aliases: [:edit_videos, :edit_media]
8
+ instance_api_method :get_info!, "flickr.photosets.getInfo"
9
+ instance_api_method :get_photos, "flickr.photosets.getPhotos", aliases: [:get_videos, :get_media]
10
+ instance_api_method :remove_photos, "flickr.photosets.removePhotos", aliases: [:remove_videos, :remove_media]
11
+ instance_api_method :remove_photo, "flickr.photosets.removePhoto", aliases: [:remove_video, :remove_media]
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Tag < Object
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ class Flickr
2
+ class UploadTicket < Object
3
+ class_api_method :check, "flickr.photos.upload.checkTickets"
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Video < Media
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Visibility < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Collection < Object
3
+ end
4
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "api_methods/flickr"
2
+
1
3
  class Flickr
2
4
  api_methods = proc do
3
5
  def upload(media, params = {})
@@ -14,27 +16,20 @@ class Flickr
14
16
  response = client.get flickr_method(__method__), params.merge(tickets: tickets.to_s)
15
17
  Collection.new(response["uploader"].delete("ticket"), UploadTicket, response["uploader"], client)
16
18
  end
17
- api_method :check_upload_tickets, "flickr.photos.upload.checkTickets"
18
19
 
19
20
  def test_login(params = {})
20
21
  client.get flickr_method(__method__), params
21
22
  end
22
- api_method :test_login, "flickr.test.login"
23
23
 
24
24
  def test_echo(params = {})
25
25
  client.get flickr_method(__method__), params
26
26
  end
27
- api_method :test_echo, "flickr.test.echo"
28
27
 
29
28
  def test_null(params = {})
30
29
  client.get flickr_method(__method__), params
31
30
  end
32
- api_method :test_null, "flickr.test.null"
33
31
  end
34
32
 
35
- def self.api_method(*args) class_api_method(*args) end
36
33
  instance_eval(&api_methods)
37
-
38
- def self.api_method(*args) instance_api_method(*args) end
39
34
  class_eval(&api_methods)
40
35
  end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Location < Object
3
+ end
4
+ end
@@ -4,60 +4,49 @@ class Flickr
4
4
  client.post flickr_method(__method__), params.merge(photo_id: id, tags: tags)
5
5
  tags
6
6
  end
7
- instance_api_method :add_tags, "flickr.photos.addTags"
8
7
 
9
8
  def delete(params = {})
10
9
  client.post flickr_method(__method__), params.merge(photo_id: id)
11
10
  self
12
11
  end
13
- instance_api_method :delete, "flickr.photos.delete"
14
12
 
15
13
  def self.get_from_contacts(params = {})
16
14
  response = client.get flickr_method(__method__), handle_extras(params)
17
15
  Collection.new(response["photos"].delete("photo"), Media, response["photos"], client)
18
16
  end
19
- class_api_method :get_from_contacts, "flickr.photos.getContactsPhotos"
20
17
 
21
18
  def get_info!(params = {})
22
19
  response = client.get flickr_method(__method__), params.merge(photo_id: id)
23
20
  @hash.update(response["photo"])
24
21
  self
25
22
  end
26
- instance_api_method :get_info!, "flickr.photos.getInfo"
27
23
 
28
24
  def get_sizes!(params = {})
29
25
  response = client.get flickr_method(__method__), params.merge(photo_id: id)
30
26
  @hash.update(response["sizes"])
31
27
  self
32
28
  end
33
- instance_api_method :get_sizes!, "flickr.photos.getSizes"
34
29
 
35
30
  def remove_tag(tag_id, params = {})
36
31
  client.post flickr_method(__method__), params.merge(photo_id: id, tag_id: tag_id)
37
32
  tag_id
38
33
  end
39
- instance_api_method :remove_tag, "flickr.photos.removeTag"
40
34
 
41
35
  def self.search(params = {})
42
36
  response = client.get flickr_method(__method__), handle_extras(params)
43
37
  Collection.new(response["photos"].delete("photo"), self, response["photos"], client)
44
38
  end
45
- class_api_method :search, "flickr.photos.search"
46
39
 
47
40
  def set_content_type(content_type, params = {})
48
41
  client.post flickr_method(__method__), params.merge(photo_id: id, content_type: content_type)
49
42
  content_type
50
43
  end
51
- instance_api_method :set_content_type, "flickr.photos.setContentType"
52
44
  alias content_type= set_content_type
53
- instance_api_method :content_type=, "flickr.photos.setContentType"
54
45
 
55
46
  def set_tags(tags, params = {})
56
47
  client.post flickr_method(__method__), params.merge(photo_id: id, tags: tags)
57
48
  tags
58
49
  end
59
- instance_api_method :set_tags, "flickr.photos.setTags"
60
50
  alias tags= set_tags
61
- instance_api_method :tags=, "flickr.photos.setTags"
62
51
  end
63
52
  end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Note < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Permissions < Object
3
+ end
4
+ end
@@ -4,67 +4,54 @@ class Flickr
4
4
  response = client.get flickr_method(__method__), params.merge(find_email: email)
5
5
  new(response["user"], client)
6
6
  end
7
- class_api_method :find_by_email, "flickr.people.findByEmail"
8
7
 
9
8
  def self.find_by_username(username, params = {})
10
9
  response = client.get flickr_method(__method__), params.merge(username: username)
11
10
  new(response["user"], client)
12
11
  end
13
- class_api_method :find_by_username, "flickr.people.findByUsername"
14
12
 
15
13
  def get_info!(params = {})
16
14
  response = client.get flickr_method(__method__), params.merge(user_id: id)
17
15
  @hash.update(response["person"])
18
16
  self
19
17
  end
20
- instance_api_method :get_info!, "flickr.people.getInfo"
21
18
 
22
19
  def get_photos(params = {})
23
20
  get_media(params).select { |object| object.is_a?(Flickr::Photo) }
24
21
  end
25
- instance_api_method :get_photos, "flickr.people.getPhotos"
26
22
  def get_videos(params = {})
27
23
  get_media(params).select { |object| object.is_a?(Flickr::Video) }
28
24
  end
29
- instance_api_method :get_videos, "flickr.people.getPhotos"
30
25
  def get_media(params = {})
31
26
  response = client.get flickr_method(__method__), handle_extras(params.merge(user_id: id))
32
27
  Collection.new(response["photos"].delete("photo"), Media, response["photos"], client)
33
28
  end
34
- instance_api_method :get_media, "flickr.people.getPhotos"
35
29
 
36
30
  def get_public_photos(params = {})
37
31
  get_public_media(params).select { |object| object.is_a?(Flickr::Photo) }
38
32
  end
39
- instance_api_method :get_public_photos, "flickr.people.getPublicPhotos"
40
33
  def get_public_videos(params = {})
41
34
  get_public_media(params).select { |object| object.is_a?(Flickr::Video) }
42
35
  end
43
- instance_api_method :get_public_videos, "flickr.people.getPublicPhotos"
44
36
  def get_public_media(params = {})
45
37
  response = client.get flickr_method(__method__), handle_extras(params.merge(user_id: id))
46
38
  Collection.new(response["photos"].delete("photo"), Media, response["photos"], client)
47
39
  end
48
- instance_api_method :get_public_media, "flickr.people.getPublicPhotos"
49
40
 
50
41
  def get_public_photos_from_contacts(params = {})
51
42
  get_public_media_from_contacts(params).select {|object| object.is_a?(Flickr::Photo) }
52
43
  end
53
- instance_api_method :get_public_photos_from_contacts, "flickr.photos.getContactsPublicPhotos"
54
44
  def get_public_videos_from_contacts(params = {})
55
45
  get_public_media_from_contacts(params).select {|object| object.is_a?(Flickr::Video) }
56
46
  end
57
- instance_api_method :get_public_videos_from_contacts, "flickr.photos.getContactsPublicPhotos"
58
47
  def get_public_media_from_contacts(params = {})
59
48
  response = client.get flickr_method(__method__), handle_extras(params.merge(user_id: id))
60
49
  Collection.new(response["photos"].delete("photo"), Media, response["photos"], client)
61
50
  end
62
- instance_api_method :get_public_media_from_contacts, "flickr.photos.getContactsPublicPhotos"
63
51
 
64
52
  def get_sets(params = {})
65
53
  response = client.get flickr_method(__method__), params.merge(user_id: id)
66
54
  Collection.new(response["photosets"].delete("photoset"), Set, response["photosets"], client)
67
55
  end
68
- instance_api_method :get_sets, "flickr.photosets.getList"
69
56
  end
70
57
  end
@@ -3,68 +3,50 @@ class Flickr
3
3
  def add_photo(media_id, params = {})
4
4
  client.post flickr_method(__method__), params.merge(photoset_id: id, photo_id: media_id)
5
5
  end
6
- instance_api_method :add_photo, "flickr.photosets.addPhoto"
7
6
  alias add_video add_photo
8
- instance_api_method :add_video, "flickr.photosets.addPhoto"
9
7
  alias add_media add_photo
10
- instance_api_method :add_media, "flickr.photosets.addPhoto"
11
8
 
12
9
  def self.create(params = {})
13
10
  response = client.post flickr_method(__method__), params
14
11
  new(response["photoset"], client)
15
12
  end
16
- class_api_method :create, "flickr.photosets.create"
17
13
 
18
14
  def delete(params = {})
19
15
  client.post flickr_method(__method__), params.merge(photoset_id: id)
20
16
  self
21
17
  end
22
- instance_api_method :delete, "flickr.photosets.delete"
23
18
 
24
19
  def edit_photos(params = {})
25
20
  client.post flickr_method(__method__), params.merge(photoset_id: id)
26
21
  self
27
22
  end
28
- instance_api_method :edit_photos, "flickr.photosets.editPhotos"
29
23
  alias edit_videos edit_photos
30
- instance_api_method :edit_videos, "flickr.photosets.editPhotos"
31
24
  alias edit_media edit_photos
32
- instance_api_method :edit_media, "flickr.photosets.editPhotos"
33
25
 
34
26
  def get_info!(params = {})
35
27
  response = client.get flickr_method(__method__), params.merge(photoset_id: id)
36
28
  @hash.update(response["photoset"])
37
29
  self
38
30
  end
39
- instance_api_method :get_info!, "flickr.photosets.getInfo"
40
31
 
41
32
  def get_photos(params = {})
42
33
  get_media(params.merge(media: "photos"))
43
34
  end
44
- instance_api_method :get_photos, "flickr.photosets.getPhotos"
45
35
  def get_videos(params = {})
46
36
  get_media(params.merge(media: "videos"))
47
37
  end
48
- instance_api_method :get_videos, "flickr.photosets.getPhotos"
49
38
  def get_media(params = {})
50
39
  response = client.get flickr_method(__method__), handle_extras(params.merge(photoset_id: id))
51
40
  Collection.new(response["photoset"].delete("photo"), Media, response["photoset"], client)
52
41
  end
53
- instance_api_method :get_media, "flickr.photosets.getPhotos"
54
42
 
55
43
  def remove_photos(media_id, params = {})
56
44
  client.post flickr_method(__method__), params.merge(photoset_id: id, photo_ids: media_id)
57
45
  end
58
- instance_api_method :remove_photos, "flickr.photosets.removePhotos"
59
46
  alias remove_videos remove_photos
60
- instance_api_method :remove_videos, "flickr.photosets.removePhotos"
61
47
  alias remove_media remove_photos
62
- instance_api_method :remove_media, "flickr.photosets.removePhotos"
63
48
 
64
- instance_api_method :remove_media, "flickr.photosets.removePhoto"
65
49
  alias remove_photo remove_photos
66
- instance_api_method :remove_photo, "flickr.photosets.removePhoto"
67
50
  alias remove_video remove_photos
68
- instance_api_method :remove_video, "flickr.photosets.removePhoto"
69
51
  end
70
52
  end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Tag < Object
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ class Flickr
2
+ class UploadTicket < Object
3
+ def self.check(tickets, params = {})
4
+ response = client.get flickr_method(__method__), params.merge(tickets: tickets)
5
+ Collection.new(response["uploader"].delete("ticket"), self, response["uploader"], client)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ class Flickr
2
+ class Visibility < Object
3
+ end
4
+ end
data/lib/flickr/api.rb CHANGED
@@ -42,9 +42,10 @@ class Flickr
42
42
  end
43
43
  end
44
44
 
45
- map_interface :media, Media
46
- map_interface :photos, Photo
47
- map_interface :videos, Video
48
- map_interface :people, Person
49
- map_interface :sets, Set
45
+ map_interface :media, Media
46
+ map_interface :photos, Photo
47
+ map_interface :videos, Video
48
+ map_interface :people, Person
49
+ map_interface :sets, Set
50
+ map_interface :upload_tickets, UploadTicket
50
51
  end
@@ -25,16 +25,25 @@ class Flickr
25
25
  end
26
26
 
27
27
  module ClassMethods
28
- def instance_api_method(method, flickr_method)
29
- Flickr.api_methods[flickr_method] << "#{self.name}##{method}"
28
+ def instance_api_method(method, flickr_method, options = {})
29
+ [method, *options[:aliases]].each do |method|
30
+ Flickr.api_methods[flickr_method] << "#{self.name}##{method}"
31
+ end
30
32
  children.each { |child| Flickr.api_methods[flickr_method] << "#{child.name}##{method}" } if respond_to?(:children)
31
33
  end
32
34
 
33
- def class_api_method(method, flickr_method)
34
- Flickr.api_methods[flickr_method] << "#{self.name}.#{method}"
35
+ def class_api_method(method, flickr_method, options = {})
36
+ [method, *options[:aliases]].each do |method|
37
+ Flickr.api_methods[flickr_method] << "#{self.name}.#{method}"
38
+ end
35
39
  children.each { |child| Flickr.api_methods[flickr_method] << "#{child.name}.#{method}" } if respond_to?(:children)
36
40
  end
37
41
 
42
+ def api_method(*args)
43
+ instance_api_method(*args)
44
+ class_api_method(*args)
45
+ end
46
+
38
47
  def flickr_method(method_name)
39
48
  resolve_flickr_method("#{self.name}.#{method_name}")
40
49
  end
@@ -1,16 +1,7 @@
1
1
  class Flickr
2
2
  class Client < Faraday::Connection
3
3
  module Middleware
4
- # A copy-paste from Faraday's master branch
5
4
  class Retry < Faraday::Middleware
6
- # Public: Initialize middleware
7
- #
8
- # Options:
9
- # max - Maximum number of retries (default: 2).
10
- # interval - Pause in seconds between retries (default: 0).
11
- # exceptions - The list of exceptions to handle. Exceptions can be
12
- # given as Class, Module, or String. (default:
13
- # [Errno::ETIMEDOUT, Timeout::Error, Error::TimeoutError])
14
5
  def initialize(app, options = {})
15
6
  super(app)
16
7
  @retries, options = options, {} if options.is_a? Integer
@@ -26,14 +26,13 @@ class Flickr
26
26
 
27
27
  def get_file(object)
28
28
  file, content_type, file_path =
29
- case object.class.name
30
- when "String"
29
+ if object.is_a?(String)
31
30
  [File.open(object), determine_content_type(object), object]
32
- when "File"
33
- [object, determine_content_type(object.path), object.path]
34
- when "ActionDispatch::Http::UploadedFile"
31
+ elsif object.class.name == "ActionDispatch::Http::UploadedFile"
35
32
  [object, object.content_type, object.tempfile]
36
- when "Hash" && defined?(Sinatra)
33
+ elsif object.respond_to?(:read) and object.respond_to?(:path)
34
+ [object, (object.respond_to?(:content_type) && object.content_type) || determine_content_type(object.path), object.path]
35
+ elsif object.is_a?(Hash) && defined?(Sinatra)
37
36
  [object[:tempfile], object[:type], object[:tempfile].path]
38
37
  else
39
38
  raise Error, "invalid file format"
data/lib/flickr/client.rb CHANGED
@@ -5,8 +5,8 @@ require "flickr/client/middleware"
5
5
  class Flickr
6
6
  class Client < Faraday::Connection
7
7
  DEFAULTS = {
8
- open_timeout: 3,
9
- timeout: 4
8
+ open_timeout: 4,
9
+ timeout: 6
10
10
  }
11
11
 
12
12
  def initialize(access_token)
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/collection"
2
-
3
1
  class Flickr
4
2
  class Collection < Object
5
3
  include Enumerable
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/location"
2
-
3
1
  class Flickr
4
2
  class Location < Object
5
3
 
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/media"
2
- require "flickr/api/media"
3
1
  require "flickr/helpers/base_58"
4
2
 
5
3
  class Flickr
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/note"
2
-
3
1
  class Flickr
4
2
  class Note < Object
5
3
 
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/permissions"
2
-
3
1
  class Flickr
4
2
  class Permissions < Object
5
3
 
@@ -1,6 +1,3 @@
1
- require_relative "attribute_values/person"
2
- require "flickr/api/person"
3
-
4
1
  class Flickr
5
2
  class Person < Object
6
3
 
@@ -1,6 +1,3 @@
1
- require_relative "attribute_values/photo"
2
- require "flickr/api/photo"
3
-
4
1
  class Flickr
5
2
  class Photo < Media
6
3
 
@@ -1,6 +1,3 @@
1
- require_relative "attribute_values/set"
2
- require "flickr/api/set"
3
-
4
1
  class Flickr
5
2
  class Set < Object
6
3
 
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/tag"
2
-
3
1
  class Flickr
4
2
  class Tag < Object
5
3
 
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/upload_ticket"
2
-
3
1
  class Flickr
4
2
  class UploadTicket < Object
5
3
 
@@ -1,6 +1,3 @@
1
- require_relative "attribute_values/video"
2
- require "flickr/api/video"
3
-
4
1
  class Flickr
5
2
  class Video < Media
6
3
 
@@ -1,5 +1,3 @@
1
- require_relative "attribute_values/visibility"
2
-
3
1
  class Flickr
4
2
  class Visibility < Object
5
3
 
@@ -19,10 +19,11 @@ class Flickr
19
19
  class Collection < Object; end
20
20
  end
21
21
 
22
- Flickr::Object.children.each do |klass|
23
- underscored_name = klass.name.split("::").last.sub(/(?<=\w)(?=[A-Z])/, "_").downcase
24
- begin
25
- require "flickr/objects/#{underscored_name}"
26
- rescue LoadError
27
- end
22
+ objects = Flickr::Object.children.dup
23
+ objects.each do |object|
24
+ underscored_name = object.name.split("::").last.split(/(?<=\w)(?=[A-Z])/).map(&:downcase).join("_")
25
+ require "flickr/objects/#{underscored_name}"
26
+ require "flickr/objects/attribute_values/#{underscored_name}"
27
+ require "flickr/api/#{underscored_name}"
28
+ require "flickr/api/api_methods/#{underscored_name}"
28
29
  end
@@ -1,3 +1,3 @@
1
1
  class Flickr
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flickr-objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-29 00:00:00.000000000 Z
12
+ date: 2012-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -123,6 +123,22 @@ dependencies:
123
123
  - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
125
  version: '2.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rack-test
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
126
142
  description: This gem is an object-oriented wrapper for the Flickr API.
127
143
  email:
128
144
  - janko.marohnic@gmail.com
@@ -131,12 +147,33 @@ extensions: []
131
147
  extra_rdoc_files: []
132
148
  files:
133
149
  - README.md
150
+ - LICENSE
151
+ - lib/flickr/api/api_methods/collection.rb
152
+ - lib/flickr/api/api_methods/flickr.rb
153
+ - lib/flickr/api/api_methods/location.rb
154
+ - lib/flickr/api/api_methods/media.rb
155
+ - lib/flickr/api/api_methods/note.rb
156
+ - lib/flickr/api/api_methods/permissions.rb
157
+ - lib/flickr/api/api_methods/person.rb
158
+ - lib/flickr/api/api_methods/photo.rb
159
+ - lib/flickr/api/api_methods/set.rb
160
+ - lib/flickr/api/api_methods/tag.rb
161
+ - lib/flickr/api/api_methods/upload_ticket.rb
162
+ - lib/flickr/api/api_methods/video.rb
163
+ - lib/flickr/api/api_methods/visibility.rb
164
+ - lib/flickr/api/collection.rb
134
165
  - lib/flickr/api/flickr.rb
166
+ - lib/flickr/api/location.rb
135
167
  - lib/flickr/api/media.rb
168
+ - lib/flickr/api/note.rb
169
+ - lib/flickr/api/permissions.rb
136
170
  - lib/flickr/api/person.rb
137
171
  - lib/flickr/api/photo.rb
138
172
  - lib/flickr/api/set.rb
173
+ - lib/flickr/api/tag.rb
174
+ - lib/flickr/api/upload_ticket.rb
139
175
  - lib/flickr/api/video.rb
176
+ - lib/flickr/api/visibility.rb
140
177
  - lib/flickr/api.rb
141
178
  - lib/flickr/api_caller.rb
142
179
  - lib/flickr/client/methods_client.rb
@@ -202,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
239
  version: '0'
203
240
  segments:
204
241
  - 0
205
- hash: 41965126813317572
242
+ hash: -2444191243502827259
206
243
  requirements: []
207
244
  rubyforge_project:
208
245
  rubygems_version: 1.8.23