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,28 +1,28 @@
1
- module Sevendigital
2
-
3
- #@private
4
- class PagerDigestor < Digestor # :nodoc:
5
-
6
- def default_element_name; :results end
7
- def default_list_element_name; nil end
8
-
9
- def from_xml_doc(xml_node)
10
- make_sure_eating_nokogiri_node(xml_node)
11
-
12
- return nil unless paging_info_available?(xml_node)
13
-
14
- pager = Pager.new
15
-
16
- pager.page = get_required_value(xml_node,"page").to_i
17
- pager.page_size = get_required_value(xml_node,"pageSize").to_i
18
- pager.total_items = get_required_value(xml_node,"totalItems").to_i
19
-
20
- pager
21
- end
22
-
23
- def paging_info_available?(xml_doc)
24
- xml_doc.at_xpath("./page") && xml_doc.at_xpath("./pageSize") && xml_doc.at_xpath("./totalItems")
25
- end
26
-
27
- end
28
- end
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class PagerDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :results end
7
+ def default_list_element_name; nil end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ return nil unless paging_info_available?(xml_node)
13
+
14
+ pager = Pager.new
15
+
16
+ pager.page = get_required_value(xml_node,"page").to_i
17
+ pager.page_size = get_required_value(xml_node,"pageSize").to_i
18
+ pager.total_items = get_required_value(xml_node,"totalItems").to_i
19
+
20
+ pager
21
+ end
22
+
23
+ def paging_info_available?(xml_doc)
24
+ xml_doc.at_xpath("./page") && xml_doc.at_xpath("./pageSize") && xml_doc.at_xpath("./totalItems")
25
+ end
26
+
27
+ end
28
+ end
@@ -1,29 +1,29 @@
1
- require 'rational'
2
- module Sevendigital
3
-
4
- #@private
5
- class PriceDigestor < Digestor # :nodoc:
6
-
7
- def default_element_name; :price end
8
- def default_list_element_name; nil end
9
-
10
- def from_xml_doc(xml_node)
11
- make_sure_eating_nokogiri_node(xml_node)
12
- price = Sevendigital::Price.new()
13
- get_required_node(xml_node, "currency") do |c|
14
- price.currency_code = get_required_attribute(c, "code") {|v| v.upcase.to_sym}
15
- end
16
- price.currency_symbol = get_required_value(xml_node, "currency")
17
- price.value = get_required_value(xml_node,"value") {|v| v.to_d unless v.empty?}
18
- price.formatted_price = get_required_value(xml_node,"formattedPrice")
19
- price.rrp = get_optional_value(xml_node,"rrp") {|v| v.to_d unless v.empty?}
20
- price.formatted_rrp = get_optional_value(xml_node,"formattedRrp")
21
- price.on_sale = get_optional_value(xml_node,"onSale") {|v| v.downcase == "true"}
22
-
23
- price
24
- end
25
-
26
-
27
- end
28
-
1
+ require 'rational'
2
+ module Sevendigital
3
+
4
+ #@private
5
+ class PriceDigestor < Digestor # :nodoc:
6
+
7
+ def default_element_name; :price end
8
+ def default_list_element_name; nil end
9
+
10
+ def from_xml_doc(xml_node)
11
+ make_sure_eating_nokogiri_node(xml_node)
12
+ price = Sevendigital::Price.new()
13
+ get_required_node(xml_node, "currency") do |c|
14
+ price.currency_code = get_required_attribute(c, "code") {|v| v.upcase.to_sym}
15
+ end
16
+ price.currency_symbol = get_required_value(xml_node, "currency")
17
+ price.value = get_required_value(xml_node,"value") {|v| v.to_d unless v.empty?}
18
+ price.formatted_price = get_required_value(xml_node,"formattedPrice")
19
+ price.rrp = get_optional_value(xml_node,"rrp") {|v| v.to_d unless v.empty?}
20
+ price.formatted_rrp = get_optional_value(xml_node,"formattedRrp")
21
+ price.on_sale = get_optional_value(xml_node,"onSale") {|v| v.downcase == "true"}
22
+
23
+ price
24
+ end
25
+
26
+
27
+ end
28
+
29
29
  end
