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.
- checksums.yaml +7 -0
- data/README.rdoc +143 -143
- data/lib/sevendigital.rb +55 -55
- data/lib/sevendigital/api_operator.rb +127 -127
- data/lib/sevendigital/api_operator_cached.rb +91 -62
- data/lib/sevendigital/api_request.rb +72 -62
- data/lib/sevendigital/client.rb +122 -122
- data/lib/sevendigital/client_configuration.rb +85 -83
- data/lib/sevendigital/client_digestors.rb +122 -122
- data/lib/sevendigital/client_managers.rb +57 -57
- data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
- data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
- data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
- data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
- data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
- data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
- data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
- data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
- data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
- data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
- data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
- data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
- data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
- data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
- data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
- data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
- data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
- data/lib/sevendigital/management/artist_manager.rb +97 -97
- data/lib/sevendigital/management/basket_manager.rb +29 -29
- data/lib/sevendigital/management/country_manager.rb +10 -10
- data/lib/sevendigital/management/list_manager.rb +18 -18
- data/lib/sevendigital/management/manager.rb +12 -12
- data/lib/sevendigital/management/oauth_manager.rb +23 -23
- data/lib/sevendigital/management/release_manager.rb +54 -54
- data/lib/sevendigital/management/tag_manager.rb +10 -10
- data/lib/sevendigital/management/track_manager.rb +29 -27
- data/lib/sevendigital/management/user_card_manager.rb +26 -26
- data/lib/sevendigital/management/user_manager.rb +76 -76
- data/lib/sevendigital/model/api_response.rb +32 -32
- data/lib/sevendigital/model/artist.rb +104 -104
- data/lib/sevendigital/model/basket.rb +15 -15
- data/lib/sevendigital/model/basket_item.rb +14 -14
- data/lib/sevendigital/model/card.rb +11 -11
- data/lib/sevendigital/model/chart_item.rb +9 -9
- data/lib/sevendigital/model/download_url.rb +7 -7
- data/lib/sevendigital/model/format.rb +7 -7
- data/lib/sevendigital/model/label.rb +7 -7
- data/lib/sevendigital/model/list.rb +4 -4
- data/lib/sevendigital/model/list_item.rb +8 -8
- data/lib/sevendigital/model/locker.rb +4 -4
- data/lib/sevendigital/model/locker_release.rb +9 -9
- data/lib/sevendigital/model/locker_track.rb +9 -9
- data/lib/sevendigital/model/price.rb +9 -9
- data/lib/sevendigital/model/release.rb +57 -57
- data/lib/sevendigital/model/sevendigital_error.rb +11 -11
- data/lib/sevendigital/model/sevendigital_object.rb +57 -57
- data/lib/sevendigital/model/tag.rb +7 -7
- data/lib/sevendigital/model/track.rb +87 -83
- data/lib/sevendigital/model/user.rb +74 -74
- data/lib/sevendigital/pager.rb +20 -20
- data/lib/sevendigital/version.rb +5 -5
- data/spec/api_operator_cached_spec.rb +233 -178
- data/spec/api_operator_spec.rb +320 -320
- data/spec/api_request_spec.rb +46 -31
- data/spec/client_configuration_spec.rb +78 -78
- data/spec/client_spec.rb +161 -161
- data/spec/data/config/sevendigital.yml +5 -5
- data/spec/data/configuration_env_override.yml +5 -5
- data/spec/data/configuration_override.yml +1 -1
- data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
- data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
- data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
- data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
- data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
- data/spec/digestion_tract/country_digestor_spec.rb +33 -33
- data/spec/digestion_tract/digestor_spec.rb +33 -33
- data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
- data/spec/digestion_tract/format_digestor_spec.rb +38 -38
- data/spec/digestion_tract/label_digestor_spec.rb +33 -33
- data/spec/digestion_tract/list_digestor_spec.rb +31 -31
- data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
- data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
- data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
- data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
- data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
- data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
- data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
- data/spec/digestion_tract/price_digestor_spec.rb +73 -73
- data/spec/digestion_tract/release_digestor_spec.rb +115 -115
- data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
- data/spec/digestion_tract/track_digestor_spec.rb +105 -104
- data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
- data/spec/digestion_tract/user_digestor_spec.rb +42 -42
- data/spec/integration/artist_spec.rb +99 -86
- data/spec/integration/country_spec.rb +18 -18
- data/spec/integration/list_spec.rb +22 -22
- data/spec/integration/purchasing_spec.rb +24 -24
- data/spec/integration/release_spec.rb +34 -34
- data/spec/integration/sevendigital_spec.yml +4 -4
- data/spec/integration/track_spec.rb +38 -23
- data/spec/integration/user_spec.rb +22 -22
- data/spec/management/artist_manager_spec.rb +172 -172
- data/spec/management/basket_manager_spec.rb +77 -77
- data/spec/management/country_manager_spec.rb +34 -34
- data/spec/management/list_manager_spec.rb +26 -26
- data/spec/management/oauth_manager_spec.rb +72 -72
- data/spec/management/release_manager_spec.rb +200 -200
- data/spec/management/tag_manager_spec.rb +34 -34
- data/spec/management/track_manager_spec.rb +111 -107
- data/spec/management/user_card_manager_spec.rb +78 -78
- data/spec/management/user_manager_spec.rb +218 -218
- data/spec/model/api_response_spec.rb +48 -48
- data/spec/model/artist_spec.rb +162 -162
- data/spec/model/basket_spec.rb +62 -62
- data/spec/model/release_spec.rb +133 -133
- data/spec/model/sevendigital_object_spec.rb +73 -73
- data/spec/model/track_spec.rb +146 -144
- data/spec/model/user_spec.rb +181 -181
- data/spec/spec_helper.rb +86 -84
- data/spec/test-xml/methods/artist/browse.xml +21 -21
- data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
- data/spec/test-xml/methods/artist/chart.xml +30 -30
- data/spec/test-xml/methods/artist/details.xml +9 -9
- data/spec/test-xml/methods/artist/releases.xml +544 -544
- data/spec/test-xml/methods/artist/search.xml +18 -18
- data/spec/test-xml/methods/artist/similar.xml +39 -39
- data/spec/test-xml/methods/artist/tags.xml +11 -11
- data/spec/test-xml/methods/artist/toptracks.xml +279 -279
- data/spec/test-xml/methods/basket/additem.xml +23 -23
- data/spec/test-xml/methods/basket/create.xml +10 -10
- data/spec/test-xml/methods/basket/index.xml +23 -23
- data/spec/test-xml/methods/basket/removeitem.xml +10 -10
- data/spec/test-xml/methods/country/resolve.xml +6 -6
- data/spec/test-xml/methods/editorial/list.xml +170 -170
- data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
- data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
- data/spec/test-xml/methods/release/bydate.xml +173 -173
- data/spec/test-xml/methods/release/bytag/top.xml +150 -150
- data/spec/test-xml/methods/release/chart.xml +181 -181
- data/spec/test-xml/methods/release/details.xml +48 -48
- data/spec/test-xml/methods/release/recommend.xml +89 -89
- data/spec/test-xml/methods/release/search.xml +194 -194
- data/spec/test-xml/methods/release/tags.xml +27 -27
- data/spec/test-xml/methods/release/tracks.xml +28 -28
- data/spec/test-xml/methods/tag/index.xml +16 -16
- data/spec/test-xml/methods/track/chart.xml +149 -149
- data/spec/test-xml/methods/track/details.xml +30 -30
- data/spec/test-xml/methods/track/search.xml +159 -159
- data/spec/test-xml/methods/user/details.xml +4 -4
- data/spec/test-xml/methods/user/locker.xml +49 -49
- data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
- data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
- data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
- data/spec/test-xml/methods/user/purchase/item.xml +48 -48
- data/spec/test-xml/methods/user/signUp.xml +5 -5
- data/spec/test-xml/objects/artist.xml +7 -7
- data/spec/test-xml/objects/artist_chart_item.xml +7 -7
- data/spec/test-xml/objects/artist_list.xml +22 -22
- data/spec/test-xml/objects/artist_list_empty.xml +4 -4
- data/spec/test-xml/objects/basket.xml +21 -21
- data/spec/test-xml/objects/basket_item.xml +11 -11
- data/spec/test-xml/objects/basket_item_list.xml +25 -25
- data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
- data/spec/test-xml/objects/download_url.xml +7 -7
- data/spec/test-xml/objects/list.xml +89 -89
- data/spec/test-xml/objects/list_item_list.xml +85 -85
- data/spec/test-xml/objects/list_item_release.xml +13 -13
- data/spec/test-xml/objects/locker.xml +47 -47
- data/spec/test-xml/objects/locker_release.xml +40 -40
- data/spec/test-xml/objects/locker_release_list.xml +87 -87
- data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
- data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
- data/spec/test-xml/objects/locker_track.xml +25 -25
- data/spec/test-xml/objects/locker_track_list.xml +26 -26
- data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
- data/spec/test-xml/objects/nested_release_list.xml +22 -22
- data/spec/test-xml/objects/oauth_access_token.xml +3 -3
- data/spec/test-xml/objects/oauth_request_token.xml +3 -3
- data/spec/test-xml/objects/price.xml +7 -7
- data/spec/test-xml/objects/release.xml +40 -40
- data/spec/test-xml/objects/release_chart_item.xml +39 -39
- data/spec/test-xml/objects/release_list.xml +18 -18
- data/spec/test-xml/objects/release_list_empty.xml +4 -4
- data/spec/test-xml/objects/response.xml +38 -38
- data/spec/test-xml/objects/tag.xml +4 -4
- data/spec/test-xml/objects/track.xml +34 -33
- data/spec/test-xml/objects/track_chart_item.xml +27 -27
- data/spec/test-xml/objects/user.xml +4 -4
- data/spec/test-xml/objects/user_payment_card.xml +5 -5
- metadata +15 -25
@@ -1,62 +1,91 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
api_response
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
@
|
16
|
-
|
17
|
-
@
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
parameters
|
60
|
-
end
|
61
|
-
|
62
|
-
|
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
|
data/lib/sevendigital/client.rb
CHANGED
@@ -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
|