flickrie 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +22 -0
  3. data/Gemfile +0 -6
  4. data/README.md +15 -1
  5. data/Rakefile +8 -13
  6. data/api_methods.md +1 -1
  7. data/flickrie.gemspec +2 -3
  8. data/lib/flickrie/api_methods.rb +17 -0
  9. data/lib/flickrie/client.rb +21 -5
  10. data/lib/flickrie/instance.rb +7 -2
  11. data/lib/flickrie/license.rb +2 -0
  12. data/lib/flickrie/location.rb +10 -8
  13. data/lib/flickrie/media/exif.rb +3 -1
  14. data/lib/flickrie/media/tag.rb +3 -3
  15. data/lib/flickrie/media/visibility.rb +6 -4
  16. data/lib/flickrie/media.rb +69 -84
  17. data/lib/flickrie/media_count.rb +3 -5
  18. data/lib/flickrie/photo.rb +55 -54
  19. data/lib/flickrie/set.rb +31 -25
  20. data/lib/flickrie/ticket.rb +4 -8
  21. data/lib/flickrie/upload_client.rb +7 -2
  22. data/lib/flickrie/user.rb +33 -34
  23. data/lib/flickrie/version.rb +1 -1
  24. data/lib/flickrie/video.rb +13 -12
  25. data/spec/api_methods_spec.rb +43 -0
  26. data/spec/error_spec.rb +32 -0
  27. data/{test → spec/files}/photo.jpg +0 -0
  28. data/{test → spec/files}/video.mov +0 -0
  29. data/spec/instance_spec.rb +22 -0
  30. data/spec/license_spec.rb +15 -0
  31. data/spec/location_spec.rb +11 -0
  32. data/spec/media_count_spec.rb +18 -0
  33. data/spec/media_spec.rb +271 -0
  34. data/spec/oauth_spec.rb +22 -0
  35. data/spec/photo_spec.rb +137 -0
  36. data/spec/set_spec.rb +68 -0
  37. data/spec/spec_helper.rb +68 -0
  38. data/spec/user_spec.rb +56 -0
  39. data/spec/video_spec.rb +54 -0
  40. metadata +47 -132
  41. data/test/error_test.rb +0 -20
  42. data/test/instance_test.rb +0 -20
  43. data/test/license_test.rb +0 -19
  44. data/test/location_test.rb +0 -29
  45. data/test/media_count_test.rb +0 -25
  46. data/test/media_test.rb +0 -432
  47. data/test/oauth_test.rb +0 -25
  48. data/test/photo_test.rb +0 -212
  49. data/test/set_test.rb +0 -92
  50. data/test/test_helper.rb +0 -14
  51. data/test/user_test.rb +0 -70
  52. data/test/vcr_cassettes/error/code.yml +0 -1165
  53. data/test/vcr_cassettes/instance/calling_api_methods.yml +0 -182
  54. data/test/vcr_cassettes/license/get_licenses.yml +0 -73
  55. data/test/vcr_cassettes/location/square_brackets.yml +0 -85
  56. data/test/vcr_cassettes/media/delete.yml +0 -1380
  57. data/test/vcr_cassettes/media/from_contacts.yml +0 -155
  58. data/test/vcr_cassettes/media/from_set.yml +0 -276
  59. data/test/vcr_cassettes/media/from_user.yml +0 -275
  60. data/test/vcr_cassettes/media/get_context.yml +0 -73
  61. data/test/vcr_cassettes/media/get_info.yml +0 -167
  62. data/test/vcr_cassettes/media/remove_tag.yml +0 -264
  63. data/test/vcr_cassettes/media/replace.yml +0 -2252
  64. data/test/vcr_cassettes/media/search.yml +0 -275
  65. data/test/vcr_cassettes/media/tags.yml +0 -346
  66. data/test/vcr_cassettes/media_count/get.yml +0 -135
  67. data/test/vcr_cassettes/media_count/square_brackets.yml +0 -69
  68. data/test/vcr_cassettes/oauth/tokens.yml +0 -400
  69. data/test/vcr_cassettes/photo/asynchronous_upload.yml +0 -1693
  70. data/test/vcr_cassettes/photo/from_set.yml +0 -273
  71. data/test/vcr_cassettes/photo/from_user.yml +0 -275
  72. data/test/vcr_cassettes/photo/get_exif.yml +0 -239
  73. data/test/vcr_cassettes/photo/get_sizes.yml +0 -147
  74. data/test/vcr_cassettes/photo/other_api_calls.yml +0 -506
  75. data/test/vcr_cassettes/photo/search.yml +0 -271
  76. data/test/vcr_cassettes/photo/square_brackets.yml +0 -85
  77. data/test/vcr_cassettes/photo/upload.yml +0 -1229
  78. data/test/vcr_cassettes/set/from_user.yml +0 -477
  79. data/test/vcr_cassettes/set/get_info.yml +0 -951
  80. data/test/vcr_cassettes/set/square_brackets.yml +0 -73
  81. data/test/vcr_cassettes/user/find_by_email_or_username.yml +0 -135
  82. data/test/vcr_cassettes/user/get_info.yml +0 -151
  83. data/test/vcr_cassettes/user/square_brackets.yml +0 -77
  84. data/test/vcr_cassettes/video/get_exif.yml +0 -135
  85. data/test/vcr_cassettes/video/get_info.yml +0 -86
  86. data/test/vcr_cassettes/video/get_sizes.yml +0 -151
  87. data/test/vcr_cassettes/video/other_api_calls.yml +0 -643
  88. data/test/vcr_cassettes/video/square_brackets.yml +0 -86
  89. data/test/vcr_cassettes/video/upload.yml +0 -308
  90. data/test/video_test.rb +0 -118
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ pkg/
4
4
  credentials.rb
