flickrmocks 0.8.15 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile.lock +123 -0
  3. data/README.rdoc +104 -30
  4. data/Rakefile +12 -0
  5. data/flickrmocks.gemspec +3 -1
  6. data/lib/flickr_mocks/api/api.rb +80 -27
  7. data/lib/flickr_mocks/api/flickr.rb +69 -23
  8. data/lib/flickr_mocks/api/helpers.rb +25 -12
  9. data/lib/flickr_mocks/api/options.rb +71 -53
  10. data/lib/flickr_mocks/api/sanitize.rb +129 -20
  11. data/lib/flickr_mocks/fixtures.rb +7 -1
  12. data/lib/flickr_mocks/flickraw/custom_clone.rb +3 -1
  13. data/lib/flickr_mocks/flickraw/custom_compare.rb +4 -0
  14. data/lib/flickr_mocks/flickraw/custom_marshal.rb +7 -2
  15. data/lib/flickr_mocks/flickraw/flickraw.rb +6 -0
  16. data/lib/flickr_mocks/helpers.rb +8 -1
  17. data/lib/flickr_mocks/models/commons_institution.rb +45 -34
  18. data/lib/flickr_mocks/models/commons_institutions.rb +85 -75
  19. data/lib/flickr_mocks/models/helpers.rb +13 -6
  20. data/lib/flickr_mocks/models/models.rb +7 -0
  21. data/lib/flickr_mocks/models/photo.rb +76 -75
  22. data/lib/flickr_mocks/models/photo_details.rb +71 -69
  23. data/lib/flickr_mocks/models/photo_dimensions.rb +80 -78
  24. data/lib/flickr_mocks/models/photo_search.rb +115 -88
  25. data/lib/flickr_mocks/models/photo_size.rb +57 -56
  26. data/lib/flickr_mocks/models/photo_sizes.rb +68 -67
  27. data/lib/flickr_mocks/models/photos.rb +104 -99
  28. data/lib/flickr_mocks/stubs.rb +151 -14
  29. data/lib/flickr_mocks/version.rb +7 -1
  30. data/spec/api/api_spec.rb +26 -8
  31. data/spec/api/flickr_spec.rb +19 -19
  32. data/spec/api/helper_spec.rb +20 -20
  33. data/spec/api/options_spec.rb +170 -124
  34. data/spec/api/sanitize_spec.rb +174 -59
  35. data/spec/base/stubs_spec.rb +37 -74
  36. data/spec/base/version_spec.rb +11 -4
  37. data/spec/models/commons_institution_spec.rb +3 -2
  38. data/spec/models/commons_institutions_spec.rb +34 -5
  39. data/spec/models/helpers_spec.rb +7 -6
  40. data/spec/models/photo_details_spec.rb +12 -11
  41. data/spec/models/photo_dimensions_spec.rb +5 -4
  42. data/spec/models/photo_search_spec.rb +50 -8
  43. data/spec/models/photo_size_spec.rb +4 -3
  44. data/spec/models/photo_sizes_spec.rb +6 -5
  45. data/spec/models/photo_spec.rb +6 -4
  46. data/spec/models/photos_spec.rb +9 -7
  47. data/spec/shared_examples/hash_options/date_hash_option.rb +42 -0
  48. data/spec/shared_examples/hash_options/page_hash_option.rb +23 -0
  49. data/spec/shared_examples/hash_options/perpage_hash_option.rb +43 -0
  50. data/spec/shared_examples/hash_options/tag_mode_hash_option.rb +31 -0
  51. data/spec/shared_examples/stub_helpers.rb +140 -0
  52. data/spec/spec_helper.rb +5 -5
  53. metadata +55 -16
data/.gitignore CHANGED
@@ -21,3 +21,6 @@ pkg
21
21
  ## PROJECT::SPECIFIC
22
22
  nbproject
23
23
  config.yml
