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