5
5
  doc/
6
6
  .DS_Store
7
+ spec/vcr_cassettes
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Flickrie changelog
2
2
 
3
+ ## Version 1.0.0
4
+
5
+ - cover `flickr.photos.getFavorites` and `flickr.test.login`
6
+ - change the way `flickr.photos.getContext` works (this is the part that is NOT backwards compatible)
7
+
8
+ Before:
9
+ ```ruby
10
+ context = Flickrie.get_photo_context(712472397)
11
+ context['count'] # => 12
12
+ context['prevphoto'] # => #<Photo: ...>
13
+ context['nexphoto'] # => #<Photo: ...>
14
+ ```
15
+ Now:
16
+ ```ruby
17
+ context = Flickrie.get_photo_context(712472397)
18
+ context.count # => 12
19
+ context.previous # => #<Photo: ...>
20
+ context.next # => #<Photo: ...>
21
+ ```
22
+
23
+ - bug fixes (especially regarding the `Flickr::Instance`)
24
+
3
25
  ## Version 0.6.1
4
26
 
5
27
  - `Flickrie::Media::Ticket` is now called just `Flickrie::Ticket`
data/Gemfile CHANGED
@@ -9,9 +9,3 @@ group :development, :test do
9
9
  gem "pry"
10
10
  gem "debugger"
11
11
  end
12
-
13
- group :test do
14
- # This is to get rid of 'gem install minitest' messages
15
- # in the tests
16
- gem "minitest"
17
- end
data/README.md CHANGED
@@ -138,7 +138,7 @@ puts "Visit this url to authenticate: #{url}"
138
138
 
139
139
  print "If you agreed, the code was displayed afterwards. Enter it: "
140
140
  code = gets.strip
141
- access_token = Flickrie::OAuth.get_access_token(code)
141
+ access_token = Flickrie::OAuth.get_access_token(code, request_token)
142
142
  Flickrie.access_token = access_token.token
143
143
  Flickrie.access_secret = access_token.secret
144
144
  puts "You successfully authenticated!"
