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,48 +1,48 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
#@private
|
6
|
-
class ApiResponseDigestor < Digestor # :nodoc:
|
7
|
-
|
8
|
-
def default_element_name; :response end
|
9
|
-
|
10
|
-
def from_http_response(http_response)
|
11
|
-
response = ApiResponse.new
|
12
|
-
response.headers = http_response.header
|
13
|
-
response.content = http_response.body.to_s
|
14
|
-
|
15
|
-
parse_xml_doc(response.content, response)
|
16
|
-
|
17
|
-
if response.error_code >= 10000 && !http_response.is_a?(Net::HTTPSuccess)
|
18
|
-
response.error_code = Integer(http_response.code)
|
19
|
-
response.error_message= http_response.body.to_s
|
20
|
-
end
|
21
|
-
response
|
22
|
-
end
|
23
|
-
|
24
|
-
def parse_xml_doc(xml, response)
|
25
|
-
|
26
|
-
xml_doc = Nokogiri::XML(xml)
|
27
|
-
|
28
|
-
response_node = xml_doc.at_xpath("./response")
|
29
|
-
response_status = nil
|
30
|
-
response_status = get_optional_attribute(response_node, "status") if response_node
|
31
|
-
if response_status == 'ok' then
|
32
|
-
response.error_code = 0
|
33
|
-
else
|
34
|
-
if response_status == 'error'
|
35
|
-
error_node = get_required_node(response_node, "error")
|
36
|
-
response.error_code = get_required_attribute(error_node, "code").to_i
|
37
|
-
response.error_message = get_required_value(error_node, "errorMessage")
|
38
|
-
else
|
39
|
-
response.error_code = 10001
|
40
|
-
response.error_message = 'Invalid 7digital API response'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
#@private
|
6
|
+
class ApiResponseDigestor < Digestor # :nodoc:
|
7
|
+
|
8
|
+
def default_element_name; :response end
|
9
|
+
|
10
|
+
def from_http_response(http_response)
|
11
|
+
response = ApiResponse.new
|
12
|
+
response.headers = http_response.header
|
13
|
+
response.content = http_response.body.to_s
|
14
|
+
|
15
|
+
parse_xml_doc(response.content, response)
|
16
|
+
|
17
|
+
if response.error_code >= 10000 && !http_response.is_a?(Net::HTTPSuccess)
|
18
|
+
response.error_code = Integer(http_response.code)
|
19
|
+
response.error_message= http_response.body.to_s
|
20
|
+
end
|
21
|
+
response
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_xml_doc(xml, response)
|
25
|
+
|
26
|
+
xml_doc = Nokogiri::XML(xml)
|
27
|
+
|
28
|
+
response_node = xml_doc.at_xpath("./response")
|
29
|
+
response_status = nil
|
30
|
+
response_status = get_optional_attribute(response_node, "status") if response_node
|
31
|
+
if response_status == 'ok' then
|
32
|
+
response.error_code = 0
|
33
|
+
else
|
34
|
+
if response_status == 'error'
|
35
|
+
error_node = get_required_node(response_node, "error")
|
36
|
+
response.error_code = get_required_attribute(error_node, "code").to_i
|
37
|
+
response.error_message = get_required_value(error_node, "errorMessage")
|
38
|
+
else
|
39
|
+
response.error_code = 10001
|
40
|
+
response.error_message = 'Invalid 7digital API response'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
#@private
|
6
|
-
class ArtistDigestor < Digestor # :nodoc:
|
7
|
-
|
8
|
-
def default_element_name; :artist end
|
9
|
-
def default_list_element_name; :artists end
|
10
|
-
|
11
|
-
def from_xml_doc(xml_doc)
|
12
|
-
make_sure_eating_nokogiri_node(xml_doc)
|
13
|
-
artist = Artist.new(@api_client)
|
14
|
-
populate_required_properties(artist, xml_doc)
|
15
|
-
populate_optional_properties(artist, xml_doc)
|
16
|
-
artist
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def populate_required_properties(artist, xml_node)
|
22
|
-
artist.id = get_required_attribute(xml_node, "id") {|v| v.to_i}
|
23
|
-
artist.name = get_required_value(xml_node, "name")
|
24
|
-
end
|
25
|
-
|
26
|
-
def populate_optional_properties(artist, artist_node)
|
27
|
-
artist.sort_name = get_optional_value(artist_node, :sortName)
|
28
|
-
artist.appears_as = get_optional_value(artist_node, :appearsAs)
|
29
|
-
artist.image = get_optional_value(artist_node, :image)
|
30
|
-
artist.url = get_optional_value(artist_node, :url)
|
31
|
-
artist.popularity = get_optional_value(artist_node, :popularity) {|v| v.to_s.to_d}
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
#@private
|
6
|
+
class ArtistDigestor < Digestor # :nodoc:
|
7
|
+
|
8
|
+
def default_element_name; :artist end
|
9
|
+
def default_list_element_name; :artists end
|
10
|
+
|
11
|
+
def from_xml_doc(xml_doc)
|
12
|
+
make_sure_eating_nokogiri_node(xml_doc)
|
13
|
+
artist = Artist.new(@api_client)
|
14
|
+
populate_required_properties(artist, xml_doc)
|
15
|
+
populate_optional_properties(artist, xml_doc)
|
16
|
+
artist
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def populate_required_properties(artist, xml_node)
|
22
|
+
artist.id = get_required_attribute(xml_node, "id") {|v| v.to_i}
|
23
|
+
artist.name = get_required_value(xml_node, "name")
|
24
|
+
end
|
25
|
+
|
26
|
+
def populate_optional_properties(artist, artist_node)
|
27
|
+
artist.sort_name = get_optional_value(artist_node, :sortName)
|
28
|
+
artist.appears_as = get_optional_value(artist_node, :appearsAs)
|
29
|
+
artist.image = get_optional_value(artist_node, :image)
|
30
|
+
artist.url = get_optional_value(artist_node, :url)
|
31
|
+
artist.popularity = get_optional_value(artist_node, :popularity) {|v| v.to_s.to_d}
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
#@private
|
4
|
-
class BasketDigestor < Digestor # :nodoc:
|
5
|
-
|
6
|
-
def default_element_name; :basket end
|
7
|
-
|
8
|
-
def from_xml_doc(xml_node)
|
9
|
-
make_sure_eating_nokogiri_node(xml_node)
|
10
|
-
basket = Sevendigital::Basket.new(@api_client)
|
11
|
-
basket.id = get_required_attribute(xml_node, "id")
|
12
|
-
basket.basket_items = get_required_node(xml_node, "basketItems") { |v| @api_client.basket_item_digestor.list_from_xml_doc(v) }
|
13
|
-
|
14
|
-
basket
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
#@private
|
4
|
+
class BasketDigestor < Digestor # :nodoc:
|
5
|
+
|
6
|
+
def default_element_name; :basket end
|
7
|
+
|
8
|
+
def from_xml_doc(xml_node)
|
9
|
+
make_sure_eating_nokogiri_node(xml_node)
|
10
|
+
basket = Sevendigital::Basket.new(@api_client)
|
11
|
+
basket.id = get_required_attribute(xml_node, "id")
|
12
|
+
basket.basket_items = get_required_node(xml_node, "basketItems") { |v| @api_client.basket_item_digestor.list_from_xml_doc(v) }
|
13
|
+
|
14
|
+
basket
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
#@private
|
4
|
-
class BasketItemDigestor < Digestor # :nodoc:
|
5
|
-
|
6
|
-
def default_element_name; :basketItem end
|
7
|
-
def default_list_element_name; :basketItems end
|
8
|
-
|
9
|
-
def from_xml_doc(xml_node)
|
10
|
-
make_sure_eating_nokogiri_node(xml_node)
|
11
|
-
basket_item = BasketItem.new(@api_client)
|
12
|
-
|
13
|
-
basket_item.id = get_required_attribute(xml_node, "id") {|v| v.to_i}
|
14
|
-
basket_item.type = get_required_value(xml_node, "type") {|v| v.downcase.to_sym}
|
15
|
-
basket_item.artist_name = get_required_value(xml_node, "artistName")
|
16
|
-
basket_item.item_name = get_required_value(xml_node, "itemName")
|
17
|
-
basket_item.release_id = get_required_value(xml_node, "releaseId") {|v| v.to_i}
|
18
|
-
basket_item.track_id = get_required_value(xml_node, "trackId") {|v| v.to_i}
|
19
|
-
basket_item.price = get_required_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
|
20
|
-
|
21
|
-
basket_item
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
#@private
|
4
|
+
class BasketItemDigestor < Digestor # :nodoc:
|
5
|
+
|
6
|
+
def default_element_name; :basketItem end
|
7
|
+
def default_list_element_name; :basketItems end
|
8
|
+
|
9
|
+
def from_xml_doc(xml_node)
|
10
|
+
make_sure_eating_nokogiri_node(xml_node)
|
11
|
+
basket_item = BasketItem.new(@api_client)
|
12
|
+
|
13
|
+
basket_item.id = get_required_attribute(xml_node, "id") {|v| v.to_i}
|
14
|
+
basket_item.type = get_required_value(xml_node, "type") {|v| v.downcase.to_sym}
|
15
|
+
basket_item.artist_name = get_required_value(xml_node, "artistName")
|
16
|
+
basket_item.item_name = get_required_value(xml_node, "itemName")
|
17
|
+
basket_item.release_id = get_required_value(xml_node, "releaseId") {|v| v.to_i}
|
18
|
+
basket_item.track_id = get_required_value(xml_node, "trackId") {|v| v.to_i}
|
19
|
+
basket_item.price = get_required_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
|
20
|
+
|
21
|
+
basket_item
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
#@private
|
4
|
-
class ChartItemDigestor < Digestor # :nodoc:
|
5
|
-
|
6
|
-
def default_element_name; :chartItem end
|
7
|
-
def default_list_element_name; :chart end
|
8
|
-
|
9
|
-
def from_proxy(chart_item_proxy)
|
10
|
-
|
11
|
-
from_xml_string(chart_item_proxy.to_s)
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def from_xml_doc(xml_node)
|
16
|
-
make_sure_eating_nokogiri_node(xml_node)
|
17
|
-
|
18
|
-
chart_item = ChartItem.new(@client)
|
19
|
-
|
20
|
-
chart_item.position = get_required_value(xml_node, "position") {|v| v.to_i}
|
21
|
-
chart_item.change = get_required_value(xml_node, "change") {|v| v.downcase.to_sym}
|
22
|
-
if xml_node.at_xpath("./release") then
|
23
|
-
chart_item.item = get_required_node(xml_node, "release") {|v| @api_client.release_digestor.from_xml_doc(v) }
|
24
|
-
elsif xml_node.at_xpath("./track")
|
25
|
-
chart_item.item = get_required_node(xml_node, "track") {|v| @api_client.track_digestor.from_xml_doc(v) }
|
26
|
-
else
|
27
|
-
chart_item.item = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
|
28
|
-
end
|
29
|
-
return chart_item
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
#@private
|
4
|
+
class ChartItemDigestor < Digestor # :nodoc:
|
5
|
+
|
6
|
+
def default_element_name; :chartItem end
|
7
|
+
def default_list_element_name; :chart end
|
8
|
+
|
9
|
+
def from_proxy(chart_item_proxy)
|
10
|
+
|
11
|
+
from_xml_string(chart_item_proxy.to_s)
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def from_xml_doc(xml_node)
|
16
|
+
make_sure_eating_nokogiri_node(xml_node)
|
17
|
+
|
18
|
+
chart_item = ChartItem.new(@client)
|
19
|
+
|
20
|
+
chart_item.position = get_required_value(xml_node, "position") {|v| v.to_i}
|
21
|
+
chart_item.change = get_required_value(xml_node, "change") {|v| v.downcase.to_sym}
|
22
|
+
if xml_node.at_xpath("./release") then
|
23
|
+
chart_item.item = get_required_node(xml_node, "release") {|v| @api_client.release_digestor.from_xml_doc(v) }
|
24
|
+
elsif xml_node.at_xpath("./track")
|
25
|
+
chart_item.item = get_required_node(xml_node, "track") {|v| @api_client.track_digestor.from_xml_doc(v) }
|
26
|
+
else
|
27
|
+
chart_item.item = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
|
28
|
+
end
|
29
|
+
return chart_item
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
#@private
|
4
|
-
class CountryDigestor < Digestor # :nodoc:
|
5
|
-
|
6
|
-
def default_element_name; :country end
|
7
|
-
|
8
|
-
def from_xml_doc(xml_node)
|
9
|
-
make_sure_eating_nokogiri_node(xml_node)
|
10
|
-
|
11
|
-
get_required_value(xml_node, "countryCode")
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
#@private
|
4
|
+
class CountryDigestor < Digestor # :nodoc:
|
5
|
+
|
6
|
+
def default_element_name; :country end
|
7
|
+
|
8
|
+
def from_xml_doc(xml_node)
|
9
|
+
make_sure_eating_nokogiri_node(xml_node)
|
10
|
+
|
11
|
+
get_required_value(xml_node, "countryCode")
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
16
|
end
|
@@ -1,122 +1,122 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
#@private
|
4
|
-
#internal generic class used for digesting XML responses from the API
|
5
|
-
class Digestor # :nodoc:
|
6
|
-
|
7
|
-
#TODO TEST THIS CRAP
|
8
|
-
|
9
|
-
def initialize(api_client)
|
10
|
-
@api_client = api_client
|
11
|
-
end
|
12
|
-
|
13
|
-
def from_xml_string(xml, element_name = default_element_name)
|
14
|
-
xml_doc = Nokogiri::XML(xml)
|
15
|
-
from_xml_doc(xml_doc.at_xpath("./#{element_name}"))
|
16
|
-
end
|
17
|
-
|
18
|
-
def list_from_xml_string(xml, list_element_name = default_list_element_name)
|
19
|
-
xml_doc = Nokogiri::XML(xml)
|
20
|
-
list_from_xml_doc(xml_doc.at_xpath("./#{list_element_name}"))
|
21
|
-
end
|
22
|
-
|
23
|
-
def list_from_xml_doc(list_node)
|
24
|
-
make_sure_eating_nokogiri_node(list_node)
|
25
|
-
list = []
|
26
|
-
list_node.xpath("./#{default_element_name}").each { |node| list << from_xml_doc(node)}
|
27
|
-
paginate_results(list_node, list)
|
28
|
-
end
|
29
|
-
|
30
|
-
#nested parsing for api methods that return standard object inside containers with no additional (useful) information
|
31
|
-
#e.g. tagged_item.artist, recommendation.release, search_result.track, etc
|
32
|
-
|
33
|
-
def nested_list_from_xml_string(xml, container_element_name, list_element_name = default_list_element_name)
|
34
|
-
xml_doc = Nokogiri::XML(xml)
|
35
|
-
nested_list_from_xml_doc(xml_doc.at_xpath("./#{container_element_name}"), list_element_name)
|
36
|
-
end
|
37
|
-
|
38
|
-
def nested_list_from_xml_doc(list_node, list_element_name = default_list_element_name, element_name = default_element_name)
|
39
|
-
make_sure_eating_nokogiri_node(list_node)
|
40
|
-
list = []
|
41
|
-
list_node.xpath("./#{list_element_name}/#{element_name}").each { |node| list << from_xml_doc(node)}
|
42
|
-
paginate_results(list_node, list)
|
43
|
-
end
|
44
|
-
|
45
|
-
def paginate_results(results_xml_node, list)
|
46
|
-
pager = @api_client.pager_digestor.from_xml_doc(results_xml_node)
|
47
|
-
return list if !pager
|
48
|
-
pager.paginate_list(list)
|
49
|
-
end
|
50
|
-
|
51
|
-
def make_sure_eating_nokogiri_node(xml)
|
52
|
-
raise DigestiveProblem, "There's nothing i can digest" unless xml
|
53
|
-
raise DigestiveProblem, "I'm not eating this! It's not a Nokogiri XML node.'" unless xml.kind_of?(Nokogiri::XML::Node)
|
54
|
-
end
|
55
|
-
|
56
|
-
def value_present?(proxy_node)
|
57
|
-
!proxy_node.nil? && !proxy_node.value.nil? && !proxy_node.value.empty?
|
58
|
-
end
|
59
|
-
|
60
|
-
def content_present?(proxy_node)
|
61
|
-
!proxy_node.nil?
|
62
|
-
end
|
63
|
-
|
64
|
-
def get_required_value(node, element_name)
|
65
|
-
if node.at_xpath("./#{element_name}") then
|
66
|
-
content = node.at_xpath("./#{element_name}").content
|
67
|
-
return yield(content) if block_given?
|
68
|
-
return content
|
69
|
-
end
|
70
|
-
raise DigestiveProblem, "I need #{element_name} element to digest the response"
|
71
|
-
end
|
72
|
-
|
73
|
-
def get_required_node(node, element_name)
|
74
|
-
if node.at_xpath("./#{element_name}") then
|
75
|
-
subnode = node.at_xpath("./#{element_name}")
|
76
|
-
return yield(subnode) if block_given?
|
77
|
-
return subnode
|
78
|
-
end
|
79
|
-
raise DigestiveProblem, "I need #{element_name} element to digest the response"
|
80
|
-
end
|
81
|
-
|
82
|
-
def get_required_attribute(node, attribute_name)
|
83
|
-
if node.at_xpath("@#{attribute_name}") then
|
84
|
-
content = node.at_xpath("@#{attribute_name}").content
|
85
|
-
return yield(content) if block_given?
|
86
|
-
return content
|
87
|
-
end
|
88
|
-
raise DigestiveProblem, "I need #{attribute_name} attribute to digest the response"
|
89
|
-
end
|
90
|
-
|
91
|
-
def get_optional_value(node, element_name)
|
92
|
-
if node.at_xpath("./#{element_name}") then
|
93
|
-
content = node.at_xpath("./#{element_name}").content
|
94
|
-
return yield(content) if block_given?
|
95
|
-
return content
|
96
|
-
end
|
97
|
-
nil
|
98
|
-
end
|
99
|
-
|
100
|
-
def get_optional_node(node, element_name)
|
101
|
-
if node.at_xpath("./#{element_name}") then
|
102
|
-
subnode = node.at_xpath("./#{element_name}")
|
103
|
-
return yield(subnode) if block_given?
|
104
|
-
return subnode
|
105
|
-
end
|
106
|
-
nil
|
107
|
-
end
|
108
|
-
|
109
|
-
def get_optional_attribute(node, attribute_name)
|
110
|
-
if node.at_xpath("@#{attribute_name}") then
|
111
|
-
content = node.at_xpath("@#{attribute_name}").content
|
112
|
-
return yield(content) if block_given?
|
113
|
-
return content
|
114
|
-
end
|
115
|
-
nil
|
116
|
-
end
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
class DigestiveProblem < StandardError; end
|
121
|
-
|
122
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
#@private
|
4
|
+
#internal generic class used for digesting XML responses from the API
|
5
|
+
class Digestor # :nodoc:
|
6
|
+
|
7
|
+
#TODO TEST THIS CRAP
|
8
|
+
|
9
|
+
def initialize(api_client)
|
10
|
+
@api_client = api_client
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_xml_string(xml, element_name = default_element_name)
|
14
|
+
xml_doc = Nokogiri::XML(xml)
|
15
|
+
from_xml_doc(xml_doc.at_xpath("./#{element_name}"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def list_from_xml_string(xml, list_element_name = default_list_element_name)
|
19
|
+
xml_doc = Nokogiri::XML(xml)
|
20
|
+
list_from_xml_doc(xml_doc.at_xpath("./#{list_element_name}"))
|
21
|
+
end
|
22
|
+
|
23
|
+
def list_from_xml_doc(list_node)
|
24
|
+
make_sure_eating_nokogiri_node(list_node)
|
25
|
+
list = []
|
26
|
+
list_node.xpath("./#{default_element_name}").each { |node| list << from_xml_doc(node)}
|
27
|
+
paginate_results(list_node, list)
|
28
|
+
end
|
29
|
+
|
30
|
+
#nested parsing for api methods that return standard object inside containers with no additional (useful) information
|
31
|
+
#e.g. tagged_item.artist, recommendation.release, search_result.track, etc
|
32
|
+
|
33
|
+
def nested_list_from_xml_string(xml, container_element_name, list_element_name = default_list_element_name)
|
34
|
+
xml_doc = Nokogiri::XML(xml)
|
35
|
+
nested_list_from_xml_doc(xml_doc.at_xpath("./#{container_element_name}"), list_element_name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def nested_list_from_xml_doc(list_node, list_element_name = default_list_element_name, element_name = default_element_name)
|
39
|
+
make_sure_eating_nokogiri_node(list_node)
|
40
|
+
list = []
|
41
|
+
list_node.xpath("./#{list_element_name}/#{element_name}").each { |node| list << from_xml_doc(node)}
|
42
|
+
paginate_results(list_node, list)
|
43
|
+
end
|
44
|
+
|
45
|
+
def paginate_results(results_xml_node, list)
|
46
|
+
pager = @api_client.pager_digestor.from_xml_doc(results_xml_node)
|
47
|
+
return list if !pager
|
48
|
+
pager.paginate_list(list)
|
49
|
+
end
|
50
|
+
|
51
|
+
def make_sure_eating_nokogiri_node(xml)
|
52
|
+
raise DigestiveProblem, "There's nothing i can digest" unless xml
|
53
|
+
raise DigestiveProblem, "I'm not eating this! It's not a Nokogiri XML node.'" unless xml.kind_of?(Nokogiri::XML::Node)
|
54
|
+
end
|
55
|
+
|
56
|
+
def value_present?(proxy_node)
|
57
|
+
!proxy_node.nil? && !proxy_node.value.nil? && !proxy_node.value.empty?
|
58
|
+
end
|
59
|
+
|
60
|
+
def content_present?(proxy_node)
|
61
|
+
!proxy_node.nil?
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_required_value(node, element_name)
|
65
|
+
if node.at_xpath("./#{element_name}") then
|
66
|
+
content = node.at_xpath("./#{element_name}").content
|
67
|
+
return yield(content) if block_given?
|
68
|
+
return content
|
69
|
+
end
|
70
|
+
raise DigestiveProblem, "I need #{element_name} element to digest the response"
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_required_node(node, element_name)
|
74
|
+
if node.at_xpath("./#{element_name}") then
|
75
|
+
subnode = node.at_xpath("./#{element_name}")
|
76
|
+
return yield(subnode) if block_given?
|
77
|
+
return subnode
|
78
|
+
end
|
79
|
+
raise DigestiveProblem, "I need #{element_name} element to digest the response"
|
80
|
+
end
|
81
|
+
|
82
|
+
def get_required_attribute(node, attribute_name)
|
83
|
+
if node.at_xpath("@#{attribute_name}") then
|
84
|
+
content = node.at_xpath("@#{attribute_name}").content
|
85
|
+
return yield(content) if block_given?
|
86
|
+
return content
|
87
|
+
end
|
88
|
+
raise DigestiveProblem, "I need #{attribute_name} attribute to digest the response"
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_optional_value(node, element_name)
|
92
|
+
if node.at_xpath("./#{element_name}") then
|
93
|
+
content = node.at_xpath("./#{element_name}").content
|
94
|
+
return yield(content) if block_given?
|
95
|
+
return content
|
96
|
+
end
|
97
|
+
nil
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_optional_node(node, element_name)
|
101
|
+
if node.at_xpath("./#{element_name}") then
|
102
|
+
subnode = node.at_xpath("./#{element_name}")
|
103
|
+
return yield(subnode) if block_given?
|
104
|
+
return subnode
|
105
|
+
end
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_optional_attribute(node, attribute_name)
|
110
|
+
if node.at_xpath("@#{attribute_name}") then
|
111
|
+
content = node.at_xpath("@#{attribute_name}").content
|
112
|
+
return yield(content) if block_given?
|
113
|
+
return content
|
114
|
+
end
|
115
|
+
nil
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
class DigestiveProblem < StandardError; end
|
121
|
+
|
122
|
+
end
|