24
+
25
+ ## documentation
26
+ doc
data/Gemfile.lock ADDED
@@ -0,0 +1,123 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ flickrmocks (0.8.15)
5
+ chronic
6
+ flickraw (>= 0.8.2)
7
+ ruby-debug19 (>= 0.11.6)
8
+ will_paginate (>= 3.0.pre2)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ abstract (1.0.0)
14
+ actionmailer (3.0.3)
15
+ actionpack (= 3.0.3)
16
+ mail (~> 2.2.9)
17
+ actionpack (3.0.3)
18
+ activemodel (= 3.0.3)
19
+ activesupport (= 3.0.3)
20
+ builder (~> 2.1.2)
21
+ erubis (~> 2.6.6)
22
+ i18n (~> 0.4)
23
+ rack (~> 1.2.1)
24
+ rack-mount (~> 0.6.13)
25
+ rack-test (~> 0.5.6)
26
+ tzinfo (~> 0.3.23)
27
+ activemodel (3.0.3)
28
+ activesupport (= 3.0.3)
29
+ builder (~> 2.1.2)
30
+ i18n (~> 0.4)
31
+ activerecord (3.0.3)
32
+ activemodel (= 3.0.3)
33
+ activesupport (= 3.0.3)
34
+ arel (~> 2.0.2)
35
+ tzinfo (~> 0.3.23)
36
+ activeresource (3.0.3)
37
+ activemodel (= 3.0.3)
38
+ activesupport (= 3.0.3)
39
+ activesupport (3.0.3)
40
+ archive-tar-minitar (0.5.2)
41
+ arel (2.0.6)
42
+ builder (2.1.2)
43
+ chronic (0.3.0)
44
+ columnize (0.3.2)
45
+ diff-lcs (1.1.2)
46
+ erubis (2.6.6)
47
+ abstract (>= 1.0.0)
48
+ factory_girl (1.3.2)
49
+ factory_girl_rails (1.0)
50
+ factory_girl (~> 1.3)
51
+ rails (>= 3.0.0.beta4)
52
+ faker (0.3.1)
53
+ flickraw (0.8.3)
54
+ json (>= 1.1.1)
55
+ flickraw-cached (20100707.1)
56
+ flickraw
57
+ i18n (0.5.0)
58
+ json (1.4.6)
59
+ linecache19 (0.5.11)
60
+ ruby_core_source (>= 0.1.4)
61
+ mail (2.2.12)
62
+ activesupport (>= 2.3.6)
63
+ i18n (>= 0.4.0)
64
+ mime-types (~> 1.16)
65
+ treetop (~> 1.4.8)
66
+ mime-types (1.16)
67
+ polyglot (0.3.1)
68
+ rack (1.2.1)
69
+ rack-mount (0.6.13)
70
+ rack (>= 1.0.0)
71
+ rack-test (0.5.6)
72
+ rack (>= 1.0)
73
+ rails (3.0.3)
74
+ actionmailer (= 3.0.3)
75
+ actionpack (= 3.0.3)
76
+ activerecord (= 3.0.3)
77
+ activeresource (= 3.0.3)
78
+ activesupport (= 3.0.3)
79
+ bundler (~> 1.0)
80
+ railties (= 3.0.3)
81
+ railties (3.0.3)
82
+ actionpack (= 3.0.3)
83
+ activesupport (= 3.0.3)
84
+ rake (>= 0.8.7)
85
+ thor (~> 0.14.4)
86
+ rake (0.8.7)
87
+ rspec (2.3.0)
88
+ rspec-core (~> 2.3.0)
89
+ rspec-expectations (~> 2.3.0)
90
+ rspec-mocks (~> 2.3.0)
91
+ rspec-core (2.3.1)
92
+ rspec-expectations (2.3.0)
93
+ diff-lcs (~> 1.1.2)
94
+ rspec-mocks (2.3.0)
95
+ ruby-debug-base19 (0.11.24)
96
+ columnize (>= 0.3.1)
97
+ linecache19 (>= 0.5.11)
98
+ ruby_core_source (>= 0.1.4)
99
+ ruby-debug19 (0.11.6)
100
+ columnize (>= 0.3.1)
101
+ linecache19 (>= 0.5.11)
102
+ ruby-debug-base19 (>= 0.11.19)
103
+ ruby_core_source (0.1.4)
104
+ archive-tar-minitar (>= 0.5.2)
105
+ thor (0.14.6)
106
+ treetop (1.4.9)
107
+ polyglot (>= 0.3.1)
108
+ tzinfo (0.3.23)
109
+ will_paginate (3.0.pre2)
110
+
111
+ PLATFORMS
112
+ ruby
113
+
114
+ DEPENDENCIES
115
+ chronic
116
+ factory_girl_rails (>= 1.0)
117
+ faker (>= 0.3.1)
118
+ flickraw (>= 0.8.2)
119
+ flickraw-cached (>= 0.8.2)
120
+ flickrmocks!
121
+ rspec (>= 2.2.0)
122
+ ruby-debug19 (>= 0.11.6)
123
+ will_paginate (>= 3.0.pre2)
data/README.rdoc CHANGED
@@ -1,41 +1,116 @@
1
- == Welcome to FlickrMocks
1
+ = FlickrMocks
2
2
 