@@ -214,6 +214,19 @@ default.
214
214
  Please, feel free to post any issues that you're having, I will be happy
215
215
  to help. I will also be happy if you let me know about any bugs.
216
216
 
217
+ ## How to contribute
218
+
219
+ I will be happy if you want to contribute. The procedure is nothing
220
+ special, you just fork the project and send me a pull request.
221
+
222
+ For your tests to be able to run, you should make a Flickr account, and
223
+ get the API key and secret. You can get them [here](http://www.flickr.com/services/apps/create/apply).
224
+ You also have to get the access token. You can do that by using my
225
+ authentication system. After you have these four things, you have to
226
+ assign them to environment variables named `FLICKR_API_KEY`,
227
+ `FLICKR_SHARED_SECRET`, `FLICKR_ACCESS_TOKEN`, `FLICKR_ACCESS_SECRET`.
228
+ Once you do that, you should be able to run tests.
229
+
217
230
  ## Cedits
218
231
 
219
232
  Special thanks to @**mislav**, my brother, he helped me really a lot
@@ -237,6 +250,7 @@ basis of this gem.
237
250
  "flickr.photos.getContext" -> Flickrie.get_photo_context
238
251
  "flickr.photos.getCounts" -> Flickrie.get_photos_counts
239
252
  "flickr.photos.getExif" -> Flickrie.get_photo_exif
253
+ "flickr.photos.getFavorites" -> Flickrie.get_photo_favorites
240
254
  "flickr.photos.getInfo" -> Flickrie.get_photo_info
241
255
  "flickr.photos.getSizes" -> Flickrie.get_photo_sizes
242
256
  "flickr.photos.removeTag" -> Flickrie.remove_photo_tag
data/Rakefile CHANGED
@@ -1,22 +1,17 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- CURRENT_DIR = File.expand_path(File.dirname(__FILE__))
5
-
6
- task :test do
7
- Dir["#{CURRENT_DIR}/test/**/*_test.rb"].each do |test_file|
8
- system "bundle exec turn -Itest --require=test_helper #{test_file}"
4
+ task :spec, :spec do |task, args|
5
+ command = "bundle exec rspec -I spec --require 'spec_helper'"
6
+ if args['spec'].nil?
7
+ system(command)
8
+ else
9
+ system(command + " spec/#{args['spec']}_spec.rb")
9
10
  end
10
11
  end
11
12
 
12
- namespace :test do
13
- test_rbs = Dir["#{CURRENT_DIR}/test/*_test.rb"].
14
- map { |t| [File.basename(t).chomp('_test.rb').to_sym, t] }.
15
- each do |test_name, test_file|
16
- task(test_name) do
17
- system "bundle exec turn -Itest --require=test_helper #{test_file}"
18
- end
19
- end
13
+ task :console do
14
+ system "bundle exec pry -I. --require 'flickrie' --require 'credentials'"
20
15
  end
21
16
 
22
17
  task :rdoc do
data/api_methods.md CHANGED
@@ -115,7 +115,7 @@
115
115
  - ~~flickr.photos.getContext~~
116
116
  - ~~flickr.photos.getCounts~~
117
117
  - ~~flickr.photos.getExif~~
118
- - flickr.photos.getFavorites
118
+ - ~~flickr.photos.getFavorites~~
119
119
  - ~~flickr.photos.getInfo~~
120
120
  - flickr.photos.getNotInSet
121
121
  - flickr.photos.getPerms
data/flickrie.gemspec CHANGED
@@ -20,8 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency "simple_oauth", '~> 0.1'
21
21
  gem.add_dependency "multi_xml", '~> 0.4'
22
22
 
23
- gem.add_development_dependency "activesupport"
24
- gem.add_development_dependency "turn"
23
+ gem.add_development_dependency "activesupport", '>= 3'
24
+ gem.add_development_dependency "rspec", '>= 2'
25
25
  gem.add_development_dependency "vcr"
26
- gem.add_development_dependency "webmock"
27
26
  end
@@ -124,10 +124,20 @@ module Flickrie
124
124
  Video.from_exif(response.body['photo'])
125
125
  end
126
126
 
127
+ def get_photo_favorites(photo_id, params = {})
128
+ response = client.get_media_favorites(photo_id, params)
129
+ Photo.new(response.body['photo'])
130
+ end
131
+ def get_video_favorites(video_id, params = {})
132
+ response = client.get_media_favorites(video_id, params)
133
+ Video.new(response.body['photo'])
134
+ end
135
+
127
136
  def get_media_info(media_id, params = {})
128
137
  response = client.get_media_info(media_id, params)
129
138
  Media.from_info(response.body['photo'])
130
139
  end
140
+
131
141
  alias get_photo_info get_media_info
132
142
  alias get_video_info get_media_info
133
143
 
@@ -195,5 +205,12 @@ module Flickrie
195
205
  def videos_from_set(set_id, params = {})
196
206
  media_from_set(set_id, params.merge(:media => 'videos'))
197
207
  end
208
+
209
+ #--
210
+ # test
211
+ def test_login(params = {})
212
+ response = client.test_login(params)
213
+ User.from_test(response.body['user'])
214
+ end
198
215
  end
199
216
  end
@@ -9,7 +9,7 @@ module Flickrie
9
9
  attributes.each do |attribute|
10
10
  define_method "#{attribute}=" do |value|
11
11
  instance_variable_set "@#{attribute}", value
12
- @client = nil
12
+ @client = @upload_client = nil
13
13
  end
14
14
  end
15
15
  end
@@ -18,8 +18,12 @@ module Flickrie
18
18
  attr_accessor_with_client_reset :api_key, :shared_secret,
19
19
  :timeout, :open_timeout, :access_token, :access_secret
20
20
 
21
- def client(access_token_hash = {})
22
- @client ||= Client.new(params) do |conn|
21
+ def client
22
+ @client ||= new_client
23
+ end
24
+
25
+ def new_client(access_token_hash = {})
26
+ Client.new(params) do |conn|
23
27
  conn.use FaradayMiddleware::OAuth,
24
28
  :consumer_key => api_key,
25
29
  :consumer_secret => shared_secret,
@@ -154,6 +158,11 @@ module Flickrie
154
158
  {:photo_id => media_id}.merge(params)
155
159
  end
156
160
 
161
+ def get_media_favorites(media_id, params = {})
162
+ get 'flickr.photos.getFavorites',
163
+ {:photo_id => media_id}.merge(params)
164
+ end
165
+
157
166
  def get_media_info(media_id, params = {})
158
167
  get 'flickr.photos.getInfo',
159
168
  {:photo_id => media_id}.merge(params)
@@ -203,11 +212,18 @@ module Flickrie
203
212
  ensure_media({:photoset_id => set_id}.merge(params))
204
213
  end
205
214
 
215
+ #--
216
+ # test
217
+ def test_login(params = {})
218
+ get 'flickr.test.login', params
219
+ end
220
+
206
221
  private
207
222
 
208
223
  def ensure_media(params)
209
- params[:extras] = [params[:extras], 'media'].compact.join(',')
210
- params
224
+ params.dup.tap do |dup_params|
225
+ dup_params[:extras] = [dup_params[:extras], 'media'].compact.join(',')
226
+ end
211
227
  end
212
228
  end
213
229
  end
@@ -6,8 +6,13 @@ module Flickrie
6
6
  @access_token, @access_secret = access_token, access_secret
7
7
  end
8
8
 
9
- def client; Flickrie.client(access_token_hash) end
10
- def upload_client; Flickrie.upload_client(access_token_hash) end
9
+ def client
10
+ @client ||= Flickrie.new_client(access_token_hash)
11
+ end
12
+
13
+ def upload_client
14
+ @upload_client ||= Flickrie.new_upload_client(access_token_hash)
15
+ end
11
16
 
12
17
  include ApiMethods
13
18
 
@@ -14,6 +14,8 @@ module Flickrie
14
14
  hash['id'] == argument
15
15
  end
16
16
  initialize(hash)
17
+ else
18
+ raise ArgumentError
17
19
  end
18
20
  end
19
21
 
@@ -1,13 +1,12 @@
1
1
  module Flickrie
2
2
  class Location
3
- attr_reader :latitude, :longitude, :accuracy, :context, :place_id,
4
- :woeid
3
+ attr_reader :latitude, :longitude, :accuracy, :context, :place_id, :woeid
5
4
 
6
- def neighbourhood; place('neighbourhood') end
7
- def locality; place('locality') end
8
- def county; place('county') end
9
- def region; place('region') end
10
- def country; place('country') end
5
+ def neighbourhood() place('neighbourhood') end
6
+ def locality() place('locality') end
7
+ def county() place('county') end
8
+ def region() place('region') end
9
+ def country() place('country') end
11
10
 
12
11
  def [](key)
13
12
  @info[key]
@@ -16,11 +15,14 @@ module Flickrie
16
15
  private
17
16
 
18
17
  def initialize(info = {})
18
+ raise ArgumentError if info.nil?
19
+
19
20
  @info = info
20
21
 
21
- %w[latitude longitude accuracy context place_id woeid].each do |attribute|
22
+ %w[latitude longitude accuracy place_id woeid].each do |attribute|
22
23
  instance_variable_set "@#{attribute}", @info[attribute]
23
24
  end
25
+ @context = Integer(@info['context']) rescue nil
24
26
  end
25
27
 
26
28
  def place(place_name)
@@ -7,7 +7,7 @@ module Flickrie
7
7
  data['_content']
8
8
 
9
9
  rescue NoMethodError
10
- raise Error, "The information about '#{key}' doesn't exist"
10
+ nil
11
11
  end
12
12
 
13
13
  def [](key)
@@ -15,6 +15,8 @@ module Flickrie
15
15
  end
16
16
 
17
17
  def initialize(info)
18
+ raise ArgumentError if info.nil?
19
+
18
20
  @info = info
19
21
  end
20
22
  end
@@ -1,9 +1,9 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Tag
4
- def id; @info['id'] end
5
- def raw; @info['raw'] end
6
- def content; @info['_content'] end
4
+ def id() @info['id'] end
5
+ def raw() @info['raw'] end
6
+ def content() @info['_content'] end
7
7
 
8
8
  def machine_tag?
9
9
  @info['machine_tag'].to_i == 1 if @info['machine_tag']
@@ -1,16 +1,18 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Visibility
4
- def public?; @info['ispublic'].to_i == 1 if @info['ispublic'] end
5
- def friends?; @info['isfriend'].to_i == 1 if @info['isfriend'] end
6
- def family?; @info['isfamily'].to_i == 1 if @info['isfamily'] end
7
- def contacts?; @info['iscontact'].to_i == 1 if @info['iscontact'] end
4
+ def public?() @info['ispublic'].to_i == 1 if @info['ispublic'] end
5
+ def friends?() @info['isfriend'].to_i == 1 if @info['isfriend'] end
6
+ def family?() @info['isfamily'].to_i == 1 if @info['isfamily'] end
7
+ def contacts?() @info['iscontact'].to_i == 1 if @info['iscontact'] end
8
8
 
9
9
  def [](key)
10
10
  @info[key]
11
11
  end
12
12
 
13
13
  def initialize(info)
14
+ raise ArgumentError if info.nil?
15
+
14
16
  @info = info
15
17
  end
16
18
  end
@@ -7,16 +7,16 @@ require 'date'
7
7
 
8
8
  module Flickrie
9
9
  module Media
10
- def id; @info['id'] end
11
- def secret; @info['secret'] end
12
- def server; @info['server'] end
13
- def farm; @info['farm'] end
14
- def title; @info['title'] end
15
- def description; @info['description'] end
16
- def tags; @info['tags'] end
17
- def media_status; @info['media_status'] end
18
- def path_alias; @info['pathalias'] end
19
- def camera; @info['camera'] end
10
+ def id() @info['id'] end
11
+ def secret() @info['secret'] end
12
+ def server() @info['server'] end
13
+ def farm() @info['farm'] end
14
+ def title() @info['title'] end
15
+ def description() @info['description'] end
16
+ def media_status() @info['media_status'] end
17
+ def path_alias() @info['pathalias'] end
18
+
19
+ def camera() @info['camera'] end
20
20
  # ==== Example
21
21
  #
22
22
  # photo.exif.get('Model') # => 'Canon PowerShot G12'
@@ -25,51 +25,34 @@ module Flickrie
25
25
  # photo.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
26
26
  # photo.exif.get('X-Resolution') # => '180 dpi'
27
27
  #
28
- def exif; @info['exif'] end
28
+ def exif() Exif.new(@info['exif']) rescue nil end
29
29
 
30
- def views_count
31
- @info['views'].to_i if @info['views']
32
- end
33
-
34
- def comments_count
35
- @info['comments_count'].to_i if @info['comments_count']
36
- end
37
-
38
- def location
39
- Location.new(@info['location']) if @info['location']
40
- end
41
-
42
- def machine_tags
43
- tags.select { |tag| tag.machine_tag? } if tags
44
- end
30
+ def views_count() Integer(@info['views']) rescue nil end
31
+ def comments_count() Integer(@info['comments_count']) rescue nil end
45
32
 
46
- def geo_permissions
47
- Visibility.new(@info['geoperms']) if @info['geoperms']
48
- end
33
+ def location() Location.new(@info['location']) rescue nil end
34
+ def geo_permissions() Visibility.new(@info['geoperms']) rescue nil end
49
35
 
50
- def license
51
- License.new(@info['license']) if @info['license']
52
- end
36
+ def tags() @info['tags'].map { |info| Tag.new(info) } rescue nil end
37
+ def machine_tags() tags.select { |tag| tag.machine_tag? } rescue nil end
53
38
 
54
- def posted_at; Time.at(@info['dates']['posted'].to_i) if @info['dates']['posted'] end
55
- def uploaded_at; Time.at(@info['dates']['uploaded'].to_i) if @info['dates']['uploaded'] end
56
- def updated_at; Time.at(@info['dates']['lastupdate'].to_i) if @info['dates']['lastupdate'] end
57
- def taken_at; DateTime.parse(@info['dates']['taken']).to_time if @info['dates']['taken'] end
39
+ def license() License.new(@info['license']) rescue nil end
58
40
 
59
- def taken_at_granularity
60
- @info['dates']['takengranularity'].to_i if @info['dates']['takengranularity']
61
- end
41
+ def posted_at() Time.at(Integer(@info['dates']['posted'])) rescue nil end
42
+ def uploaded_at() Time.at(Integer(@info['dates']['uploaded'])) rescue nil end
43
+ def updated_at() Time.at(Integer(@info['dates']['lastupdate'])) rescue nil end
44
+ def taken_at() DateTime.parse(@info['dates']['taken']).to_time rescue nil end
45
+ def taken_at_granularity() Integer(@info['dates']['takengranularity']) rescue nil end
62
46
 
63
- def owner
64
- User.new(@info['owner']) if @info['owner']
65
- end
47
+ def owner() User.new(@info['owner']) rescue nil end
66
48
 
67
- def safety_level; @info['safety_level'].to_i if @info['safety_level'] end
49
+ def safety_level() Integer(@info['safety_level']) rescue nil end
68
50
 
69
- def safe?; safety_level <= 1 if safety_level end
70
- def moderate?; safety_level == 2 if safety_level end
71
- def restricted?; safety_level == 3 if safety_level end
51
+ def safe?() safety_level <= 1 if safety_level end
52
+ def moderate?() safety_level == 2 if safety_level end
53
+ def restricted?() safety_level == 3 if safety_level end
72
54
 
55
+ # TODO: Take care about the url from #get_info
73
56
  def url
74
57
  if owner and id
75
58
  "http://www.flickr.com/photos/#{owner.nsid}/#{id}"
@@ -78,68 +61,65 @@ module Flickrie
78
61
  end
79
62
  end
80
63
 
81
- def visibility
82
- Visibility.new(@info['visibility']) if @info['visibility']
83
- end
64
+ def visibility() Visibility.new(@info['visibility']) rescue nil end
84
65
 
85
- def primary?; @info['isprimary'].to_i == 1 if @info['isprimary'] end
66
+ def primary?() Integer(@info['isprimary']) == 1 rescue nil end
86
67
 
87
- def favorite?; @info['isfavorite'].to_i == 1 if @info['isfavorite'] end
68
+ def favorite?() Integer(@info['isfavorite']) == 1 rescue nil end
88
69
 
89
- def can_comment?; @info['editability']['cancomment'].to_i == 1 if @info['editability'] end
90
- def can_add_meta?; @info['editability']['canaddmeta'].to_i == 1 if @info['editability'] end
70
+ def can_comment?() Integer(@info['editability']['cancomment']) == 1 rescue nil end
71
+ def can_add_meta?() Integer(@info['editability']['canaddmeta']) == 1 rescue nil end
91
72
 
92
- def can_everyone_comment?
93
- @info['publiceditability']['cancomment'].to_i == 1 if @info['publiceditability']
94
- end
73
+ def can_everyone_comment?() Integer(@info['publiceditability']['cancomment']) == 1 rescue nil end
74
+ def can_everyone_add_meta?() Integer(@info['publiceditability']['canaddmeta']) == 1 rescue nil end
95
75
 
96
- def can_everyone_add_meta?
97
- @info['publiceditability']['canaddmeta'].to_i == 1 if @info['publiceditability']
98
- end
76
+ def can_download?() Integer(@info['usage']['candownload']) == 1 rescue nil end
77
+ def can_blog?() Integer(@info['usage']['canblog']) == 1 rescue nil end
78
+ def can_print?() Integer(@info['usage']['canprint']) == 1 rescue nil end
79
+ def can_share?() Integer(@info['usage']['canshare']) == 1 rescue nil end
99
80
 
100
- def can_download?; @info['usage']['candownload'].to_i == 1 if @info['usage']['candownload'] end
101
- def can_blog?; @info['usage']['canblog'].to_i == 1 if @info['usage']['canblog'] end
102
- def can_print?; @info['usage']['canprint'].to_i == 1 if @info['usage']['canprint'] end
103
- def can_share?; @info['usage']['canshare'].to_i == 1 if @info['usage']['canshare'] end
81
+ def has_people?() Integer(@info['people']['haspeople']) == 1 rescue nil end
104
82
 
105
- def has_people?; @info['people']['haspeople'].to_i == 1 if @info['people'] end
83
+ def faved?() Integer(@info['is_faved']) == 1 rescue nil end
106
84
 
107
- def faved?; @info['is_faved'].to_i == 1 if @info['is_faved'] end
85
+ def notes() @info['notes']['note'].map { |hash| Note.new(hash) } rescue nil end
108
86
 
109
- def notes
110
- @info['notes']['note'].map { |hash| Note.new(hash) } if @info['notes']
111
- end
87
+ def favorites() @info['person'].map { |info| User.new(info) } rescue nil end
112
88
 
113
89
  def [](key)
114
90
  @info[key]
115
91
  end
116
92
 
117
- def get_info(info = nil)
118
- info ||= Flickrie.client.get_media_info(id).body['photo']
93
+ def get_info(params = {}, info = nil)
94
+ info ||= Flickrie.client.get_media_info(id, params).body['photo']
95
+ @info.update(info)
119
96
 
120
- info['title'] = info['title']['_content']
121
- info['description'] = info['description']['_content']
122
- info['comments_count'] = info.delete('comments')['_content']
123
- info['dates']['uploaded'] = info.delete('dateuploaded')
124
- info['tags'] = info['tags']['tag'].map { |info| Tag.new(info) }
97
+ # Fixes
98
+ @info['title'] = @info['title']['_content']
99
+ @info['description'] = @info['description']['_content']
100
+ @info['comments_count'] = @info.delete('comments')['_content']
101
+ @info['dates']['uploaded'] = @info.delete('dateuploaded')
102
+ @info['tags'] = @info['tags']['tag']
125
103
 
126
- @info.update(info)
127
104
  self
128
105
  end
129
106
 
130
107
  def get_exif(params = {}, info = nil)
131
108
  info ||= Flickrie.client.get_media_exif(id, params).body['photo']
109
+ @info.update(info)
132
110
 
133
- @info['camera'] = info['camera'] unless info['camera'].empty?
134
- @info['exif'] = Exif.new(info['exif']) unless info['exif'].empty?
111
+ self
112
+ end
113
+
114
+ def get_favorites(params = {}, info = nil)
115
+ info ||= Flickrie.client.get_media_favorites(id, params).body['photo']
116
+ @info.update(info)
135
117
 
136
118
  self
137
119
  end
138
120
 
139
121
  def initialize(info = {})
140
122
  @info = info
141
- @info['dates'] ||= {}
142
- @info['usage'] ||= {}
143
123
  end
144
124
 
145
125
  module ClassMethods # :nodoc:
@@ -169,11 +149,16 @@ module Flickrie
169
149
  'taken' => info.delete('datetaken'),
170
150
  'takengranularity' => info.delete('datetakengranularity'),
171
151
  }
