flickrie 1.0.2 → 1.1.0

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 (83) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile +0 -4
  4. data/flickrie.gemspec +2 -2
  5. data/lib/flickrie/api_methods.rb +4 -1
  6. data/lib/flickrie/license.rb +6 -1
  7. data/lib/flickrie/location.rb +29 -12
  8. data/lib/flickrie/media/exif.rb +3 -1
  9. data/lib/flickrie/media/note.rb +24 -13
  10. data/lib/flickrie/media/tag.rb +9 -6
  11. data/lib/flickrie/media/visibility.rb +8 -5
  12. data/lib/flickrie/media.rb +54 -55
  13. data/lib/flickrie/media_count.rb +8 -6
  14. data/lib/flickrie/photo.rb +48 -7
  15. data/lib/flickrie/set.rb +47 -31
  16. data/lib/flickrie/ticket.rb +8 -5
  17. data/lib/flickrie/user.rb +67 -25
  18. data/lib/flickrie/version.rb +1 -1
  19. data/lib/flickrie/video.rb +19 -11
  20. data/spec/custom_matchers.rb +51 -0
  21. data/spec/flickrie/api_methods_spec.rb +112 -31
  22. data/spec/flickrie/error_spec.rb +2 -4
  23. data/spec/flickrie/instance_spec.rb +11 -11
  24. data/spec/flickrie/media_spec.rb +74 -53
  25. data/spec/flickrie/photo_spec.rb +4 -5
  26. data/spec/flickrie/set_spec.rb +23 -12
  27. data/spec/flickrie/upload_client_spec.rb +3 -0
  28. data/spec/flickrie/user_spec.rb +31 -5
  29. data/spec/flickrie/video_spec.rb +13 -13
  30. data/spec/flickrie_spec.rb +15 -0
  31. data/spec/spec_helper.rb +13 -50
  32. data/spec/vcr_cassettes/api_methods/people/get_media_from_user.yml +108 -0
  33. data/spec/vcr_cassettes/api_methods/people/get_public_media_from_user.yml +108 -0
  34. data/spec/vcr_cassettes/api_methods/photos/add_and_remove_tags.yml +528 -0
  35. data/spec/vcr_cassettes/api_methods/photos/get_context.yml +108 -0
  36. data/spec/vcr_cassettes/api_methods/photos/get_counts.yml +108 -0
  37. data/spec/vcr_cassettes/api_methods/photos/get_exif.yml +73 -0
  38. data/spec/vcr_cassettes/api_methods/photos/get_favorites.yml +73 -0
  39. data/spec/vcr_cassettes/api_methods/photos/get_from_contacts.yml +73 -0
  40. data/spec/vcr_cassettes/api_methods/photos/get_info.yml +108 -0
  41. data/spec/vcr_cassettes/api_methods/photos/get_public_from_user_contacts.yml +73 -0
  42. data/spec/vcr_cassettes/api_methods/photos/get_sizes.yml +73 -0
  43. data/spec/vcr_cassettes/api_methods/photos/search.yml +108 -0
  44. data/spec/vcr_cassettes/api_methods/photosets/get_media.yml +108 -0
  45. data/spec/vcr_cassettes/api_methods/{replace.yml → upload/replace.yml} +16 -16
  46. data/spec/vcr_cassettes/api_methods/upload/upload.yml +82 -0
  47. data/spec/vcr_cassettes/api_methods/upload/upload_asynchronously.yml +117 -0
  48. data/spec/vcr_cassettes/error/{a_request_was_made_and_failed.yml → a_request_was_made_and_failed/be_raised.yml} +9 -9
  49. data/spec/vcr_cassettes/error/a_request_was_made_and_failed/have_code_attribute_present.yml +84 -0
  50. data/spec/vcr_cassettes/{api_methods/upload_and_delete.yml → flickrie/a_new_credential_is_filled_in/reset_the_client.yml} +113 -32
  51. data/spec/vcr_cassettes/instance/client_is_already_initialized/be_able_to_call_API_methods.yml +152 -0
  52. data/spec/vcr_cassettes/license/{get.yml → get/have_all_attributes_correctly_set.yml} +4 -4
  53. data/spec/vcr_cassettes/media/{from_contacts.yml → from_contacts/have_all_attributes_correctly_set.yml} +8 -8
  54. data/spec/vcr_cassettes/media/{from_set.yml → from_set/have_all_attributes_correctly_set.yml} +6 -6
  55. data/spec/vcr_cassettes/media/{from_user.yml → from_user/have_all_attributes_correctly_set.yml} +6 -6
  56. data/spec/vcr_cassettes/media/{get_context.yml → get_context/have_all_attributes_correctly_set.yml} +6 -6
  57. data/spec/vcr_cassettes/media/{get_exif.yml → get_exif/get_exif_correctly.yml} +8 -8
  58. data/spec/vcr_cassettes/media/get_info/have_all_attributes_correctly_set.yml +108 -0
  59. data/spec/vcr_cassettes/media/{public_from_user.yml → public_from_user/have_all_attributes_correctly_set.yml} +6 -6
  60. data/spec/vcr_cassettes/media/{search.yml → search/have_all_attributes_correctly_set.yml} +6 -6
  61. data/spec/vcr_cassettes/media_count/{get.yml → get/have_correctly_set_all_attributes.yml} +9 -9
  62. data/spec/vcr_cassettes/o_auth/{incorrect_credentials.yml → incorrect_credentials/raise_exceptions.yml} +42 -42
  63. data/spec/vcr_cassettes/photo/get_info/have_all_attributes_correctly_set.yml +38 -0
  64. data/spec/vcr_cassettes/photo/{get_sizes.yml → get_sizes/have_attributes_correctly_set.yml} +12 -12
  65. data/spec/vcr_cassettes/photo/{search.yml → search/have_all_sizes_available.yml} +6 -6
  66. data/spec/vcr_cassettes/set/{from_user.yml → from_user/have_all_attributes_correctly_set.yml} +18 -18
  67. data/spec/vcr_cassettes/set/{get_info.yml → get_info/have_all_attributes_correctly_set.yml} +36 -36
  68. data/spec/vcr_cassettes/upload_client/content_type/pass_the_content_type.yml +117 -0
  69. data/spec/vcr_cassettes/upload_client/invalid_credentials/raise_errors.yml +276 -0
  70. data/spec/vcr_cassettes/user/{find_by_username_or_email.yml → find_by_username_or_email/have_all_attributes_correctly_set.yml} +9 -9
  71. data/spec/vcr_cassettes/user/get_info/have_all_attributes_correctly_set.yml +73 -0
  72. data/spec/vcr_cassettes/video/get_info/have_all_attributes_correctly_set.yml +38 -0
  73. data/spec/vcr_cassettes/video/{get_sizes.yml → get_sizes/have_all_attributes_correctly_set.yml} +12 -12
  74. metadata +111 -74
  75. data/spec/vcr_cassettes/api_methods/asynchronous_upload.yml +0 -362
  76. data/spec/vcr_cassettes/api_methods/tag_manipulation.yml +0 -178
  77. data/spec/vcr_cassettes/instance/calling_api_methods.yml +0 -231
  78. data/spec/vcr_cassettes/media/get_info.yml +0 -108
  79. data/spec/vcr_cassettes/photo/get_info.yml +0 -38
  80. data/spec/vcr_cassettes/upload_client/content_type.yml +0 -117
  81. data/spec/vcr_cassettes/upload_client/invalid_credentials.yml +0 -208
  82. data/spec/vcr_cassettes/user/get_info.yml +0 -73
  83. data/spec/vcr_cassettes/video/get_info.yml +0 -38
