7digital 0.1.2 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +143 -143
  3. data/lib/sevendigital.rb +55 -55
  4. data/lib/sevendigital/api_operator.rb +127 -127
  5. data/lib/sevendigital/api_operator_cached.rb +91 -62
  6. data/lib/sevendigital/api_request.rb +72 -62
  7. data/lib/sevendigital/client.rb +122 -122
  8. data/lib/sevendigital/client_configuration.rb +85 -83
  9. data/lib/sevendigital/client_digestors.rb +122 -122
  10. data/lib/sevendigital/client_managers.rb +57 -57
  11. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
  12. data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
  13. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
  14. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
  15. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
  16. data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
  17. data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
  18. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
  19. data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
  20. data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
  21. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
  22. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
  23. data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
  24. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
  25. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
  26. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
  27. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
  28. data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
  29. data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
  30. data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
  31. data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
  32. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  33. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
  34. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
  35. data/lib/sevendigital/management/artist_manager.rb +97 -97
  36. data/lib/sevendigital/management/basket_manager.rb +29 -29
  37. data/lib/sevendigital/management/country_manager.rb +10 -10
  38. data/lib/sevendigital/management/list_manager.rb +18 -18
  39. data/lib/sevendigital/management/manager.rb +12 -12
  40. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  41. data/lib/sevendigital/management/release_manager.rb +54 -54
  42. data/lib/sevendigital/management/tag_manager.rb +10 -10
  43. data/lib/sevendigital/management/track_manager.rb +29 -27
  44. data/lib/sevendigital/management/user_card_manager.rb +26 -26
  45. data/lib/sevendigital/management/user_manager.rb +76 -76
  46. data/lib/sevendigital/model/api_response.rb +32 -32
  47. data/lib/sevendigital/model/artist.rb +104 -104
  48. data/lib/sevendigital/model/basket.rb +15 -15
  49. data/lib/sevendigital/model/basket_item.rb +14 -14
  50. data/lib/sevendigital/model/card.rb +11 -11
  51. data/lib/sevendigital/model/chart_item.rb +9 -9
  52. data/lib/sevendigital/model/download_url.rb +7 -7
  53. data/lib/sevendigital/model/format.rb +7 -7
  54. data/lib/sevendigital/model/label.rb +7 -7
  55. data/lib/sevendigital/model/list.rb +4 -4
  56. data/lib/sevendigital/model/list_item.rb +8 -8
  57. data/lib/sevendigital/model/locker.rb +4 -4
  58. data/lib/sevendigital/model/locker_release.rb +9 -9
  59. data/lib/sevendigital/model/locker_track.rb +9 -9
  60. data/lib/sevendigital/model/price.rb +9 -9
  61. data/lib/sevendigital/model/release.rb +57 -57
  62. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  63. data/lib/sevendigital/model/sevendigital_object.rb +57 -57
  64. data/lib/sevendigital/model/tag.rb +7 -7
  65. data/lib/sevendigital/model/track.rb +87 -83
  66. data/lib/sevendigital/model/user.rb +74 -74
  67. data/lib/sevendigital/pager.rb +20 -20
  68. data/lib/sevendigital/version.rb +5 -5
  69. data/spec/api_operator_cached_spec.rb +233 -178
  70. data/spec/api_operator_spec.rb +320 -320
  71. data/spec/api_request_spec.rb +46 -31
  72. data/spec/client_configuration_spec.rb +78 -78
  73. data/spec/client_spec.rb +161 -161
  74. data/spec/data/config/sevendigital.yml +5 -5
  75. data/spec/data/configuration_env_override.yml +5 -5
  76. data/spec/data/configuration_override.yml +1 -1
  77. data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
  78. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  79. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  80. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  81. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  82. data/spec/digestion_tract/country_digestor_spec.rb +33 -33
  83. data/spec/digestion_tract/digestor_spec.rb +33 -33
  84. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  85. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  86. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  87. data/spec/digestion_tract/list_digestor_spec.rb +31 -31
  88. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
  89. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  90. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
  91. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  92. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  93. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  94. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  95. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  96. data/spec/digestion_tract/release_digestor_spec.rb +115 -115
  97. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  98. data/spec/digestion_tract/track_digestor_spec.rb +105 -104
  99. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
  100. data/spec/digestion_tract/user_digestor_spec.rb +42 -42
  101. data/spec/integration/artist_spec.rb +99 -86
  102. data/spec/integration/country_spec.rb +18 -18
  103. data/spec/integration/list_spec.rb +22 -22
  104. data/spec/integration/purchasing_spec.rb +24 -24
  105. data/spec/integration/release_spec.rb +34 -34
  106. data/spec/integration/sevendigital_spec.yml +4 -4
  107. data/spec/integration/track_spec.rb +38 -23
  108. data/spec/integration/user_spec.rb +22 -22
  109. data/spec/management/artist_manager_spec.rb +172 -172
  110. data/spec/management/basket_manager_spec.rb +77 -77
  111. data/spec/management/country_manager_spec.rb +34 -34
  112. data/spec/management/list_manager_spec.rb +26 -26
  113. data/spec/management/oauth_manager_spec.rb +72 -72
  114. data/spec/management/release_manager_spec.rb +200 -200
  115. data/spec/management/tag_manager_spec.rb +34 -34
  116. data/spec/management/track_manager_spec.rb +111 -107
  117. data/spec/management/user_card_manager_spec.rb +78 -78
  118. data/spec/management/user_manager_spec.rb +218 -218
  119. data/spec/model/api_response_spec.rb +48 -48
  120. data/spec/model/artist_spec.rb +162 -162
  121. data/spec/model/basket_spec.rb +62 -62
  122. data/spec/model/release_spec.rb +133 -133
  123. data/spec/model/sevendigital_object_spec.rb +73 -73
  124. data/spec/model/track_spec.rb +146 -144
  125. data/spec/model/user_spec.rb +181 -181
  126. data/spec/spec_helper.rb +86 -84
  127. data/spec/test-xml/methods/artist/browse.xml +21 -21
  128. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  129. data/spec/test-xml/methods/artist/chart.xml +30 -30
  130. data/spec/test-xml/methods/artist/details.xml +9 -9
  131. data/spec/test-xml/methods/artist/releases.xml +544 -544
  132. data/spec/test-xml/methods/artist/search.xml +18 -18
  133. data/spec/test-xml/methods/artist/similar.xml +39 -39
  134. data/spec/test-xml/methods/artist/tags.xml +11 -11
  135. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  136. data/spec/test-xml/methods/basket/additem.xml +23 -23
  137. data/spec/test-xml/methods/basket/create.xml +10 -10
  138. data/spec/test-xml/methods/basket/index.xml +23 -23
  139. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  140. data/spec/test-xml/methods/country/resolve.xml +6 -6
  141. data/spec/test-xml/methods/editorial/list.xml +170 -170
  142. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  143. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  144. data/spec/test-xml/methods/release/bydate.xml +173 -173
  145. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  146. data/spec/test-xml/methods/release/chart.xml +181 -181
  147. data/spec/test-xml/methods/release/details.xml +48 -48
  148. data/spec/test-xml/methods/release/recommend.xml +89 -89
  149. data/spec/test-xml/methods/release/search.xml +194 -194
  150. data/spec/test-xml/methods/release/tags.xml +27 -27
  151. data/spec/test-xml/methods/release/tracks.xml +28 -28
  152. data/spec/test-xml/methods/tag/index.xml +16 -16
  153. data/spec/test-xml/methods/track/chart.xml +149 -149
  154. data/spec/test-xml/methods/track/details.xml +30 -30
  155. data/spec/test-xml/methods/track/search.xml +159 -159
  156. data/spec/test-xml/methods/user/details.xml +4 -4
  157. data/spec/test-xml/methods/user/locker.xml +49 -49
  158. data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
  159. data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
  160. data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
  161. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  162. data/spec/test-xml/methods/user/signUp.xml +5 -5
  163. data/spec/test-xml/objects/artist.xml +7 -7
  164. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  165. data/spec/test-xml/objects/artist_list.xml +22 -22
  166. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  167. data/spec/test-xml/objects/basket.xml +21 -21
  168. data/spec/test-xml/objects/basket_item.xml +11 -11
  169. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  170. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  171. data/spec/test-xml/objects/download_url.xml +7 -7
  172. data/spec/test-xml/objects/list.xml +89 -89
  173. data/spec/test-xml/objects/list_item_list.xml +85 -85
  174. data/spec/test-xml/objects/list_item_release.xml +13 -13
  175. data/spec/test-xml/objects/locker.xml +47 -47
  176. data/spec/test-xml/objects/locker_release.xml +40 -40
  177. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  178. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  179. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  180. data/spec/test-xml/objects/locker_track.xml +25 -25
  181. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  182. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  183. data/spec/test-xml/objects/nested_release_list.xml +22 -22
  184. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  185. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  186. data/spec/test-xml/objects/price.xml +7 -7
  187. data/spec/test-xml/objects/release.xml +40 -40
  188. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  189. data/spec/test-xml/objects/release_list.xml +18 -18
  190. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  191. data/spec/test-xml/objects/response.xml +38 -38
  192. data/spec/test-xml/objects/tag.xml +4 -4
  193. data/spec/test-xml/objects/track.xml +34 -33
  194. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  195. data/spec/test-xml/objects/user.xml +4 -4
  196. data/spec/test-xml/objects/user_payment_card.xml +5 -5
  197. metadata +15 -25