@@ -1,45 +1,45 @@
1
- module Sevendigital
2
-
3
- require 'date'
4
-
5
- #@private
6
- class ReleaseDigestor < Digestor # :nodoc:
7
-
8
- def default_element_name; :release end
9
- def default_list_element_name; :releases end
10
-
11
- def from_xml_doc(xml_node)
12
- make_sure_eating_nokogiri_node(xml_node)
13
-
14
- release = Release.new(@api_client)
15
-
16
- populate_required_properties(release, xml_node)
17
- populate_optional_properties(release, xml_node)
18
-
19
- release
20
- end
21
-
22
- def populate_required_properties(release, xml_node)
23
- release.id = get_required_attribute(xml_node, "id").to_i
24
- release.title = get_required_value(xml_node, "title")
25
- release.artist = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
26
- end
27
-
28
- def populate_optional_properties(release, xml_node)
29
- release.version = get_optional_value(xml_node, "version")
30
- release.type = get_optional_value(xml_node, "type") {|v| v.to_s.downcase.to_sym}
31
- release.barcode = get_optional_value(xml_node, "barcode")
32
- release.year = get_optional_value(xml_node, "year") {|v| v.to_i}
33
- release.explicit_content = get_optional_value(xml_node, "explicitContent") {|v| v.to_s.downcase == "true"}
34
- release.release_date = get_optional_value(xml_node, "releaseDate") {|v| DateTime.parse(v)}
35
- release.added_date = get_optional_value(xml_node, "addedDate") {|v| DateTime.parse(v)}
36
- release.label = get_optional_node(xml_node, "label") {|v| @api_client.label_digestor.from_xml_doc(v)}
37
- release.image = get_optional_value(xml_node, "image")
38
- release.url = get_optional_value(xml_node, "url")
39
- release.price = get_optional_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
40
- release.formats = get_optional_node(xml_node, "formats") {|v| @api_client.format_digestor.list_from_xml_doc(v)}
41
- end
42
-
43
- end
44
-
45
- end
1
+ module Sevendigital
2
+
3
+ require 'date'
4
+
5
+ #@private
6
+ class ReleaseDigestor < Digestor # :nodoc:
7
+
8
+ def default_element_name; :release end
9
+ def default_list_element_name; :releases end
10
+
11
+ def from_xml_doc(xml_node)
12
+ make_sure_eating_nokogiri_node(xml_node)
13
+
14
+ release = Release.new(@api_client)
15
+
16
+ populate_required_properties(release, xml_node)
17
+ populate_optional_properties(release, xml_node)
18
+
19
+ release
20
+ end
21
+
22
+ def populate_required_properties(release, xml_node)
23
+ release.id = get_required_attribute(xml_node, "id").to_i
24
+ release.title = get_required_value(xml_node, "title")
25
+ release.artist = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
26
+ end
27
+
28
+ def populate_optional_properties(release, xml_node)
29
+ release.version = get_optional_value(xml_node, "version")
30
+ release.type = get_optional_value(xml_node, "type") {|v| v.to_s.downcase.to_sym}
31
+ release.barcode = get_optional_value(xml_node, "barcode")
32
+ release.year = get_optional_value(xml_node, "year") {|v| v.to_i}
33
+ release.explicit_content = get_optional_value(xml_node, "explicitContent") {|v| v.to_s.downcase == "true"}
34
+ release.release_date = get_optional_value(xml_node, "releaseDate") {|v| DateTime.parse(v)}
35
+ release.added_date = get_optional_value(xml_node, "addedDate") {|v| DateTime.parse(v)}
36
+ release.label = get_optional_node(xml_node, "label") {|v| @api_client.label_digestor.from_xml_doc(v)}
37
+ release.image = get_optional_value(xml_node, "image")
38
+ release.url = get_optional_value(xml_node, "url")
39
+ release.price = get_optional_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
40
+ release.formats = get_optional_node(xml_node, "formats") {|v| @api_client.format_digestor.list_from_xml_doc(v)}
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -1,24 +1,24 @@
1
- module Sevendigital
2
-
3
- #@private
4
- class TagDigestor < Digestor # :nodoc:
5
-
6
- def default_element_name; :tag end
7
- def default_list_element_name; :tags end
8
-
9
- def from_xml_doc(xml_node)
10
- make_sure_eating_nokogiri_node(xml_node)
11
-
12
- tag = Tag.new()
13
-
14
- tag.id = get_required_attribute(xml_node, "id")
15
- tag.text = get_required_value(xml_node, "text")
16
- tag.url = get_optional_value(xml_node, "url")
17
- tag.count = get_optional_value(xml_node, "count") {|v| v.to_i}
18
-
19
- tag
20
- end
21
-
22
- end
23
-
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class TagDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :tag end
7
+ def default_list_element_name; :tags end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ tag = Tag.new()
13
+
14
+ tag.id = get_required_attribute(xml_node, "id")
15
+ tag.text = get_required_value(xml_node, "text")
16
+ tag.url = get_optional_value(xml_node, "url")
17
+ tag.count = get_optional_value(xml_node, "count") {|v| v.to_i}
18
+
19
+ tag
20
+ end
21
+
22
+ end
23
+
24
24
  end
