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.
- data/.gitignore +3 -0
- data/Gemfile.lock +123 -0
- data/README.rdoc +104 -30
- data/Rakefile +12 -0
- data/flickrmocks.gemspec +3 -1
- data/lib/flickr_mocks/api/api.rb +80 -27
- data/lib/flickr_mocks/api/flickr.rb +69 -23
- data/lib/flickr_mocks/api/helpers.rb +25 -12
- data/lib/flickr_mocks/api/options.rb +71 -53
- data/lib/flickr_mocks/api/sanitize.rb +129 -20
- data/lib/flickr_mocks/fixtures.rb +7 -1
- data/lib/flickr_mocks/flickraw/custom_clone.rb +3 -1
- data/lib/flickr_mocks/flickraw/custom_compare.rb +4 -0
- data/lib/flickr_mocks/flickraw/custom_marshal.rb +7 -2
- data/lib/flickr_mocks/flickraw/flickraw.rb +6 -0
- data/lib/flickr_mocks/helpers.rb +8 -1
- data/lib/flickr_mocks/models/commons_institution.rb +45 -34
- data/lib/flickr_mocks/models/commons_institutions.rb +85 -75
- data/lib/flickr_mocks/models/helpers.rb +13 -6
- data/lib/flickr_mocks/models/models.rb +7 -0
- data/lib/flickr_mocks/models/photo.rb +76 -75
- data/lib/flickr_mocks/models/photo_details.rb +71 -69
- data/lib/flickr_mocks/models/photo_dimensions.rb +80 -78
- data/lib/flickr_mocks/models/photo_search.rb +115 -88
- data/lib/flickr_mocks/models/photo_size.rb +57 -56
- data/lib/flickr_mocks/models/photo_sizes.rb +68 -67
- data/lib/flickr_mocks/models/photos.rb +104 -99
- data/lib/flickr_mocks/stubs.rb +151 -14
- data/lib/flickr_mocks/version.rb +7 -1
- data/spec/api/api_spec.rb +26 -8
- data/spec/api/flickr_spec.rb +19 -19
- data/spec/api/helper_spec.rb +20 -20
- data/spec/api/options_spec.rb +170 -124
- data/spec/api/sanitize_spec.rb +174 -59
- data/spec/base/stubs_spec.rb +37 -74
- data/spec/base/version_spec.rb +11 -4
- data/spec/models/commons_institution_spec.rb +3 -2
- data/spec/models/commons_institutions_spec.rb +34 -5
- data/spec/models/helpers_spec.rb +7 -6
- data/spec/models/photo_details_spec.rb +12 -11
- data/spec/models/photo_dimensions_spec.rb +5 -4
- data/spec/models/photo_search_spec.rb +50 -8
- data/spec/models/photo_size_spec.rb +4 -3
- data/spec/models/photo_sizes_spec.rb +6 -5
- data/spec/models/photo_spec.rb +6 -4
- data/spec/models/photos_spec.rb +9 -7
- data/spec/shared_examples/hash_options/date_hash_option.rb +42 -0
- data/spec/shared_examples/hash_options/page_hash_option.rb +23 -0
- data/spec/shared_examples/hash_options/perpage_hash_option.rb +43 -0
- data/spec/shared_examples/hash_options/tag_mode_hash_option.rb +31 -0
- data/spec/shared_examples/stub_helpers.rb +140 -0
- data/spec/spec_helper.rb +5 -5
- metadata +55 -16
@@ -1,98 +1,108 @@
|
|
1
1
|
|
2
2
|
module FlickrMocks
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
def initialize_copy(orig)
|
43
|
+
super
|
44
|
+
@delegated_to_object = @delegated_to_object.clone
|
45
|
+
end
|
41
46
|
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
62
|
-
|
63
|
-
|
62
|
+
alias :old_methods :methods
|
63
|
+
def methods
|
64
|
+
delegated_instance_methods + old_methods
|
65
|
+
end
|
64
66
|
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
70
|
-
|
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
|
-
|
77
|
-
|
78
|
-
|
79
|
-
@delegated_to_object = object.institution
|
80
|
-
end
|
79
|
+
def institutions
|
80
|
+
@delegated_to_object
|
81
|
+
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
-
|
87
|
-
|
88
|
-
|
95
|
+
def per_page=(value)
|
96
|
+
@per_page = value.to_i == 0 ? default(:per_page) : value.to_i
|
97
|
+
end
|
89
98
|
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
-
|
95
|
-
|
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 =>
|
14
|
-
:per_page =>
|
15
|
-
:current_page =>
|
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
|
-
|
27
|
+
::FlickrMocks::Api.default(:possible_sizes)
|
21
28
|
end
|
22
29
|
end
|
23
30
|
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
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def original
|
16
|
+
respond_to?(:originalsecret) ? FlickRaw.url_o(self) : nil
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def thumbnail
|
20
|
+
FlickRaw.url_t self
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def small
|
24
|
+
FlickRaw.url_m self
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def medium
|
28
|
+
FlickRaw.url self
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def large
|
32
|
+
FlickRaw.url_b self
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
def medium_640
|
36
|
+
FlickRaw.url_z self
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def owner_url
|
40
|
+
FlickRaw.url_photopage self
|
41
|
+
end
|
42
42
|
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
53
|
+
def photo_id
|
54
|
+
id
|
55
|
+
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
def usable?
|
58
|
+
license.to_i > 3
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
def ==(other)
|
62
|
+
@delegated_to_object == other.instance_eval('@delegated_to_object')
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
def initialize_copy(orig)
|
66
|
+
super
|
67
|
+
@delegated_to_object = @delegated_to_object.clone
|
68
|
+
end
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
def delegated_instance_methods
|
71
|
+
@delegated_instance_methods
|
72
|
+
end
|
73
73
|
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
88
|
+
alias :old_methods :methods
|
89
|
+
def methods
|
90
|
+
delegated_instance_methods + old_methods
|
91
|
+
end
|
92
92
|
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
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
|
-
|
3
|
-
|
2
|
+
module Models
|
3
|
+
class PhotoDetails
|
4
|
+
attr_reader :dimensions
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
20
|
+
def owner_username
|
21
|
+
self.owner.username
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def dimensions
|
25
|
+
@dimensions
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def photo
|
29
|
+
@delegated_to_object
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def possible_sizes
|
33
|
+
FlickrMocks::Models::Helpers.possible_sizes
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
alias :old_methods :methods
|
54
|
+
def methods
|
55
|
+
delegated_instance_methods + old_methods
|
56
|
+
end
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
def delegated_instance_methods
|
59
|
+
@delegated_to_object.delegated_instance_methods + array_accessor_methods + [:owner_id] + possible_sizes
|
60
|
+
end
|
60
61
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
private
|
72
|
+
def dimensions=(object)
|
73
|
+
@dimensions = object.class == PhotoSizes ? object : PhotoSizes.new(object)
|
74
|
+
end
|
74
75
|
|
75
|
-
|
76
|
-
|
77
|
-
|
76
|
+
def delegated_to_object=(object)
|
77
|
+
@delegated_to_object = object.is_a?(Photo) ? object : Photo.new(object)
|
78
|
+
end
|
78
79
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|
-
|
86
|
-
|
87
|
-
|
86
|
+
def array_accessor_methods
|
87
|
+
FlickrMocks::Models::Helpers.array_accessor_methods
|
88
|
+
end
|
88
89
|
|
90
|
+
end
|
89
91
|
end
|
90
92
|
end
|