@@ -1,62 +1,91 @@
1
- module Sevendigital
2
- #@private
3
- #Cached version of ApiOperator
4
- #If response for an API request is already in cache and
5
- #and it hasn't expired returns the cached response is returned instead of making an API call
6
- #otherwise uses methods inherited from ApiOperator to make an HTTP call to the API
7
- class ApiOperatorCached < ApiOperator # :nodoc:
8
- def initialize(client, cache)
9
- @cache = cache
10
- super(client)
11
- end
12
-
13
- def call_api(api_request)
14
- api_response = retrieve_from_cache(api_request)
15
- api_response = cache_response(api_request) if response_out_of_date?(api_response)
16
-
17
- api_response.tap do |api_response|
18
- @client.log(:very_verbose) { "ApiOperatorCached: API Response: #{api_response}" }
19
- end
20
- end
21
-
22
-
23
- def response_out_of_date?(api_response, current_time=nil)
24
- (api_response.nil? || header_invalid?(api_response.headers) || cache_expired?(api_response.headers, current_time)).tap do |expired|
25
- @client.log(:verbose) { "ApiOperatorCached: Cache response out of date" if expired }
26
- end
27
- end
28
-
29
- private
30
-
31
- def header_invalid?(header)
32
- header["Date"].nil? || header["cache-control"].nil? || !(header["cache-control"] =~ /max-age=([0-9]+)/)
33
- end
34
-
35
- def cache_expired?(header, current_time=nil)
36
- (Time.parse(header["Date"]) + (/max-age=([0-9]+)/.match(header["cache-control"])[1].to_i)) < (current_time || Time.now.utc)
37
- end
38
-
39
- def cache_response(api_request)
40
- digest_http_response(make_http_request(api_request)).tap do |api_response|
41
- unless api_request.requires_signature?
42
- key = request_cache_key(api_request)
43
- @cache.respond_to?(:write) ? @cache.write(key, api_response) : @cache.set(key, api_response)
44
- @client.log(:verbose) { "ApiOperatorCached: Storing response in cache..." }
45
- end
46
- end
47
- end
48
-
49
- def request_cache_key(api_request)
50
- create_request_uri(api_request).to_s
51
- end
52
-
53
- def retrieve_from_cache(api_request)
54
- unless api_request.requires_signature?
55
- key = request_cache_key(api_request)
56
- (@cache.respond_to?(:read) ? @cache.read(key) : @cache.get(key)).tap do |response|
57
- @client.log(:verbose) { "ApiOperatorCached: Got from cache #{key}" if response }
58
- end
59
- end
60
- end
61
- end
62
- end
1
+ require 'time'
2
+
3
+ module Sevendigital
4
+ #@private
5
+ #Cached version of ApiOperator
6
+ #If response for an API request is already in cache and
7
+ #and it hasn't expired returns the cached response is returned instead of making an API call
8
+ #otherwise uses methods inherited from ApiOperator to make an HTTP call to the API
9
+ class ApiOperatorCached < ApiOperator # :nodoc:
10
+ def initialize(client, cache)
11
+ @cache = cache
12
+ super(client)
13
+ end
14
+
15
+ def call_api(api_request)
16
+ @client.log(:very_verbose) { "ApiOperatorCached: API Request: #{api_request.inspect}" }
17
+ api_response = retrieve_from_cache(api_request)
18
+ api_response = cache_response(api_request) if response_out_of_date?(api_response, default_cache_max_age(api_request))
19
+ api_response.tap do |api_response|
20
+ @client.log(:very_verbose) { "ApiOperatorCached: API Response: #{api_response}" }
21
+ end
22
+ end
23
+
24
+
25
+ =begin
26
+ def response_out_of_date?(api_response, current_time=nil)
27
+ (api_response.nil? || header_invalid?(api_response.headers) || cache_expired?(api_response.headers, current_time)).tap do |expired|
28
+ @client.log(:verbose) { "ApiOperatorCached: Cache response out of date" if expired }
29
+ end
30
+ end
31
+ =end
32
+
33
+ def response_out_of_date?(api_response, cache_max_age, current_time=nil)
34
+ if api_response.nil?
35
+ @client.log(:verbose) { "ApiOperatorCached: Response not found in cache" }
36
+ return true
37
+ end
38
+ if header_invalid?(api_response.headers)
39
+ @client.log(:verbose) { "ApiOperatorCached: Ignoring cached response - invalid cache-control header" }
40
+ return true
41
+ end
42
+ (cache_expired?(api_response.headers, cache_max_age, current_time)).tap do |expired|
43
+ @client.log(:verbose) { "ApiOperatorCached: Cache response out of date (max age #{cache_max_age})" } if expired
44
+ end
45
+ end
46
+
47
+ def default_cache_max_age(api_request)
48
+ return api_request.options[:cache_max_age] if api_request.options[:cache_max_age]
49
+ if @client.configuration.cache_max_age
50
+ return @client.configuration.cache_max_age[api_request.api_method.to_sym] || @client.configuration.cache_max_age[:"*"]
51
+ end
52
+ nil
53
+ end
54
+
55
+ private
56
+
57
+ def header_invalid?(header)
58
+ header["Date"].nil? || header["cache-control"].nil? || !(header["cache-control"] =~ /max-age=([0-9]+)/)
59
+ end
60
+
61
+ def cache_expired?(header, max_age_override, current_time=nil)
62
+ max_age = max_age_override || /max-age=([0-9]+)/.match(header["cache-control"])[1].to_i
63
+ (Time.parse(header["Date"]) + max_age) < (current_time || Time.now.utc)
64
+ end
65
+
66
+ def cache_response(api_request)
67
+ digest_http_response(make_http_request(api_request)).tap do |api_response|
68
+ @client.log(:very_verbose) { "ApiOperatorCached: API Request (cache_response): #{api_request.inspect}" }
69
+ unless api_request.requires_signature? # || response_out_of_date?(api_response, api_request.options[:cache_max_age])
70
+ key = request_cache_key(api_request)
71
+ @cache.respond_to?(:write) ? @cache.write(key, api_response) : @cache.set(key, api_response)
72
+ @client.log(:verbose) { "ApiOperatorCached: Storing response in cache..." }
73
+ end
74
+ end
75
+ end
76
+
77
+ def request_cache_key(api_request)
78
+ create_request_uri(api_request).to_s
79
+ end
80
+
81
+ def retrieve_from_cache(api_request)
82
+ unless api_request.requires_signature?
83
+ key = request_cache_key(api_request)
84
+ (@cache.respond_to?(:read) ? @cache.read(key) : @cache.get(key)).tap do |response|
85
+ @client.log(:verbose) { "ApiOperatorCached: Got from cache #{key}" } if response
86
+ end
87
+ end
88
+ end
89
+
90
+ end
91
+ end
@@ -1,62 +1,72 @@
1
- module Sevendigital
2
- #@private
3
- #Abstraction of a HTTP API request, ApiOperator uses this ApiRequest to build a real HTTP requests
4
- class ApiRequest # :nodoc:
5
-
6
- attr_reader :api_method, :parameters, :signed
7
- attr_accessor :token, :api_service, :http_method
8
- attr_accessor :signature_scheme
9
- attr_writer :form_parameters
10
-
11
- def initialize(http_method, api_method, parameters, options={})
12
- @api_method = api_method
13
- @parameters = parameters
14
- @signature_scheme = :header
15
- @http_method = http_method
16
- comb_parameters(parameters)
17
- @form_parameters = Hash.new
18
- end
19
-
20
- def form_parameters
21
- comb_parameters(@form_parameters)
22
- end
23
-
24
- def requires_signature?
25
- @signed == true
26
- end
27
-
28
- def require_signature
29
- @signed = true
30
- end
31
-
32
- def requires_secure_connection?
33
- @secure == true
34
- end
35
-
36
- def require_secure_connection
37
- @secure = true
38
- end
39
-
40
- def comb_parameters(parameters)
41
- comb_parameter(parameters, :pageSize, [:page_size, :per_page])
42
- comb_parameter(parameters, :shopId, :shop_id)
43
- comb_parameter(parameters, :imageSize, :image_size)
44
- remove_empty_parameters(parameters)
45
- parameters
46
- end
47
-
48
- def comb_parameter(parameters, correct_name, alternative_names)
49
- param_value = nil
50
- alternative_names = [alternative_names] unless alternative_names.is_a?(Array)
51
- alternative_names.each do |alternative_name|
52
- param_value ||= parameters[alternative_name]
53
- parameters.delete(alternative_name)
54
- end
55
- parameters[correct_name] ||= param_value if param_value
56
- end
57
-
58
- def remove_empty_parameters(parameters)
59
- parameters.delete_if { |key, value| value.nil? }
60
- end
61
- end
62
- end
1
+ module Sevendigital
2
+ #@private
3
+ #Abstraction of a HTTP API request, ApiOperator uses this ApiRequest to build a real HTTP requests
4
+ class ApiRequest # :nodoc:
5
+
6
+ attr_reader :api_method, :parameters, :signed, :options
7
+ attr_accessor :token, :api_service, :http_method
8
+ attr_accessor :signature_scheme
9
+ attr_writer :form_parameters
10
+
11
+ WRAPPER_PARAMETERS = [:cache_max_age]
12
+
13
+ def initialize(http_method, api_method, parameters, options=nil)
14
+ @api_method = api_method
15
+ @parameters = parameters
16
+ @options = options || Hash.new
17
+ @signature_scheme = :header
18
+ @http_method = http_method
19
+ comb_parameters(parameters)
20
+ @form_parameters = Hash.new
21
+ end
22
+
23
+ def form_parameters
24
+ comb_parameters(@form_parameters)
25
+ end
26
+
27
+ def requires_signature?
28
+ @signed == true
29
+ end
30
+
31
+ def require_signature
32
+ @signed = true
33
+ end
34
+
35
+ def requires_secure_connection?
36
+ @secure == true
37
+ end
38
+
39
+ def require_secure_connection
40
+ @secure = true
41
+ end
42
+
43
+ def comb_parameters(params)
44
+ comb_parameter(params, :pageSize, [:page_size, :per_page])
45
+ comb_parameter(params, :shopId, :shop_id)
46
+ comb_parameter(params, :imageSize, :image_size)
47
+ remove_empty_parameters(params)
48
+ remove_wrapper_options(params)
49
+ params
50
+ end
51
+
52
+ def comb_parameter(parameters, correct_name, alternative_names)
53
+ param_value = nil
54
+ alternative_names = [alternative_names] unless alternative_names.is_a?(Array)
55
+ alternative_names.each do |alternative_name|
56
+ param_value ||= parameters[alternative_name]
57
+ parameters.delete(alternative_name)
58
+ end
59
+ parameters[correct_name] ||= param_value if param_value
60
+ end
61
+
62
+ def remove_empty_parameters(parameters)
63
+ parameters.delete_if { |key, value| value.nil? }
64
+ end
65
+
66
+ def remove_wrapper_options(parameters)
67
+ @options.merge!(parameters.select{|key, value| WRAPPER_PARAMETERS.include?(key) })
68
+ parameters.delete_if { |key| WRAPPER_PARAMETERS.include?(key) }
69
+ end
70
+
71
+ end
72
+ end
@@ -1,122 +1,122 @@
1
- module Sevendigital
2
-
3
- class Client
4
-
5
- #if default values for any of these parameters are set in configuration, they will be passed along with every single API request
6
- COMMON_REQUEST_PARAMETERS = [:shop_id, :country, :page, :page_size, :image_size]
7
-
8
- def initialize(*args)
9
- @configuration = Sevendigital::ClientConfiguration.new(*args)
10
- yield @configuration if block_given?
11
- @api_operator = hire_api_operator
12
- end
13
-
14
- def create_api_request(http_method, api_method, parameters, options = {})
15
- parameters = options.merge(parameters)
16
- parameters = add_default_parameters(parameters)
17
- if http_method != :POST then
18
- request = ApiRequest.new(http_method, api_method, parameters)
19
- else
20
- request = ApiRequest.new(http_method, api_method, {})
21
- request.form_parameters = parameters
22
- end
23
- request
24
- end
25
-
26
- def make_api_request(http_method, api_method, parameters, options = {})
27
- api_request = create_api_request(http_method, api_method, parameters, options)
28
- operator.call_api(api_request)
29
- end
30
-
31
- def make_signed_api_request(http_method, api_method, parameters, options = {}, token = nil)
32
- api_request = create_api_request(http_method, api_method, parameters, options)
33
- api_request.require_signature
34
- api_request.require_secure_connection
35
- api_request.token = token
36
-
37
- operator.call_api(api_request)
38
- end
39
-
40
- def oauth_consumer
41
- host, version = api_host_and_version(:account)
42
-
43
- consumer_options = {
44
- :authorize_path => "https://#{host}/#{version}/oauth/authorise",
45
- :http_method => :get
46
- }
47
-
48
- @oauth_consumer ||= OAuth::Consumer.new( \
49
- @configuration.oauth_consumer_key, \
50
- @configuration.oauth_consumer_secret, \
51
- consumer_options \
52
- )
53
- end
54
-
55
- def configuration
56
- @configuration
57
- end
58
-
59
- def log(severity, &block)
60
- if self.send("#{severity}?")
61
- logger.info(yield) if block_given?
62
- end
63
- end
64
-
65
- def operator
66
- @api_operator
67
- end
68
-
69
- def verbose?
70
- very_verbose? || !!@verbose || !!@configuration.verbose
71
- end
72
-
73
- def very_verbose?
74
- @very_verbose || @configuration.verbose.to_s == "very_verbose"
75
- end
76
-
77
- #@private
78
- def api_host_and_version(api_service=nil)
79
- service = api_service && !api_service.to_s.empty? ? "#{api_service}_" : ""
80
- [configuration.send("#{service}api_url".to_sym), configuration.send("#{service}api_version".to_sym)]
81
- end
82
-
83
- #@private
84
- def user_agent_info
85
- app_info = @configuration.app_name ? "/#{@configuration.app_name}" : nil
86
- app_info += " #{@configuration.app_version}" if app_info && @configuration.app_version
87
- "#{Sevendigital::NAME} Gem #{Sevendigital::VERSION}#{app_info}"
88
- end
89
-
90
- private
91
-
92
- #@private
93
- def default_parameters
94
- params = {}
95
- COMMON_REQUEST_PARAMETERS.each do |param|
96
- value = @configuration.send(param)
97
- params[param] = value if value
98
- end
99
- params
100
- end
101
-
102
- #@private
103
- def hire_api_operator
104
- @configuration.cache ? ApiOperatorCached.new(self, @configuration.cache) : ApiOperator.new(self)
105
- end
106
-
107
- #@private
108
- def add_default_parameters(parameters)
109
- params = parameters
110
- default_parameters.each do |name, value|
111
- params[name] ||= value
112
- end
113
- params
114
- end
115
-
116
- #@private
117
- def logger
118
- path = (@configuration.logfile_path.nil? || @configuration.logfile_path.blank?) ? STDOUT : @configuration.logfile_path
119
- @logger ||= Logger.new(path)
120
- end
121
- end
122
- end
1
+ module Sevendigital
2
+
3
+ class Client
4
+
5
+ #if default values for any of these parameters are set in configuration, they will be passed along with every single API request
6
+ COMMON_REQUEST_PARAMETERS = [:shop_id, :country, :page, :page_size, :image_size]
7
+
8
+ def initialize(*args)
9
+ @configuration = Sevendigital::ClientConfiguration.new(*args)
10
+ yield @configuration if block_given?
11
+ @api_operator = hire_api_operator
12
+ end
13
+
14
+ def create_api_request(http_method, api_method, parameters, options = {})
15
+ parameters = options.merge(parameters)
16
+ parameters = add_default_parameters(parameters)
17
+ if http_method != :POST then
18
+ request = ApiRequest.new(http_method, api_method, parameters)
19
+ else
20
+ request = ApiRequest.new(http_method, api_method, {})
21
+ request.form_parameters = parameters
22
+ end
23
+ request
24
+ end
25
+
26
+ def make_api_request(http_method, api_method, parameters, options = {})
27
+ api_request = create_api_request(http_method, api_method, parameters, options)
28
+ operator.call_api(api_request)
29
+ end
30
+
31
+ def make_signed_api_request(http_method, api_method, parameters, options = {}, token = nil)
32
+ api_request = create_api_request(http_method, api_method, parameters, options)
33
+ api_request.require_signature
34
+ api_request.require_secure_connection
35
+ api_request.token = token
36
+
37
+ operator.call_api(api_request)
38
+ end
39
+
40
+ def oauth_consumer
41
+ host, version = api_host_and_version(:account)
42
+
43
+ consumer_options = {
44
+ :authorize_path => "https://#{host}/#{version}/oauth/authorise",
45
+ :http_method => :get
46
+ }
47
+
48
+ @oauth_consumer ||= OAuth::Consumer.new( \
49
+ @configuration.oauth_consumer_key, \
50
+ @configuration.oauth_consumer_secret, \
51
+ consumer_options \
52
+ )
53
+ end
54
+
55
+ def configuration
56
+ @configuration
57
+ end
58
+
59
+ def log(severity, &block)
60
+ if self.send("#{severity}?")
61
+ logger.info(yield) if block_given?
62
+ end
63
+ end
64
+
65
+ def operator
66
+ @api_operator
67
+ end
68
+
69
+ def verbose?
70
+ very_verbose? || !!@verbose || !!@configuration.verbose
71
+ end
72
+
73
+ def very_verbose?
74
+ @very_verbose || @configuration.verbose.to_s == "very_verbose"
75
+ end
76
+
77
+ #@private
78
+ def api_host_and_version(api_service=nil)
79
+ service = api_service && !api_service.to_s.empty? ? "#{api_service}_" : ""
80
+ [configuration.send("#{service}api_url".to_sym), configuration.send("#{service}api_version".to_sym)]
81
+ end
82
+
83
+ #@private
84
+ def user_agent_info
85
+ app_info = @configuration.app_name ? "/#{@configuration.app_name}" : nil
86
+ app_info += " #{@configuration.app_version}" if app_info && @configuration.app_version
87
+ "#{Sevendigital::NAME} Gem #{Sevendigital::VERSION}#{app_info}"
88
+ end
89
+
90
+ private
91
+
92
+ #@private
93
+ def default_parameters
94
+ params = {}
95
+ COMMON_REQUEST_PARAMETERS.each do |param|
96
+ value = @configuration.send(param)
97
+ params[param] = value if value
98
+ end
99
+ params
100
+ end
101
+
102
+ #@private
103
+ def hire_api_operator
104
+ @configuration.cache ? ApiOperatorCached.new(self, @configuration.cache) : ApiOperator.new(self)
105
+ end
106
+
107
+ #@private
108
+ def add_default_parameters(parameters)
109
+ params = parameters
110
+ default_parameters.each do |name, value|
111
+ params[name] ||= value
112
+ end
113
+ params
114
+ end
115
+
116
+ #@private
117
+ def logger
118
+ path = (@configuration.logfile_path.nil? || @configuration.logfile_path.blank?) ? STDOUT : @configuration.logfile_path
119
+ @logger ||= Logger.new(path)
120
+ end
121
+ end
122
+ end