172
- info['usage'] = {}
173
152
 
174
153
  unless info['tags'].nil?
175
154
  info['tags'] = info['tags'].split(' ').map do |tag_content|
176
- Tag.new('_content' => tag_content)
155
+ {'_content' => tag_content, 'machine_tag' => 0}
156
+ end
157
+ end
158
+ unless info['machine_tags'].nil?
159
+ info['tags'] ||= []
160
+ info['tags'] += info.delete('machine_tags').split(' ').map do |tag_content|
161
+ {'_content' => tag_content, 'machine_tag' => 1}
177
162
  end
178
163
  end
179
164
 
@@ -182,7 +167,7 @@ module Flickrie
182
167
  end
183
168
 
184
169
  def from_info(info)
185
- new('media' => info['media']).get_info(info)
170
+ new('media' => info['media']).get_info({}, info)
186
171
  end
187
172
 
188
173
  def from_user(hash)
@@ -202,7 +187,7 @@ module Flickrie
202
187
  end
203
188
 
204
189
  def from_sizes(info)
205
- new.get_sizes(info)
190
+ new.get_sizes({}, info)
206
191
  end
207
192
 
208
193
  def from_search(hash)
@@ -2,9 +2,7 @@ require 'date'
2
2
 
3
3
  module Flickrie
4
4
  class MediaCount
5
- def value
6
- @info['count'].to_i
7
- end
5
+ def value() Integer(@info['count']) rescue nil end
8
6
 
9
7
  def date_range
10
8
  dates =
@@ -13,8 +11,8 @@ module Flickrie
13
11
  [DateTime.parse(@info['fromdate']).to_time,
14
12
  DateTime.parse(@info['todate']).to_time]
15
13
  when "unix timestamp"
16
- [Time.at(@info['fromdate'].to_i),
17
- Time.at(@info['todate'].to_i)]
14
+ [Time.at(Integer(@info['fromdate'])),
15
+ Time.at(Integer(@info['todate']))]
18
16
  end
19
17
 
20
18
  dates.first..dates.last