flickr-objects 0.0.1 → 0.0.2

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.
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