3
- FlickrMocks makes it possible to Marshal responses generated from the FLickRaw
4
- gem. This is useful for Mocking/Stubbing the Flickr interface for testing
5
- purposes.
3
+ Wiki[http://wiki.github.com/takaltoo/flickrmocks] | RDocs[http://rdoc.info/projects/takaltoo/flickrmocks]
6
4
 
7
- The FlickRaw::Response and FlickRaw::ResponseList objects can not be Marshaled
8
- because they contain singleton's.
5
+ FlickrMocks simplifies access to the Flickr API by providing wrappers and helpers on top of
6
+ the FlickRaw[https://github.com/hanklords/flickraw] gem.
9
7
 
10
- == Getting Started
8
+ == Installation
9
+ In a standalone ruby project:
10
+ gem install flickrmocks
11
11
 
12
- 1. Install flickrmocks:
13
- <tt>gem install flickrmocks</tt>
12
+ # in your code
13
+ require 'flickrmocks
14
14
 
15
- 2. require 'flickrmocks'
15
+ In <b>Rails 3</b>, add this to your Gemfile.
16
16
 
17
- 3. You should be able to Marshal/Unmarshal FlickRaw::Response and FlickRaw::ResponseList
18
- classes.
17
+ gem "flickrmocks"
19
18
 
20
- FlickRaw.api_key = 'xxx your flickr api key goes here'
21
- a = flickr.photos.search :tags => 'dog'
22
- b = Marshal.dump(a)
23
-
24
- Marshal.load(b)
25
-
26
- == Rails Installation (Test::Unit)
19
+ In <b>Rails 2</b>, add this to your environment.rb file.
20
+
21
+ config.gem "flickrmocks"
22
+
23
+ Alternatively, you can install it as a plugin.
27
24
 
28
- Specify the gem dependency in your config/environment.rb file:
25
+ rails plugin install git://github.com/takaltoo/flickrmocks.git
29
26
 
30
- Rails::Initializer.run do |config|
31
- config.gem "flickrmocks", :lib => "flickrmocks"
32
- end
27
+ == Getting Started
28
+ FlickrMocks API helpers expect the FlickRaw.api_key to be initialized before they are called:
29
+ FlickRaw.api_key = your_flickr_api_key
30
+
31
+ In Rails you can automate the initialization by creating the initializer file
32
+ config/initializers/flickraw_config.rb with the content:
33
+
34
+ FlickRaw.api_key = your_flickr_api_key[http://www.flickr.com/services/api/misc.api_keys.html]
35
+
36
+ Alternatively, your flickr api key can be placed into a separate
37
+ YAML[http://railscasts.com/episodes/85-yaml-configuration-file] configuration file.
38
+ In this scenario the contents of the config/initializers/flickrwa_config.rb would be something like:
39
+
40
+ FlickRaw.api_key = APP_CONFIG['flickr_api_key']
41
+
42
+ Your config/config.yml could look something similar to this (Note: you can use
43
+ this file to place all your custom configurations):
44
+
45
+ development:
46
+ flickr_api_key: xyz
47
+ test:
48
+ flickr_api_key: xyz
49
+ production:
50
+ flickr_api_key: xyz
51
+
52
+ == Using the search API
53
+ FlickrMocks::Api.photo(options_hash), returns object of class FlickrMocks::Photo.
54
+ The options accepted include:
55
+ :photo_id => "id for photo"
56
+ :secret => "secret for photo"
57
+ FlickrMocks::Api.photo_details(options_hash), returns object of class FlickrMocks::PhotoDetails.
58
+ The options accepted include:
59
+ :photo_id => "id for photo"
60
+ :secret => "secret for photo"
61
+ FlickrMocks::Api.photos(options_hash), returns object of class FlickrMocks::PhotoSearch.
62
+ The options accepted include:
63
+ :search_terms => 'search terms' # comma separated list of search terms 'happy cow, pasture'
64
+ :owner_id => 'id for owner of photo' # either :owner_id or :search_terms must be specified
65
+ :tag_mode => 'all' # optional argument, can be either all or any
66
+ :per_page => '50' # optional argument, can be any number greater than 0
67
+ :page => '1' # optional argument, can be any number greater than 0
68
+ :base_url => 'url' # optional argument
69
+ FlickrMocks::Api.photo_sizes(options_hash), returns object of class FlickrMocks::PhotoSizes.
70
+ The options accepted include:
71
+ :photo_id => "id for photo"
72
+ :secret => "secret for photo" # optional argument
73
+ FlickrMocks::Api.interesting_photos(options_hash), returns object of class FlickrMocks::PhotoSearch.
74
+ The options accepted include:
75
+ :date => '2010-10-10' # date of format YYYY-MM-DD
76
+ :per_page => 'number' # optional argument
77
+ :page => 'number' # optional argument
78
+ FlickrMocks::Api.commons_institutions(options_hash), returns object of class FlickrMocks::CommonsInstitutions.
79
+ The options accepted include:
80
+ :per_page => 'number' # optional argument
81
+ :current_page => 'number' # optional argument
82
+
83
+ == Stubs for testing
84
+ FlickrMocks provides Rspec 2.0 stubs for the search API routines. To stub all the routines simply call:
85
+
86
+ FlickrMocks::Stubs::Api.all
87
+
88
+ By calling FlickrMocks::Stubs::Api.all the following methods will be stubbed.
89
+ FlickrMocks::Api.photo
90
+ FlickrMocks::Api.photos
91
+ FlickrMocks::Api.photo_details
92
+ FlickrMocks::Api.photo_sizes
93
+ FlickrMocks::Api.interesting_photos
94
+ FlickrMocks::Api.commons_institutions
95
+
96
+ NOTE: the stubs return errors when not called with proper options. Moreover, some of the stubs return
97
+ different objects depending on how they are called. For additional details please
98
+ refer RDocs[http://rdoc.info/projects/takaltoo/flickrmocks].
99
+
100
+ == Additional Docs
101
+
102
+ * {RDOCs}[http://rdoc.info/projects/takaltoo/flickrmocks]
103
+ * {See more}[http://wiki.github.com/takaltoo/flickrmocks/]
104
+ * Run the specs manually once you've checked out the repository:
105
+ rspec spec -f d
33
106
 
34
- Then:
107
+
108
+ == Questions or Problems?
35
109
 
36
- $ rake gems:install
37
- $ rake gems:unpack
110
+ If you have any issues with FlickrMocks which you cannot find the solution to in the documentation,
111
+ please add an {issue on GitHub}[http://github.com/takaltoo/flickrmocks/issues] or fork the project and send a pull request.
38
112
 
113
+ To get the specs running you should call +bundle+ and then +rake+.
39
114
 
40
115
 
41
116
  == Note on Patches/Pull Requests
@@ -45,15 +120,14 @@ Then:
45
120
  * Add tests for it. This is important so I don't break it in a
46
121
  future version unintentionally.
47
122
  * Commit, do not mess with rakefile, version, or history.
48
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
123
+ (if you want to have your own version, that is fine but bump version in a commit
124
+ by itself I can ignore when I pull)
49
125
  * Send me a pull request. Bonus points for topic branches.
50
126
 
51
-
52
-
53
127
  == License
54
128
 
55
129
  FlickrMocks is released under the MIT license.
56
130
 
57
131
  == Copyright
58
132
 
59
- Copyright (c) 2010 Takaltoo.
133
+ Copyright (c) 2010 Takaltoo
data/Rakefile CHANGED
@@ -1,2 +1,14 @@
1
1
  require 'bundler'
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'rspec/core/rake_task'
5
+
2
6
  Bundler::GemHelper.install_tasks
7
+
8
+ desc "Run RSpec"
9
+ RSpec::Core::RakeTask.new do |t|
10
+ t.verbose = false
11
+ end
12
+
13
+ task :default => :spec
14
+
data/flickrmocks.gemspec CHANGED
@@ -27,9 +27,11 @@ Gem::Specification.new do |s|
27
27
  s.require_paths = ["lib"]
28
28
  s.add_runtime_dependency(%q<flickraw>, [">= 0.8.2"])
29
29
  s.add_runtime_dependency(%q<chronic>, [">= 0"])
30
+ s.add_runtime_dependency(%q<ruby-debug19>, [">= 0.11.6"])
31
+ s.add_runtime_dependency(%q<will_paginate>, [">= 3.0.pre2"])
30
32
  s.add_development_dependency(%q<rspec>, [">= 2.2.0"])
31
- s.add_development_dependency(%q<capybara>, [">= 0"])
32
33
  s.add_development_dependency(%q<factory_girl_rails>, [">= 1.0"])
33
34
  s.add_development_dependency(%q<faker>, [">= 0.3.1"])
35
+ s.add_development_dependency(%q<flickraw-cached>, [">= 0.8.2"])
34
36
  end
35
37
 
@@ -1,53 +1,106 @@
1
- module FlickrMocks
2
-
1
+ module FlickrMocks
2
+ # Wrappers for performing queries against the Flickr API's. Uses the
3
+ # FlickRaw gem to perform the queries. Query results are encapsulated in easy-to-use
4
+ # Ruby classes.
5
+ #
6
+ # Before calling the API methods you must initialize FlickRaw with your api_key:
7
+ #
8
+ # FlickRaw.api_key = your_flickr_api_key
3
9
  class Api
4
10
  @defaults = {
11
+ :page => '1',
5
12
  :per_page => '200',
6
13
  :license => '4,5,6,7',
7
14
  :media => 'photos',
8
15
  :extras => 'license',
16
+ :max_entries => '4000',
9
17
  :tag_mode => 'any',
10
- :flickr_tag_modes => ['any','all']
18
+ :possible_tag_modes => ['any','all'],
19
+ :possible_sizes => [:square, :thumbnail, :small, :medium, :medium_640, :large, :original],
11
20
  }
12
-
21
+
13
22
  class << self
14
23
  attr_accessor :defaults
15
24
  end
16
25
 
17
- def self.photos(params)
18
- raise ArgumentError.new("Expecting a Hash argument.") unless params.is_a?(Hash)
19
- photos = Api.flickr_photos(params)
20
- PhotoSearch.new photos,Api.search_params(params)
26
+ # returns the default value stored in the class instance variable @defaults hash.
27
+ def self.default(value)
28
+ Api.defaults[value.to_sym]
21
29
  end
22
30
 
23
- def self.photo_details(params)
24
- raise ArgumentError.new("Expecting a Hash argument.") unless params.is_a?(Hash)
25
- photo = Api.flickr_photo(params)
26
- sizes = Api.flickr_photo_sizes(params)
27
- @this = @photo = PhotoDetails.new(photo,sizes)
31
+ # Searches for photos that match the user provided parameters.
32
+ # Sample usage:
33
+ # Api.photos(:search_terms => 'france')
34
+ # Options hash accepts:
35
+ # :search_terms : string with comma separated list of terms 'france,lyon'
36
+ # :owner_id : pptional string containing the id for the owner of the photo.
37
+ # :per_page : optional string containing the maximum number of photos returned in a single page. The default value is '200'
38
+ # :page : optional string containing the page for search results to be returned. The default is '1'
39
+ # :tag_mode : optionsl string containing either 'any' or 'all'. Affects the interpretation of the search terms to the FlickRaw API.
40
+ def self.photos(options)
41
+ raise ArgumentError.new("Expecting a Hash argument.") unless options.is_a?(Hash)
42
+ photos = Api::Flickr.photos(options)
43
+ Models::PhotoSearch.new photos,options
28
44
  end
29
45
 
30
- def self.photo(params)
31
- raise ArgumentError.new("Expecting a Hash argument") unless params.is_a?(Hash)
32
- Photo.new Api.flickr_photo(params)
46
+ # Retrieves detailed information for a photo. A PhotoDetails object that encapsulates
47
+ # the retrieved data into an easy-to-use Ruby class is returned. Sample usage:
48
+ # Api.photo_details(:photo_id => '1234'
49
+ # Options hash accepts:
50
+ # :photo_id : required string that contains the id for the photo
51
+ # :secret : optional string that contains the flickr secret for photo. When provided query is slightly faster
52
+ def self.photo_details(options)
53
+ raise ArgumentError.new("Expecting a Hash argument.") unless options.is_a?(Hash)
54
+ photo = Api::Flickr.photo(options)
55
+ sizes = Api::Flickr.photo_sizes(options)
56
+ Models::PhotoDetails.new(photo,sizes)
33
57
  end
34
58
 
35
- def self.photo_sizes(params)
36
- raise ArgumentError.new("Expecting a Hash argument") unless params.is_a?(Hash)
37
- PhotoSizes.new Api.flickr_photo_sizes(params)
59
+ # Retrieve basic information for a photo. Returns object of class Photo.
60
+ # Sample usage:
61
+ # Api.photo(:photo_id => '1234')
62
+ # Options hash accepts:
63
+ # :photo_id : required string that contains the id for the photo
64
+ # :secret : optional string that contains the flickr secret for photo. When provided query is slightly faster
65
+ def self.photo(options)
66
+ raise ArgumentError.new("Expecting a Hash argument") unless options.is_a?(Hash)
67
+ Models::Photo.new Api::Flickr.photo(options)
38
68
  end
39
69
 
40
- def self.interesting_photos(params)
41
- raise ArgumentError.new("Expecting a Hash argument") unless params.is_a?(Hash)
42
- photos = Api.flickr_interestingness(params)
43
- PhotoSearch.new photos,Api.interesting_params(params)
70
+ # Retrieves available sizes for a given photo. Returns object of class PhotoSize.
71
+ # Sample usage:
72
+ # Api.photo_sizes(:photo_id => '1234')
73
+ # Options hash accepts:
74
+ # :photo_id : required string that contains the id for the photo
75
+ # :secret : optional string that contains the flickr secret for photo. When provided query is slightly faster
76
+ def self.photo_sizes(options)
77
+ raise ArgumentError.new("Expecting a Hash argument") unless options.is_a?(Hash)
78
+ Models::PhotoSizes.new Api::Flickr.photo_sizes(options)
44
79
  end
45
80
 
46
- def self.commons_institutions(params)
47
- raise ArgumentError.new("Expecting a Hash argument") unless params.is_a?(Hash)
48
- institutions = Api.flickr_commons_institutions
49
- CommonsInstitutions.new institutions,Api.commons_institutions_params(params)
81
+ # Retrieves interesting photos for a given date. Returns object of class PhotoSearch.
82
+ # Sample usage:
83
+ # Api.interesting_photos(:date => '2000-01-01'
84
+ # Options hash accepts:
85
+ # :date : string with date in the format yyyy-mm-dd
86
+ # :per_page : optional string containing the maximum number of photos returned in a single page. The default value is '200'
87
+ # :page : optional string containing the page for search results to be returned. The default is '1'
88
+ def self.interesting_photos(options)
89
+ raise ArgumentError.new("Expecting a Hash argument") unless options.is_a?(Hash)
90
+ photos = Api::Flickr.interestingness(options)
91
+ Models::PhotoSearch.new photos,options
50
92
  end
51
93
 
94
+ # Retrieves list of commons institutions. Returns object of class CommonsInstitutions.
95
+ # Sample usage:
96
+ # Api.commons_institutions({})
97
+ # Options hash accepts:
98
+ # :per_page : optional string containing the maximum number of photos returned in a single page. The default value is '200'
99
+ # :page : optional string containing the page for search results to be returned. The default is '1'
100
+ def self.commons_institutions(options)
101
+ raise ArgumentError.new("Expecting a Hash argument") unless options.is_a?(Hash)
102
+ institutions = Api::Flickr.commons_institutions
103
+ Models::CommonsInstitutions.new institutions,options
104
+ end
52
105
  end
53
106
  end
@@ -1,31 +1,77 @@
1
1
  module FlickrMocks
2
-
3
2
  class Api
4
- # Not required for testing, simple wrappers for flickr* methods
5
- def self.flickr_photos(params)
6
- flickr.photos.search self.search_options(params)
7
- end
3
+ # Wrapper methods for accessing Flickr Api. Module is used internally.
4
+ module Flickr
5
+ # Wrapper for flickr.photos.search Flickr API call. Sample usage:
6
+ #
7
+ # self.photos(:search_terms => 'france')
8
+ #
9
+ # Options hash accepts:
10
+ # :search_terms : string with comma separated list of terms 'france,lyon'
11
+ # :owner_id : pptional string containing the id for the owner of the photo.
12
+ # :per_page : optional string containing the maximum number of photos returned in a single page. The default value is '200'
13
+ # :page : optional string containing the page for search results to be returned. The default is '1'
14
+ # :tag_mode : optionsl string containing either 'any' or 'all'. Affects the interpretation of the search terms to the FlickRaw API.
15
+ def self.photos(options)
16
+ flickr.photos.search Api::Options.search(options)
17
+ end
8
18
 
9
- def self.flickr_photo(params)
10
- flickr.photos.getInfo self.photo_options(params)
11
- end
19
+ # Wrapper for flickr.photos.getInfo Flickr API call. Sample usage:
20
+ #
21
+ # self.photo(:photo_id => '123')
22
+ #
23
+ # Options hash accepts:
24
+ # :photo_id : required string that contains the id for the photo
25
+ # :secret : optional string that contains the flickr secret for photo. When provided query is slightly faster
26
+ def self.photo(options)
27
+ flickr.photos.getInfo Api::Options.photo(options)
28
+ end
12
29
 
13
- def self.flickr_photo_sizes(params)
14
- flickr.photos.getSizes self.photo_options(params)
15
- end
30
+ # Wrapper for flickr.photos-getSizes Flickr API call. Sample usage:
31
+ #
32
+ # self.photo_sizes(:photo_id => '1', :secret => 'abcdef')
33
+ #
34
+ # Options hash accepts:
35
+ # :photo_id : required string that contains the id for the photo
36
+ # :secret : optional string that contains the flickr secret for photo. When provided query is slightly faster
37
+ def self.photo_sizes(options)
38
+ flickr.photos.getSizes Api::Options.photo(options)
39
+ end
16
40
 
17
- def self.flickr_interestingness(params)
18
- flickr.interestingness.getList self.interesting_options(params)
19
- end
41
+ # Wrapper for flickr.interestingness.getList Flickr API call. Sample usage:
42
+ #
43
+ # self.interestingness(:dage => '2010-10-10')
44
+ #
45
+ # Options hash accepts:
46
+ # :date : string containing date of format 'YYYY-MM-DD'
47
+ # :per_page : optional string containing maximum number of items per page
48
+ # :page : optional string containing the page to retrieve for the query
49
+ def self.interestingness(options)
50
+ flickr.interestingness.getList Api::Options.interesting(options)
51
+ end
20
52
 
21
- def self.flickr_author(params)
22
- flickr.photos.search self.author_options(params)
23
- end
24
-
25
- def self.flickr_commons_institutions
26
- flickr.commons.getInstitutions
53
+ # Wrapper for flickr.photos-search Flickr API call. Sample usage:
54
+ #
55
+ # self.author(:owner_id => '20')
56
+ #
57
+ # Options hash accepts:
58
+ # :owner_id : string containing owner for the photo. This gets mapped to :user_id
59
+ # :per_page : optional string containing maximum number of items per page
60
+ # :page : optional string containing the page to retrieve for the query
61
+ def self.author(options)
62
+ flickr.photos.search Api::Options.author(options)
63
+ end
64
+
65
+ # wrapper for flickr.commons.getInstitutions Flickr API call. Sample usage:
66
+ #
67
+ # self.commons_institutions
68
+ #
69
+ # Options hash accepts:
70
+ # :per_page : optional string containing maximum number of items per page
71
+ # :page : optional string containing the page to retrieve for the query
72
+ def self.commons_institutions
73
+ flickr.commons.getInstitutions
74
+ end
27
75
  end
28
76
  end
29
- end
30
-
31
-
77
+ end
@@ -1,19 +1,32 @@
1
1
  module FlickrMocks
2
2
  class Api
3
- # default control values
4
- def self.default(value)
5
- Api.defaults[value.to_sym]
6
- end
7
-
8
- def self.time(date=nil)
9
- begin
10
- date = Chronic.parse(date).strftime('%Y-%m-%d')
11
- date ? date : Chronic.parse('yesterday').strftime('%Y-%m-%d')
12
- rescue
13
- Chronic.parse('yesterday').strftime('%Y-%m-%d')
3
+ module Helpers
4
+ # returns a date string of format YYYY-MM-DD. If the supplied date is ambiguous
5
+ # it returns yesterday's date in the format YYYY-MM-DD. Sample usage:
6
+ #
7
+ # self.date('2010-10-10')
8
+ # self.date('yesterday')
9
+ def self.date(date=nil)
10
+ self.valid_date?(date) ? self.parse_date(date) : self.parse_date('yesterday')
11
+ end
12
+
13
+ # returns true when supplied date is of format YYYY-MM-DD. Sample usage:
14
+ #
15
+ # self.valid_date?('2010-10-10')
16
+ def self.valid_date?(date)
17
+ begin
18
+ self.parse_date(date)
19
+ true
20
+ rescue
21
+ false
22
+ end
14
23
  end
15
- end
16
24
 
25
+ private
26
+ def self.parse_date(date)
27
+ Chronic.parse(date).strftime('%Y-%m-%d')
28
+ end
17
29
 
30
+ end
18
31
  end
19
32
  end