flickrmocks 0.8.15 → 0.9.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 (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
@@ -1,98 +1,108 @@
1
1
 
2
2
  module FlickrMocks
3
- class CommonsInstitutions
4
- attr_accessor :per_page,:current_page
5
-
6
- @defaults = FlickrMocks::Models::Helpers.paging_defaults.clone
3
+ module Models
4
+ class CommonsInstitutions
5
+ attr_accessor :per_page,:current_page
6
+
7
+ class << self
8
+ attr_writer :defaults
9
+ def defaults
10
+ @defaults ||= FlickrMocks::Models::Helpers.paging_defaults().clone
11
+ @defaults
12
+ end
13
+ end
7
14
 
8
- class << self
9
- attr_accessor :defaults
10
- end
15
+ def initialize(institutions,options={})
16
+ self.delegated_to_object = institutions
17
+ self.per_page = extract_per_page(options)
18
+ self.current_page = extract_current_page(options)
19
+ end
11
20
 
12
- def initialize(institutions,options={})
13
- self.delegated_to_object = institutions
14
- self.per_page = options[:per_page]
15
- self.current_page = options[:current_page]
16
- end
21
+ # returns the sanitized value stored in :per_page key in the options hash.
22
+ def extract_per_page(options)
23
+ Api::Sanitize.per_page_hash(options)
24
+ end
17
25
 
18
- def default(value)
19
- CommonsInstitutions.defaults[value.to_s.to_sym]
20
- end
26
+ # returns the sanitized value stored in the :page key in the options hash.
27
+ def extract_current_page(options)
28
+ Api::Sanitize.page(options[:current_page] || options[:page])
29
+ end
21
30
 
22
- def ==(other)
23
- per_page == other.per_page and
24
- current_page == other.current_page and
25
- @delegated_to_object == other.instance_eval('@delegated_to_object')
26
- end
31
+ # returns the default value stored in the
32
+ def default(value)
33
+ CommonsInstitutions.defaults[value.to_s.to_sym]
34
+ end
27
35
 
28
- def initialize_copy(orig)
29
- super
30
- @delegated_to_object = @delegated_to_object.clone
31
- end
32
-
33
- def delegated_instance_methods
34
- FlickrMocks::Models::Helpers.array_accessor_methods
35
- end
36
+ def ==(other)
37
+ per_page == other.per_page and
38
+ current_page == other.current_page and
39
+ @delegated_to_object == other.instance_eval('@delegated_to_object')
40
+ end
36
41
 
37
- def method_missing(id,*args,&block)
38
- return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
39
- super
40
- end
42
+ def initialize_copy(orig)
43
+ super
44
+ @delegated_to_object = @delegated_to_object.clone
45
+ end
41
46
 
42
- alias :old_respond_to? :respond_to?
43
- def respond_to?(method,type=false)
44
- return true if delegated_instance_methods.include?(method)
45
- old_respond_to?(method,type)
46
- end
47
+ def delegated_instance_methods
48
+ FlickrMocks::Models::Helpers.array_accessor_methods
49
+ end
47
50
 
48
- alias :old_methods :methods
49
- def methods
50
- delegated_instance_methods + old_methods
51
- end
51
+ def method_missing(id,*args,&block)
52
+ return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
53
+ super
54
+ end
52
55
 
53
- # custom cloning methods
54
- def initialize_copy(orig)
55
- super
56
- @delegated_to_object = @delegated_to_object.map do |institution|
57
- institution.clone
56
+ alias :old_respond_to? :respond_to?
57
+ def respond_to?(method,type=false)
58
+ return true if delegated_instance_methods.include?(method)
59
+ old_respond_to?(method,type)
58
60
  end
59
- end
60
61
 
61
- def total_entries
62
- @delegated_to_object.size
63
- end
62
+ alias :old_methods :methods
63
+ def methods
64
+ delegated_instance_methods + old_methods
65
+ end
64
66
 
65
- def institutions
66
- @delegated_to_object
67
- end
67
+ # custom cloning methods
68
+ def initialize_copy(orig)
69
+ super
70
+ @delegated_to_object = @delegated_to_object.map do |institution|
71
+ institution.clone
72
+ end
73
+ end
68
74
 
69
- def collection
70
- ::WillPaginate::Collection.create(current_page, per_page, total_entries) do |obj|
71
- start = (current_page-1)*per_page
72
- obj.replace(institutions[start, per_page])
75
+ def total_entries
76
+ @delegated_to_object.size
73
77
  end
74
- end
75
78
 
76
- private
77
- def delegated_to_object=(object)
78
- raise ArgumentError, "FlickRaw::ResponseList expected" unless object.class == FlickRaw::ResponseList
79
- @delegated_to_object = object.institution
80
- end
79
+ def institutions
80
+ @delegated_to_object
81
+ end
81
82
 
82
- def per_page=(value)
83
- @per_page = value.to_i == 0 ? default(:per_page) : value.to_i
84
- end
83
+ def collection
84
+ ::WillPaginate::Collection.create(current_page, per_page, total_entries) do |obj|
85
+ start = (current_page-1)*per_page
86
+ obj.replace(institutions[start, per_page])
87
+ end
88
+ end
89
+ private
90
+ def delegated_to_object=(object)
91
+ raise ArgumentError, "FlickRaw::ResponseList expected" unless object.class == FlickRaw::ResponseList
92
+ @delegated_to_object = object.institution
93
+ end
85
94
 
86
- def current_page=(page)
87
- @current_page = sanitize_page(page) > max_page ? max_page : sanitize_page(page)
88
- end
95
+ def per_page=(value)
96
+ @per_page = value.to_i == 0 ? default(:per_page) : value.to_i
97
+ end
89
98
 
90
- def max_page
91
- (total_entries / @per_page.to_f).ceil == 0 ? 1 : (total_entries / @per_page.to_f).ceil
92
- end
99
+ def current_page=(page)
100
+ @current_page = Api::Sanitize.page(page).to_i > max_page ? max_page : Api::Sanitize.page(page).to_i
101
+ end
93
102
 
94
- def sanitize_page(page)
95
- page.to_i < 1 ? 1 : page.to_i
103
+ def max_page
104
+ (total_entries / @per_page.to_f).ceil == 0 ? 1 : (total_entries / @per_page.to_f).ceil
105
+ end
96
106
  end
97
107
  end
98
- end
108
+ end
@@ -1,23 +1,30 @@
1
1
  module FlickrMocks
2
2
  module Models
3
- module Helpers
4
3
 
4
+ # module contains methods that are used internally by the various class wrappers
5
+ # for the FlickRaw::Response and FlickRaw::ResponseList objects.
6
+ module Helpers
7
+ # returns list of array methods. These methods are often used for mimicking
8
+ # array like behavior to classes.
5
9
  def self.array_accessor_methods
6
10
  [:[], :first, :last,:empty?,:length,:size,:each,:each_index,
7
11
  :each_with_index,:map, :select, :keep_if,:at,:fetch, :reverse_each,
8
12
  :find_index, :index,:rindex, :collect,:values_at]
9
13
  end
10
14
 
15
+
16
+ # returns the default values for paging Flickr objects
11
17
  def self.paging_defaults
12
18
  {
13
- :max_entries => 4000,
14
- :per_page => 50,
15
- :current_page => 1
19
+ :max_entries => ::FlickrMocks::Api.default(:max_entries).to_i,
20
+ :per_page => ::FlickrMocks::Api.default(:per_page).to_i,
21
+ :current_page => ::FlickrMocks::Api.default(:page).to_i
16
22
  }
17
23
  end
18
-
24
+
25
+ # returns list of sizes that a Flickr photo can have
19
26
  def self.possible_sizes
20
- [:square, :thumbnail, :small, :medium, :medium_640, :large, :original]
27
+ ::FlickrMocks::Api.default(:possible_sizes)
21
28
  end
22
29
  end
23
30
  end
@@ -0,0 +1,7 @@
1
+ module FlickrMocks
2
+ # wrapper module that contains the classes that wrap the FlickRaw::Response and
3
+ # FlickRaw::ResponseList objects.
4
+ module Models
5
+
6
+ end
7
+ end
@@ -1,101 +1,102 @@
1
1
  module FlickrMocks
2
+ module Models
3
+ class Photo
4
+ def initialize(photo)
5
+ self.delegated_to_object = photo
6
+ @delegated_instance_methods = @delegated_to_object.methods(false).push(:flickr_type)
7
+ @extended_photo = photo.methods.include?(:originalsecret)
8
+ end
2
9
 
3
- class Photo
4
- def initialize(photo)
5
- self.delegated_to_object = photo
6
- @delegated_instance_methods = @delegated_to_object.methods(false).push(:flickr_type)
7
- @extended_photo = photo.methods.include?(:originalsecret)
8
- end
9
-
10
- # Return urls for various sizes
11
- def square
12
- FlickRaw.url_s self
13
- end
10
+ # Return urls for various sizes
11
+ def square
12
+ FlickRaw.url_s self
13
+ end
14
14
 
15
- def original
16
- respond_to?(:originalsecret) ? FlickRaw.url_o(self) : nil
17
- end
15
+ def original
16
+ respond_to?(:originalsecret) ? FlickRaw.url_o(self) : nil
17
+ end
18
18
 
19
- def thumbnail
20
- FlickRaw.url_t self
21
- end
19
+ def thumbnail
20
+ FlickRaw.url_t self
21
+ end
22
22
 
23
- def small
24
- FlickRaw.url_m self
25
- end
23
+ def small
24
+ FlickRaw.url_m self
25
+ end
26
26
 
27
- def medium
28
- FlickRaw.url self
29
- end
27
+ def medium
28
+ FlickRaw.url self
29
+ end
30
30
 
31
- def large
32
- FlickRaw.url_b self
33
- end
31
+ def large
32
+ FlickRaw.url_b self
33
+ end
34
34
 
35
- def medium_640
36
- FlickRaw.url_z self
37
- end
35
+ def medium_640
36
+ FlickRaw.url_z self
37
+ end
38
38
 
39
- def owner_url
40
- FlickRaw.url_photopage self
41
- end
39
+ def owner_url
40
+ FlickRaw.url_photopage self
41
+ end
42
42
 
43
43
 
44
- def owner_id
45
- case owner
46
- when String then owner
47
- else
48
- return owner.nsid if owner.respond_to?(:nsid)
49
- return owner.to_s
44
+ def owner_id
45
+ case owner
46
+ when String then owner
47
+ else
48
+ return owner.nsid if owner.respond_to?(:nsid)
49
+ return owner.to_s
50
+ end
50
51
  end
51
- end
52
52
 
53
- def photo_id
54
- id
55
- end
53
+ def photo_id
54
+ id
55
+ end
56
56
 
57
- def usable?
58
- license.to_i > 3
59
- end
57
+ def usable?
58
+ license.to_i > 3
59
+ end
60
60
 
61
- def ==(other)
62
- @delegated_to_object == other.instance_eval('@delegated_to_object')
63
- end
61
+ def ==(other)
62
+ @delegated_to_object == other.instance_eval('@delegated_to_object')
63
+ end
64
64
 
65
- def initialize_copy(orig)
66
- super
67
- @delegated_to_object = @delegated_to_object.clone
68
- end
65
+ def initialize_copy(orig)
66
+ super
67
+ @delegated_to_object = @delegated_to_object.clone
68
+ end
69
69
 
70
- def delegated_instance_methods
71
- @delegated_instance_methods
72
- end
70
+ def delegated_instance_methods
71
+ @delegated_instance_methods
72
+ end
73
73
 
74
74
 
75
- def method_missing(id,*args,&block)
76
- return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
77
- return medium_640 if id.to_sym == :'medium 640'
78
- super
79
- end
75
+ def method_missing(id,*args,&block)
76
+ return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
77
+ return medium_640 if id.to_sym == :'medium 640'
78
+ super
79
+ end
80
80
 
81
- alias :old_respond_to? :respond_to?
82
- def respond_to?(method,type=false)
83
- return true if method.to_sym == :'medium 640'
84
- return true if delegated_instance_methods.include?(method)
85
- old_respond_to?(method,type)
86
- end
81
+ alias :old_respond_to? :respond_to?
82
+ def respond_to?(method,type=false)
83
+ return true if method.to_sym == :'medium 640'
84
+ return true if delegated_instance_methods.include?(method)
85
+ old_respond_to?(method,type)
86
+ end
87
87
 
88
- alias :old_methods :methods
89
- def methods
90
- delegated_instance_methods + old_methods
91
- end
88
+ alias :old_methods :methods
89
+ def methods
90
+ delegated_instance_methods + old_methods
91
+ end
92
92
 
93
93
 
94
- private
95
- def delegated_to_object=(object)
96
- raise ArgumentError, "FlickRaw::ResponseList expected" if object.class == FlickRaw::ResponseList
97
- raise ArgumentError, 'FlickRaw::Response expected' unless object.class == FlickRaw::Response
98
- @delegated_to_object = object
94
+ private
95
+ def delegated_to_object=(object)
96
+ raise ArgumentError, "FlickRaw::ResponseList expected" if object.class == FlickRaw::ResponseList
97
+ raise ArgumentError, 'FlickRaw::Response expected' unless object.class == FlickRaw::Response
98
+ @delegated_to_object = object
99
+ end
99
100
  end
100
101
  end
101
102
  end
@@ -1,90 +1,92 @@
1
1
  module FlickrMocks
2
- class PhotoDetails
3
- attr_reader :dimensions
2
+ module Models
3
+ class PhotoDetails
4
+ attr_reader :dimensions
4
5
 
5
- def initialize(photo,dimensions)
6
- self.dimensions = dimensions
7
- self.delegated_to_object= photo
8
- raise ArgumentError 'owner id for photo did not match owner id for at least one size' unless valid_owner_for_dimensions?
9
- end
10
-
11
- def author
12
- owner_name.empty? ? owner_username : owner_name
13
- end
14
-
15
- def owner_name
16
- self.owner.realname
17
- end
6
+ def initialize(photo,dimensions)
7
+ self.dimensions = dimensions
8
+ self.delegated_to_object= photo
9
+ raise ArgumentError 'owner id for photo did not match owner id for at least one size' unless valid_owner_for_dimensions?
10
+ end
11
+
12
+ def author
13
+ owner_name.empty? ? owner_username : owner_name
14
+ end
15
+
16
+ def owner_name
17
+ self.owner.realname
18
+ end
18
19
 
19
- def owner_username
20
- self.owner.username
21
- end
20
+ def owner_username
21
+ self.owner.username
22
+ end
22
23
 
23
- def dimensions
24
- @dimensions
25
- end
24
+ def dimensions
25
+ @dimensions
26
+ end
26
27
 
27
- def photo
28
- @delegated_to_object
29
- end
28
+ def photo
29
+ @delegated_to_object
30
+ end
30
31
 
31
- def possible_sizes
32
- FlickrMocks::Models::Helpers.possible_sizes
33
- end
32
+ def possible_sizes
33
+ FlickrMocks::Models::Helpers.possible_sizes
34
+ end
34
35
 
35
- def ==(other)
36
- return false unless other.class == PhotoDetails
37
- (dimensions == other.dimensions) && (@delegated_to_object == other.instance_eval('@delegated_to_object'))
38
- end
36
+ def ==(other)
37
+ return false unless other.class == PhotoDetails
38
+ (dimensions == other.dimensions) && (@delegated_to_object == other.instance_eval('@delegated_to_object'))
39
+ end
39
40
 
40
- # metaprogramming methods
41
- def method_missing(id,*args,&block)
42
- return dimensions.sizes.send(id,*args,&block) if array_accessor_methods.include?(id)
43
- return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
44
- super
45
- end
41
+ # metaprogramming methods
42
+ def method_missing(id,*args,&block)
43
+ return dimensions.sizes.send(id,*args,&block) if array_accessor_methods.include?(id)
44
+ return @delegated_to_object.send(id,*args,&block) if delegated_instance_methods.include?(id)
45
+ super
46
+ end
46
47
 
47
- alias :old_respond_to? :respond_to?
48
- def respond_to?(method,type=false)
49
- delegated_instance_methods.include?(method) || old_respond_to?(method)
50
- end
48
+ alias :old_respond_to? :respond_to?
49
+ def respond_to?(method,type=false)
50
+ delegated_instance_methods.include?(method) || old_respond_to?(method)
51
+ end
51
52
 
52
- alias :old_methods :methods
53
- def methods
54
- delegated_instance_methods + old_methods
55
- end
53
+ alias :old_methods :methods
54
+ def methods
55
+ delegated_instance_methods + old_methods
56
+ end
56
57
 
57
- def delegated_instance_methods
58
- @delegated_to_object.delegated_instance_methods + array_accessor_methods + [:owner_id] + possible_sizes
59
- end
58
+ def delegated_instance_methods
59
+ @delegated_to_object.delegated_instance_methods + array_accessor_methods + [:owner_id] + possible_sizes
60
+ end
60
61
 
61
- # custom cloning methods
62
- def initialize_copy(orig)
63
- super
64
- @dimensions = @dimensions.clone
65
- @delegated_to_object = @delegated_to_object.clone
66
- end
62
+ # custom cloning methods
63
+ def initialize_copy(orig)
64
+ super
65
+ @dimensions = @dimensions.clone
66
+ @delegated_to_object = @delegated_to_object.clone
67
+ end
67
68
 
68
69
 
69
70
 
70
- private
71
- def dimensions=(object)
72
- @dimensions = object.class == PhotoSizes ? object : PhotoSizes.new(object)
73
- end
71
+ private
72
+ def dimensions=(object)
73
+ @dimensions = object.class == PhotoSizes ? object : PhotoSizes.new(object)
74
+ end
74
75
 
75
- def delegated_to_object=(object)
76
- @delegated_to_object = object.is_a?(Photo) ? object : Photo.new(object)
77
- end
76
+ def delegated_to_object=(object)
77
+ @delegated_to_object = object.is_a?(Photo) ? object : Photo.new(object)
78
+ end
78
79
 
79
- def valid_owner_for_dimensions?
80
- dimensions.map do |size|
81
- photo.id == size.id
82
- end.inject(true) do |prev,cur| prev && cur end
83
- end
80
+ def valid_owner_for_dimensions?
81
+ dimensions.map do |size|
82
+ photo.id == size.id
83
+ end.inject(true) do |prev,cur| prev && cur end
84
+ end
84
85
 
85
- def array_accessor_methods
86
- FlickrMocks::Models::Helpers.array_accessor_methods
87
- end
86
+ def array_accessor_methods
87
+ FlickrMocks::Models::Helpers.array_accessor_methods
88
+ end
88
89
 
90
+ end
89
91
  end
90
92
  end