@@ -1,37 +1,38 @@
1
- module Sevendigital
2
-
3
- #@private
4
- class TrackDigestor < Digestor # :nodoc:
5
-
6
- def default_element_name; :track end
7
- def default_list_element_name; :tracks end
8
-
9
- def from_xml_doc(xml_node)
10
- make_sure_eating_nokogiri_node(xml_node)
11
-
12
- track = Track.new(@api_client)
13
-
14
- populate_required_properties(track, xml_node)
15
- populate_optional_properties(track, xml_node)
16
-
17
- track
18
- end
19
-
20
- def populate_required_properties(track, xml_node)
21
- track.id = get_required_attribute(xml_node, "id").to_i
22
- track.title = get_required_value(xml_node, "title")
23
- track.artist = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
24
- end
25
-
26
- def populate_optional_properties(track, xml_node)
27
- track.version = get_optional_value(xml_node, "version")
28
- track.track_number = get_optional_value(xml_node, "trackNumber") {|v| v.to_i}
29
- track.duration = get_optional_value(xml_node, "duration") {|v| v.to_i}
30
- track.release = get_optional_node(xml_node, "release") {|v |@api_client.release_digestor.from_xml_doc(v)}
31
- track.explicit_content = get_optional_value(xml_node, "explicitContent") {|v| v.downcase == "true"}
32
- track.isrc = get_optional_value(xml_node, "isrc")
33
- track.url = get_optional_value(xml_node, "url")
34
- track.price = get_optional_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
35
- end
36
- end
37
- end
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class TrackDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :track end
7
+ def default_list_element_name; :tracks end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ track = Track.new(@api_client)
13
+
14
+ populate_required_properties(track, xml_node)
15
+ populate_optional_properties(track, xml_node)
16
+
17
+ track
18
+ end
19
+
20
+ def populate_required_properties(track, xml_node)
21
+ track.id = get_required_attribute(xml_node, "id").to_i
22
+ track.title = get_required_value(xml_node, "title")
23
+ track.artist = get_required_node(xml_node, "artist") {|v| @api_client.artist_digestor.from_xml_doc(v) }
24
+ end
25
+
26
+ def populate_optional_properties(track, xml_node)
27
+ track.version = get_optional_value(xml_node, "version")
28
+ track.track_number = get_optional_value(xml_node, "trackNumber") {|v| v.to_i}
29
+ track.duration = get_optional_value(xml_node, "duration") {|v| v.to_i}
30
+ track.release = get_optional_node(xml_node, "release") {|v |@api_client.release_digestor.from_xml_doc(v)}
31
+ track.explicit_content = get_optional_value(xml_node, "explicitContent") {|v| v.downcase == "true"}
32
+ track.isrc = get_optional_value(xml_node, "isrc")
33
+ track.url = get_optional_value(xml_node, "url")
34
+ track.price = get_optional_node(xml_node, "price") {|v| @api_client.price_digestor.from_xml_doc(v)}
35
+ track.type = get_optional_value(xml_node, "type") {|v| v.to_s.downcase.to_sym}
36
+ end
37
+ end
38
+ end
@@ -1,25 +1,25 @@
1
- module Sevendigital
2
-
3
- #@private
4
- class UserCardDigestor < Digestor # :nodoc:
5
-
6
- def default_element_name; :card end
7
- def default_list_element_name; :cards end
8
-
9
- def from_xml_doc(xml_node)
10
- make_sure_eating_nokogiri_node(xml_node)
11
-
12
- card = Sevendigital::Card.new(@api_client)
13
-
14
- card.id = get_optional_attribute(xml_node,"id").to_i
15
- card.type = get_required_value(xml_node, "type")
16
- card.last_4_digits = get_required_value(xml_node, "last4digits")
17
- card.card_holder_name = get_optional_value(xml_node, "cardHolderName")
18
- card.expiry_date = get_optional_value(xml_node, "expiryDate")
19
-
20
- card
21
- end
22
-
23
- end
24
-
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class UserCardDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :card end
7
+ def default_list_element_name; :cards end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ card = Sevendigital::Card.new(@api_client)
13
+
14
+ card.id = get_optional_attribute(xml_node,"id").to_i
15
+ card.type = get_required_value(xml_node, "type")
16
+ card.last_4_digits = get_required_value(xml_node, "last4digits")
17
+ card.card_holder_name = get_optional_value(xml_node, "cardHolderName")
18
+ card.expiry_date = get_optional_value(xml_node, "expiryDate")
19
+
20
+ card
21
+ end
22
+
23
+ end
24
+
25
25
  end