data/.gitignore CHANGED
@@ -2,6 +2,7 @@ TODO.md
2
2
  Gemfile.lock
3
3
  pkg/
4
4
  wiki/
5
+ doc/
5
6
  .DS_Store
6
7
  api_methods.md
7
8
  .bundle/
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Flickrie changelog
2
2
 
3
+ ## Version 1.0.3
4
+
5
+ - Before `Flickrie::User` had only the `#public_photos` method, now, I
6
+ just added the missing `#public_videos`, `#public_media`, `#photos`,
7
+ `#videos` and `#media`.
8
+
9
+ - Fixed Flickr's bug with mixing up the width and the height of a photo
10
+ (not only in the API, but also on their website).
11
+
12
+ ## Version 1.0.2
13
+
14
+ - Fix some mistakes in the documentation
15
+
3
16
  ## Version 1.0.1
4
17
 
5
18
  - Transfered the documentation to YARD. [Documentation](http://rubydoc.info/gems/flickrie/)
data/Gemfile CHANGED
@@ -2,10 +2,6 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
5
- group :test do
6
- gem "faraday", '0.7.6'
7
- end
8
-
9
5
  # You can run `bundle [install] --without extras` if you don't want to install them
10
6
  group :extras do
11
7
  gem "debugger"
data/flickrie.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
8
8
  gem.author = "Janko Marohnić"
9
9
  gem.email = "janko.marohnic@gmail.com"
10
10
  gem.description = %q{This gem wraps the Flickr API with a nice object-oriented interface.}
11
- gem.summary = %q{This gem wraps the Flickr API with a nice object-oriented interface.}
11
+ gem.summary = gem.description
12
12
  gem.homepage = "https://github.com/janko-m/flickrie"
13
13
 
14
14
  gem.files = `git ls-files`.split($\)
@@ -25,6 +25,6 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency "multi_xml", '~> 0.4'
26
26
 
27
27
  gem.add_development_dependency "rake", '~> 0.9'
28
- gem.add_development_dependency "rspec", '>= 2'
28
+ gem.add_development_dependency "rspec", '>= 2.10', '< 3'
29
29
  gem.add_development_dependency "vcr", '~> 2.1'
30
30
  end
@@ -156,6 +156,7 @@ module Flickrie
156
156
  #
157
157
  # @param media_id [String, Fixnum]
158
158
  # @param tags [String] A space delimited string with tags
159
+ # @return [nil]
159
160
  # @api_method [flickr.photos.addTags](http://www.flickr.com/services/api/flickr.photos.addTags.html)
160
161
  #
161
162
  # @note This method requires authentication with "write" permissions.
@@ -169,6 +170,7 @@ module Flickrie
169
170
  # Deletes the photo/video with the given ID.
170
171
  #
171
172
  # @param media_id [String, Fixnum]
173
+ # @return [nil]
172
174
  # @api_method [flickr.photos.delete](http://www.flickr.com/services/api/flickr.photos.delete.html)
173
175
  #
174
176
  # @note This method requires authentication with "delete" permissions.
@@ -385,6 +387,7 @@ module Flickrie
385
387
  # Remove the tag with the given ID
386
388
  #
387
389
  # @param tag_id [String]
390
+ # @return [nil]
388
391
  # @api_method [flickr.photos.removeTag](http://www.flickr.com/services/api/flickr.photos.removeTag.html)
389
392
  #
390
393
  # @note This method requires authentication with "write" permissions.
@@ -436,7 +439,7 @@ module Flickrie
436
439
  # ticket_id = Flickrie.upload(photo)
437
440
  # sleep(10)
438
441
  #
439
- # ticket = Flickrie.check_upload_tickects(ticket_id)
442
+ # ticket = Flickrie.check_upload_tickets(ticket_id)
440
443
  # if ticket.complete?
441
444
  # puts "Photo was uploaded, and its ID is #{ticket.photo_id}"
442
445
  # end
@@ -1,6 +1,11 @@
1
1
  module Flickrie
2
2
  class License
3
- attr_reader :id, :name, :url
3
+ # @return [String]
4
+ attr_reader :id
5
+ # @return [String]
6
+ attr_reader :name
7
+ # @return [String]
8
+ attr_reader :url
4
9
 
5
10
  private
6
11
 
@@ -1,32 +1,49 @@
1
1
  module Flickrie
2
2
  class Location
3
- # @!parse attr_reader :latitude
3
+ # @!parse attr_reader \
4
+ # :latitude, :longitude, :accuracy, :context,
5
+ # :neighbourhood, :locality, :county, :region,
6
+ # :country, :place_id, :woeid, :hash
7
+
8
+ # @return [Fixnum]
4
9
  def latitude() @info['latitude'] end
5
- # @!parse attr_reader :longitude
10
+ # @return [Fixnum]
6
11
  def longitude() @info['longitude'] end
7
- # @!parse attr_reader :accuracy
12
+ # @return [String]
8
13
  def accuracy() @info['accuracy'] end
9
- # @!parse attr_reader :context
14
+ # @return [Fixnum]
10
15
  def context() Integer(@info['context']) rescue nil end
11
16
 
12
- # @!parse attr_reader :neighbourhood
17
+ # Returns a struct with attributes `#name`, `#place_id` and `#woeid`
18
+ #
19
+ # @return [Struct]
13
20
  def neighbourhood() new_area('neighbourhood') end
14
- # @!parse attr_reader :locality
21
+ # Returns a struct with attributes `#name`, `#place_id` and `#woeid`
22
+ #
23
+ # @return [Struct]
15
24
  def locality() new_area('locality') end
16
- # @!parse attr_reader :county
25
+ # Returns a struct with attributes `#name`, `#place_id` and `#woeid`
26
+ #
27
+ # @return [Struct]
17
28
  def county() new_area('county') end
18
- # @!parse attr_reader :region
29
+ # Returns a struct with attributes `#name`, `#place_id` and `#woeid`
30
+ #
31
+ # @return [Struct]
19
32
  def region() new_area('region') end
20
- # @!parse attr_reader :country
33
+ # Returns a struct with attributes `#name`, `#place_id` and `#woeid`
34
+ #
35
+ # @return [Struct]
21
36
  def country() new_area('country') end
22
37
 
23
- # @!parse attr_reader :place_id
38
+ # @return [String]
24
39
  def place_id() @info['place_id'] end
25
- # @!parse attr_reader :woeid
40
+ # @return [String]
26
41
  def woeid() @info['woeid'] end
27
42
 
28
43
  def [](key) @info[key] end
29
- # @!parse attr_reader :hash
44
+ # Returns the raw hash from the response. Useful if something isn't available by methods.
45
+ #
46
+ # @return [Hash]
30
47
  def hash() @info end
31
48
 
32
49
  private
@@ -1,6 +1,8 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Exif
4
+ # @!parse attr_reader :hash
5
+
4
6
  # Gets exif. Example:
5
7
  #
6
8
  # photo.exif.get('Model') # => 'Canon PowerShot G12'
@@ -20,7 +22,7 @@ module Flickrie
20
22
  end
21
23
 
22
24
  def [](key) @info[key] end
23
- # @!parse attr_reader :hash
25
+ # @return [Hash]
24
26
  def hash() @info end
25
27
 
26
28
  private
@@ -1,28 +1,39 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Note
4
- attr_reader :id, :author, :coordinates, :content,
5
- :width, :height
4
+ # @!parse attr_reader \
5
+ # :id, :author, :content, :coordinates, :width,
6
+ # :height, :hash
7
+
8
+ # @return [String]
9
+ def id() @info['id'] end
10
+ # @return [Flickrie::User]
11
+ def author() User.new('nsid' => @info['author'], 'username' => @info['authorname']) end
12
+ # @return [String]
13
+ def content() @info['_content'] end
14
+ # Returns a 2-element array, representing a point.
15
+ #
16
+ # @return [Array<Fixnum>]
17
+ def coordinates() [@info['x'].to_i, @info['y'].to_i] end
18
+ # @return [Fixnum]
19
+ def width() @info['w'].to_i end
20
+ # @return [Fixnum]
21
+ def height() @info['h'].to_i end
6
22
 
7
23
  def to_s
8
- @content
24
+ content
9
25
  end
10
26
 
11
27
  def [](key) @info[key] end
12
- # @!parse attr_reader :hash
28
+ # @return [Fixnum]
13
29
  def hash() @info end
14
30
 
15
31
  private
16
32
 
17
- def initialize(hash)
18
- @id = hash['id']
19
- @author = User.new \
20
- 'nsid' => hash['author'],
21
- 'username' => hash['authorname']
22
- @content = hash['_content']
23
- @coordinates = [hash['x'].to_i, hash['y'].to_i]
24
- @width = hash['w'].to_i
25
- @height = hash['h'].to_i
33
+ def initialize(info)
34
+ raise ArgumentError if info.nil?
35
+
36
+ @info = info
26
37
  end
27
38
  end
28
39
  end
@@ -1,25 +1,28 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Tag
4
- # @!parse attr_reader :id
4
+ # @!parse attr_reader \
5
+ # :id, :raw, :content, :machine_tag?, :author, :hash
6
+
7
+ # @return [String]
5
8
  def id() @info['id'] end
6
- # @!parse attr_reader :raw
9
+ # @return [String]
7
10
  def raw() @info['raw'] end
8
- # @!parse attr_reader :content
11
+ # @return [String]
9
12
  def content() @info['_content'] end
10
13
 
11
- # @!parse attr_reader :machine_tag?
14
+ # @return [Boolean]
12
15
  def machine_tag?
13
16
  @info['machine_tag'].to_i == 1 if @info['machine_tag']
14
17
  end
15
18
 
16
- # @!parse attr_reader :author
19
+ # @return [Flickrie::User]
17
20
  def author
18
21
  User.new('nsid' => @info['author']) if @info['author']
19
22
  end
20
23
 
21
24
  def [](key) @info[key] end
22
- # @!parse attr_reader :hash
25
+ # @return [Hash]
23
26
  def hash() @info end
24
27
 
25
28
  private
@@ -1,17 +1,20 @@
1
1
  module Flickrie
2
2
  module Media
3
3
  class Visibility
4
- # @!parse attr_reader :public?
4
+ # @!parse attr_reader \
5
+ # :public?, :friends?, :family?, :contacts?, :hash
6
+
7
+ # @return [Boolean]
5
8
  def public?() @info['ispublic'].to_i == 1 if @info['ispublic'] end
6
- # @!parse attr_reader :friends?
9
+ # @return [Boolean]
7
10
  def friends?() @info['isfriend'].to_i == 1 if @info['isfriend'] end
8
- # @!parse attr_reader :family?
11
+ # @return [Boolean]
9
12
  def family?() @info['isfamily'].to_i == 1 if @info['isfamily'] end
10
- # @!parse attr_reader :contacts?
13
+ # @return [Boolean]
11
14
  def contacts?() @info['iscontact'].to_i == 1 if @info['iscontact'] end
12
15
 
13
16
  def [](key) @info[key] end
14
- # @!parse attr_reader :hash
17
+ # @return [Hash]
15
18
  def hash() @info end
16
19
 
17
20
  private
@@ -7,24 +7,36 @@ require 'date'
7
7
 
8
8
  module Flickrie
9
9
  module Media
10
- # @!parse attr_reader :id
10
+ # @!parse attr_reader \
11
+ # :id, :secret, :server, :farm, :title, :description,
12
+ # :media_status, :path_alias, :camera, :exif, :views_count,
13
+ # :comments_count, :location, :geo_permissions, :tags,
14
+ # :machine_tags, :license, :posted_at, :uploaded_at,
15
+ # :updated_at, :taken_at, :taken_at_granularity, :owner,
16
+ # :safety_level, :safe?, :moderate?, :restricted?,
17
+ # :url, :visibility, :primary?, :favorite?, :can_comment?,
18
+ # :can_add_meta?, :can_everyone_comment?, :can_everyone_add_meta?,
19
+ # :can_download?, :can_blog?, :can_print?, :can_share?,
20
+ # :has_people?, :faved?, :notes, :favorites, :hash
21
+
22
+ # @return [String]
11
23
  def id() @info['id'] end
12
- # @!parse attr_reader :secret
24
+ # @return [String]
13
25
  def secret() @info['secret'] end
14
- # @!parse attr_reader :server
26
+ # @return [String]
15
27
  def server() @info['server'] end
16
- # @!parse attr_reader :farm
28
+ # @return [Fixnum]
17
29
  def farm() @info['farm'] end
18
- # @!parse attr_reader :title
30
+ # @return [String]
19
31
  def title() @info['title'] end
20
- # @!parse attr_reader :description
32
+ # @return [String]
21
33
  def description() @info['description'] end
22
- # @!parse attr_reader :media_status
34
+ # @return [String]
23
35
  def media_status() @info['media_status'] end
24
- # @!parse attr_reader :path_alias
36
+ # @return [String]
25
37
  def path_alias() @info['pathalias'] end
26
38
 
27
- # @!parse attr_reader :camera
39
+ # @return [String]
28
40
  def camera() @info['camera'] end
29
41
  # Returns exif of the photo/video. Example:
30
42
  #
@@ -35,66 +47,51 @@ module Flickrie
35
47
  # photo.exif.get('X-Resolution') # => '180 dpi'
36
48
  #
37
49
  # @return [Flickrie::Media::Exif]
38
- #
39
- # @!parse attr_reader :exif
40
50
  def exif() Exif.new(@info['exif']) rescue nil end
41
51
 
42
- # @!parse attr_reader :views_count
52
+ # @return [Fixnum]
43
53
  def views_count() Integer(@info['views']) rescue nil end
44
- # @!parse attr_reader :comments_count
54
+ # @return [Fixnum]
45
55
  def comments_count() Integer(@info['comments_count']) rescue nil end
46
56
 
47
57
  # @return [Flickrie::Location]
48
- #
49
- # @!parse attr_reader :location
50
58
  def location() Location.new(@info['location']) rescue nil end
51
59
  # @return [Flickrie::Media::Visibility]
52
- #
53
- # @!parse attr_reader :geo_permissions
54
60
  def geo_permissions() Visibility.new(@info['geoperms']) rescue nil end
55
61
 
56
62
  # @return [Array<Flickrie::Media::Tag>]
57
- #
58
- # @!parse attr_reader :tags
59
63
  def tags() @info['tags'].map { |info| Tag.new(info) } rescue nil end
60
64
  # @return [Array<Flickrie::Media::Tag>]
61
- #
62
- # @!parse attr_reader :machine_tags
63
65
  def machine_tags() tags.select { |tag| tag.machine_tag? } rescue nil end
64
66
 
65
67
  # @return [Flickrie::License]
66
- # @!parse attr_reader :license
67
68
  def license() License.new(@info['license']) rescue nil end
68
69
 
69
- # @!parse attr_reader :posted_at
70
+ # @return [Time]
70
71
  def posted_at() Time.at(Integer(@info['dates']['posted'])) rescue nil end
71
- # @!parse attr_reader :uploaded_at
72
+ # @return [Time]
72
73
  def uploaded_at() Time.at(Integer(@info['dates']['uploaded'])) rescue nil end
73
- # @!parse attr_reader :updated_at
74
+ # @return [Time]
74
75
  def updated_at() Time.at(Integer(@info['dates']['lastupdate'])) rescue nil end
75
- # @!parse attr_reader :taken_at
76
+ # @return [Time]
76
77
  def taken_at() DateTime.parse(@info['dates']['taken']).to_time rescue nil end
77
- # @!parse attr_reader :taken_at_granularity
78
+ # @return [Fixnum]
78
79
  def taken_at_granularity() Integer(@info['dates']['takengranularity']) rescue nil end
79
80
 
80
81
  # @return [Flickrie::User]
81
- #
82
- # @!parse attr_reader :owner
83
82
  def owner() User.new(@info['owner']) rescue nil end
84
83
 
85
- # @!parse attr_reader :safety_level
84
+ # @return [Fixnum]
86
85
  def safety_level() Integer(@info['safety_level']) rescue nil end
87
86
 
88
- # @!parse attr_reader :safe?
87
+ # @return [Boolean]
89
88
  def safe?() safety_level <= 1 if safety_level end
90
- # @!parse attr_reader :moderate?
89
+ # @return [Boolean]
91
90
  def moderate?() safety_level == 2 if safety_level end
92
- # @!parse attr_reader :restricted?
91
+ # @return [Boolean]
93
92
  def restricted?() safety_level == 3 if safety_level end
94
93
 
95
- # @comment TODO: Take care about the url from #get_info
96
- #
97
- # @!parse attr_reader :url
94
+ # @return [String]
98
95
  def url
99
96
  if owner and id
100
97
  "http://www.flickr.com/photos/#{owner.nsid}/#{id}"
@@ -104,56 +101,54 @@ module Flickrie
104
101
  end
105
102
 
106
103
  # @return [Flickrie::Media::Visibility]
107
- #
108
- # @!parse attr_reader :visibility
109
104
  def visibility() Visibility.new(@info['visibility']) rescue nil end
110
105
 
111
- # @!parse attr_reader :primary?
106
+ # @return [Boolean]
112
107
  def primary?() Integer(@info['isprimary']) == 1 rescue nil end
113
108
 
114
- # @!parse attr_reader :favorite?
109
+ # @return [Boolean]
115
110
  def favorite?() Integer(@info['isfavorite']) == 1 rescue nil end
116
111
 
117
- # @!parse attr_reader :can_comment?
112
+ # @return [Boolean]
118
113
  def can_comment?() Integer(@info['editability']['cancomment']) == 1 rescue nil end
119
- # @!parse attr_reader :can_add_meta?
114
+ # @return [Boolean]
120
115
  def can_add_meta?() Integer(@info['editability']['canaddmeta']) == 1 rescue nil end
121
116
 
122
- # @!parse attr_reader :can_everyone_comment?
117
+ # @return [Boolean]
123
118
  def can_everyone_comment?() Integer(@info['publiceditability']['cancomment']) == 1 rescue nil end
124
- # @!parse attr_reader :can_everyone_add_meta?
119
+ # @return [Boolean]
125
120
  def can_everyone_add_meta?() Integer(@info['publiceditability']['canaddmeta']) == 1 rescue nil end
126
121
 
127
- # @!parse attr_reader :can_download?
122
+ # @return [Boolean]
128
123
  def can_download?() Integer(@info['usage']['candownload']) == 1 rescue nil end
129
- # @!parse attr_reader :can_blog?
124
+ # @return [Boolean]
130
125
  def can_blog?() Integer(@info['usage']['canblog']) == 1 rescue nil end
131
- # @!parse attr_reader :can_print?
126
+ # @return [Boolean]
132
127
  def can_print?() Integer(@info['usage']['canprint']) == 1 rescue nil end
133
- # @!parse attr_reader :can_share?
128
+ # @return [Boolean]
134
129
  def can_share?() Integer(@info['usage']['canshare']) == 1 rescue nil end
135
130
 
136
- # @!parse attr_reader :has_people?
131
+ # @return [Boolean]
137
132
  def has_people?() Integer(@info['people']['haspeople']) == 1 rescue nil end
138
133
 
139
- # @!parse attr_reader :faved?
134
+ # @return [Boolean]
140
135
  def faved?() Integer(@info['is_faved']) == 1 rescue nil end
141
136
 
142
137
  # @return [Array<Flickrie::Media::Note>]
143
- #
144
- # @!parse attr_reader :notes
145
138
  def notes() @info['notes']['note'].map { |hash| Note.new(hash) } rescue nil end
146
139
 
147
140
  # @return [Array<Flickrie::User>]
148
- #
149
- # @!parse attr_reader :favorites
150
141
  def favorites() @info['person'].map { |info| User.new(info) } rescue nil end
151
142
 
152
143
  def [](key) @info[key] end
153
- # @!parse attr_reader :hash
144
+ # Returns the raw hash from the response. Useful if something isn't available by methods.
145
+ #
146
+ # @return [Hash]
154
147
  def hash() @info end
155
148
 
156
149
  # Same as calling `Flickrie.get_(photo|video)_info(id)`.
150
+ #
151
+ # @return [self]
157
152
  def get_info(params = {}, info = nil)
158
153
  info ||= Flickrie.client.get_media_info(id, params).body['photo']
159
154
  @info.update(info)
@@ -169,6 +164,8 @@ module Flickrie
169
164
  end
170
165
 
171
166
  # Same as calling `Flickrie.get_(photo|video)_info(id)`.
167
+ #
168
+ # @return [self]
172
169
  def get_exif(params = {}, info = nil)
173
170
  info ||= Flickrie.client.get_media_exif(id, params).body['photo']
174
171
  @info.update(info)
@@ -177,6 +174,8 @@ module Flickrie
177
174
  end
178
175
 
179
176
  # Same as calling `Flickrie.get_(photo|video)_info(id)`.
177
+ #
178
+ # @return [self]
180
179
  def get_favorites(params = {}, info = nil)
181
180
  info ||= Flickrie.client.get_media_favorites(id, params).body['photo']
182
181
  @info.update(info)
@@ -2,12 +2,12 @@ require 'date'
2
2
 
3
3
  module Flickrie
4
4
  class MediaCount
5
- # @!parse attr_reader :value
5
+ # @!parse attr_reader \
6
+ # :value, :date_range, :from, :to, :hash
7
+
6
8
  def value() Integer(@info['count']) rescue nil end
7
9
 
8
10
  # @return [Range]
9
- #
10
- # @!parse attr_reader :date_range
11
11
  def date_range
12
12
  dates =
13
13
  case @dates_kind
@@ -23,13 +23,15 @@ module Flickrie
23
23
  end
24
24
  alias time_interval date_range
25
25
 
26
- # @!parse attr_reader :from
26
+ # @return [Time]
27
27
  def from() date_range.begin end
28
- # @!parse attr_reader :to
28
+ # @return [Time]
29
29
  def to() date_range.end end
30
30
 
31
31
  def [](key) @info[key] end
32
- # @!parse attr_reader :hash
32
+ # Returns the raw hash from the response. Useful if something isn't available by methods.
33
+ #
34
+ # @return [Hash]
33
35
  def hash() @info end
34
36
 
35
37
  private
@@ -1,6 +1,8 @@
1
1
  module Flickrie
2
2
  class Photo
3
3
  include Media
4
+ # @!parse attr_reader \
5
+ # :size, :width, :height, :source_url, :rotation
4
6
 
5
7
  SIZES = {
6
8
  'Square 75' => 'sq',
@@ -15,59 +17,94 @@ module Flickrie
15
17
  'Original' => 'o'
16
18
  }
17
19
 
18
- # @!parse attr_reader :size
20
+ # Returns the current Flickr size of the photo ("Medium 500", for example).
21
+ #
22
+ # @return [String]
19
23
  def size() @size end
20
24
 
25
+ # @return [self]
21
26
  def square!(number) @size = "Square #{number}"; self end
27
+ # @return [self]
22
28
  def thumbnail!() @size = "Thumbnail"; self end
29
+ # @return [self]
23
30
  def small!(number) @size = "Small #{number}"; self end
31
+ # @return [self]
24
32
  def medium!(number) @size = "Medium #{number}"; self end
33
+ # @return [self]
25
34
  def large!(number) @size = "Large #{number}"; self end
35
+ # @return [self]
26
36
  def original!() @size = "Original"; self end
27
37
 
38
+ # @return [self]
28
39
  def square(number) dup.square!(number) end
40
+ # @return [self]
29
41
  def thumbnail() dup.thumbnail! end
42
+ # @return [self]
30
43
  def small(number) dup.small!(number) end
44
+ # @return [self]
31
45
  def medium(number) dup.medium!(number) end
46
+ # @return [self]
32
47
  def large(number) dup.large!(number) end
48
+ # @return [self]
33
49
  def original() dup.original! end
34
50
 
35
51
  # @comment Alternate size methods
52
+ # @return [self]
36
53
  def square75() square(75) end
54
+ # @return [self]
37
55
  def square75!() square!(75) end
56
+ # @return [self]
38
57
  def square150() square(150) end
58
+ # @return [self]
39
59
  def square150!() square!(150) end
60
+ # @return [self]
40
61
  def small240() small(240) end
62
+ # @return [self]
41
63
  def small240!() small!(240) end
64
+ # @return [self]
42
65
  def small320() small(320) end
66
+ # @return [self]
43
67
  def small320!() small!(320) end
68
+ # @return [self]
44
69
  def medium500() medium(500) end
70
+ # @return [self]
45
71
  def medium500!() medium!(500) end
72
+ # @return [self]
46
73
  def medium640() medium(640) end
74
+ # @return [self]
47
75
  def medium640!() medium!(640) end
76
+ # @return [self]
48
77
  def medium800() medium(800) end
78
+ # @return [self]
49
79
  def medium800!() medium!(800) end
80
+ # @return [self]
50
81
  def large1024() large(1024) end
82
+ # @return [self]
51
83
  def large1024!() large!(1024) end
52
84
 
85
+ # @return [self]
53
86
  def largest!() @size = largest_size; self end
87
+ # @return [self]
54
88
  def largest() dup.largest! end
55
89
 
90
+ # @return [Array<String>]
56
91
  def available_sizes
57
92
  SIZES.select { |_,v| @info["url_#{v}"] }.keys
58
93
  end
59
94
 
60
- # @!parse attr_reader :width
61
- def width() Integer(@info["width_#{size_abbr}"]) rescue nil end
62
- # @!parse attr_reader :height
63
- def height() Integer(@info["height_#{size_abbr}"]) rescue nil end
64
- # @!parse attr_reader :source_url
95
+ # @return [Fixnum]
96
+ def width() flickr_size.min rescue nil end
97
+ # @return [Fixnum]
98
+ def height() flickr_size.max rescue nil end
99
+ # @return [String]
65
100
  def source_url() @info["url_#{size_abbr}"] end
66
101
 
67
- # @!parse attr_reader :rotation
102
+ # @return [Fixnum]
68
103
  def rotation() Integer(@info['rotation']) rescue nil end
69
104
 
70
105
  # Same as calling `Flickrie.get_photo_sizes(photo.id)`.
106
+ #
107
+ # @return [self]
71
108
  def get_sizes(params = {}, info = nil)
72
109
  info ||= Flickrie.client.get_media_sizes(id, params).body['sizes']
73
110
  @info['usage'] ||= {}
@@ -111,5 +148,9 @@ module Flickrie
111
148
  def size_abbr
112
149
  SIZES[size]
113
150
  end
151
+
152
+ def flickr_size
153
+ [Integer(@info["width_#{size_abbr}"]), Integer(@info["height_#{size_abbr}"])]
154
+ end
114
155
  end
115
156
  end