7digital 0.1.2 → 0.1.5

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