@@ -1,22 +1,22 @@
1
- module Sevendigital
2
-
3
- #@private
4
- class UserDigestor < Digestor # :nodoc:
5
-
6
- def default_element_name; :user end
7
-
8
- def from_xml_doc(xml_node)
9
- make_sure_eating_nokogiri_node(xml_node)
10
-
11
- user = User.new(@api_client)
12
-
13
- user.id = get_optional_attribute(xml_node, "id")
14
- user.type = get_optional_value(xml_node, "type") {|v| v.to_sym}
15
- user.email_address = get_optional_value(xml_node, "emailAddress")
16
-
17
- user
18
- end
19
-
20
- end
21
-
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class UserDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :user end
7
+
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
10
+
11
+ user = User.new(@api_client)
12
+
13
+ user.id = get_optional_attribute(xml_node, "id")
14
+ user.type = get_optional_value(xml_node, "type") {|v| v.to_sym}
15
+ user.email_address = get_optional_value(xml_node, "emailAddress")
16
+
17
+ user
18
+ end
19
+
20
+ end
21
+
22
22
  end
@@ -1,97 +1,97 @@
1
- module Sevendigital
2
-
3
- # provides access to Artist related API methods (artist/*)
4
- class ArtistManager < Manager
5
-
6
- # calls *artist/details* API method and returns Artist with populated details
7
- #
8
- # @param [Integer] artist_id
9
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
10
- # @return [Artist]
11
- def get_details(artist_id, options={})
12
- api_response = @api_client.make_api_request(:GET, "artist/details", {:artistId => artist_id}, options)
13
- @api_client.artist_digestor.from_xml_doc(api_response.item_xml("artist"))
14
- end
15
-
16
- # calls *artist/releases* API method and returns Release array
17
- #
18
- # @param [Integer] artist_id
19
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
20
- # @return [[Artist]]
21
- def get_releases(artist_id, options={})
22
- api_response = @api_client.make_api_request(:GET, "artist/releases", {:artistId => artist_id}, options)
23
- @api_client.release_digestor.list_from_xml_doc(api_response.item_xml("releases"))
24
- end
25
-
26
- # calls *artist/toptracks* API method and returns Track array
27
- #
28
- # @param [Integer] artist_id
29
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
30
- # @return [Array<Track>]
31
- def get_top_tracks(artist_id, options={})
32
- api_response = @api_client.make_api_request(:GET, "artist/topTracks", {:artistId => artist_id}, options)
33
- @api_client.track_digestor.list_from_xml_doc(api_response.item_xml("tracks"))
34
- end
35
-
36
- # calls *artist/similar* API method and returns Artist array
37
- #
38
- # @param [Integer] artist_id
39
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
40
- # @return [Array<Artist>]
41
- def get_similar(artist_id, options={})
42
- api_response = @api_client.make_api_request(:GET, "artist/similar", {:artistId => artist_id}, options)
43
- @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
44
- end
45
-
46
- # calls *artist/byTag/top* API method and returns Artist array
47
- #
48
- # @param [String] tags tag or comma separated list of tags
49
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
50
- # @return [Array<Artist>]
51
- def get_top_by_tag(tags, options={})
52
- api_response = @api_client.make_api_request(:GET, "artist/byTag/top", {:tags => tags}, options)
53
- @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("taggedResults"), :taggedItem, :artist)
54
- end
55
-
56
- # calls *artist/search* API method and returns Artist array
57
- #
58
- # @param [String] query search query
59
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
60
- # @return [Array<Artist>]
61
- def search(query, options={})
62
- api_response = @api_client.make_api_request(:GET, "artist/search", {:q => query}, options)
63
- @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("searchResults"), :searchResult, :artist)
64
- end
65
-
66
- # calls *artist/browse* API method and returns Artist array
67
- #
68
- # @param [String] letter the letter(s) returned artist names should artists
69
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
70
- # @return [Array<Artist>]
71
- def browse(letter, options={})
72
- api_response = @api_client.make_api_request(:GET, "artist/browse", {:letter => letter}, options)
73
- @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
74
- end
75
-
76
- # calls *artist/chart* API method and returns Artist array
77
- #
78
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
79
- def get_chart(options={})
80
- api_response = @api_client.make_api_request(:GET, "artist/chart", {}, options)
81
- @api_client.chart_item_digestor.list_from_xml_doc(api_response.item_xml("chart"))
82
- end
83
-
84
- # calls *artist/tags* API method and returns Tag array
85
- #
86
- # @param [Integer] artist_id
87
- # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
88
- # @return [Array<Tag>]
89
- def get_tags(artist_id, options={})
90
- api_response = @api_client.make_api_request(:GET, "artist/tags", {:artistId => artist_id}, options)
91
- @api_client.tag_digestor.list_from_xml_doc(api_response.item_xml("tags"))
92
- end
93
-
94
-
95
- end
96
-
97
- end
1
+ module Sevendigital
2
+
3
+ # provides access to Artist related API methods (artist/*)
4
+ class ArtistManager < Manager
5
+
6
+ # calls *artist/details* API method and returns Artist with populated details
7
+ #
8
+ # @param [Integer] artist_id
9
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
10
+ # @return [Artist]
11
+ def get_details(artist_id, options={})
12
+ api_response = @api_client.make_api_request(:GET, "artist/details", {:artistId => artist_id}, options)
13
+ @api_client.artist_digestor.from_xml_doc(api_response.item_xml("artist"))
14
+ end
15
+
16
+ # calls *artist/releases* API method and returns Release array
17
+ #
18
+ # @param [Integer] artist_id
19
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
20
+ # @return [[Artist]]
21
+ def get_releases(artist_id, options={})
22
+ api_response = @api_client.make_api_request(:GET, "artist/releases", {:artistId => artist_id}, options)
23
+ @api_client.release_digestor.list_from_xml_doc(api_response.item_xml("releases"))
24
+ end
25
+
26
+ # calls *artist/toptracks* API method and returns Track array
27
+ #
28
+ # @param [Integer] artist_id
29
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
30
+ # @return [Array<Track>]
31
+ def get_top_tracks(artist_id, options={})
32
+ api_response = @api_client.make_api_request(:GET, "artist/topTracks", {:artistId => artist_id}, options)
33
+ @api_client.track_digestor.list_from_xml_doc(api_response.item_xml("tracks"))
34
+ end
35
+
36
+ # calls *artist/similar* API method and returns Artist array
37
+ #
38
+ # @param [Integer] artist_id
39
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
40
+ # @return [Array<Artist>]
41
+ def get_similar(artist_id, options={})
42
+ api_response = @api_client.make_api_request(:GET, "artist/similar", {:artistId => artist_id}, options)
43
+ @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
44
+ end
45
+
46
+ # calls *artist/byTag/top* API method and returns Artist array
47
+ #
48
+ # @param [String] tags tag or comma separated list of tags
49
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
50
+ # @return [Array<Artist>]
51
+ def get_top_by_tag(tags, options={})
52
+ api_response = @api_client.make_api_request(:GET, "artist/byTag/top", {:tags => tags}, options)
53
+ @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("taggedResults"), :taggedItem, :artist)
54
+ end
55
+
56
+ # calls *artist/search* API method and returns Artist array
57
+ #
58
+ # @param [String] query search query
59
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
60
+ # @return [Array<Artist>]
61
+ def search(query, options={})
62
+ api_response = @api_client.make_api_request(:GET, "artist/search", {:q => query}, options)
63
+ @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("searchResults"), :searchResult, :artist)
64
+ end
65
+
66
+ # calls *artist/browse* API method and returns Artist array
67
+ #
68
+ # @param [String] letter the letter(s) returned artist names should artists
69
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
70
+ # @return [Array<Artist>]
71
+ def browse(letter, options={})
72
+ api_response = @api_client.make_api_request(:GET, "artist/browse", {:letter => letter}, options)
73
+ @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
74
+ end
75
+
76
+ # calls *artist/chart* API method and returns Artist array
77
+ #
78
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
79
+ def get_chart(options={})
80
+ api_response = @api_client.make_api_request(:GET, "artist/chart", {}, options)
81
+ @api_client.chart_item_digestor.list_from_xml_doc(api_response.item_xml("chart"))
82
+ end
83
+
84
+ # calls *artist/tags* API method and returns Tag array
85
+ #
86
+ # @param [Integer] artist_id
87
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
88
+ # @return [Array<Tag>]
89
+ def get_tags(artist_id, options={})
90
+ api_response = @api_client.make_api_request(:GET, "artist/tags", {:artistId => artist_id}, options)
91
+ @api_client.tag_digestor.list_from_xml_doc(api_response.item_xml("tags"))
92
+ end
93
+
94
+
95
+ end
96
+
97
+ end