7digital 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/README.rdoc +8 -1
  2. data/lib/sevendigital.rb +4 -2
  3. data/lib/sevendigital/api_operator.rb +92 -94
  4. data/lib/sevendigital/api_operator_cached.rb +55 -33
  5. data/lib/sevendigital/api_request.rb +50 -54
  6. data/lib/sevendigital/client.rb +15 -6
  7. data/lib/sevendigital/client_configuration.rb +0 -3
  8. data/lib/sevendigital/client_digestors.rb +15 -0
  9. data/lib/sevendigital/client_managers.rb +11 -1
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +31 -40
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +16 -13
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +5 -5
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +12 -12
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +17 -11
  15. data/lib/sevendigital/digestion_tract/country_digestor.rb +16 -0
  16. data/lib/sevendigital/digestion_tract/digestor.rb +82 -28
  17. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +10 -7
  18. data/lib/sevendigital/digestion_tract/format_digestor.rb +11 -9
  19. data/lib/sevendigital/digestion_tract/label_digestor.rb +8 -7
  20. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -0
  21. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -0
  22. data/lib/sevendigital/digestion_tract/locker_digestor.rb +9 -5
  23. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +13 -7
  24. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +13 -9
  25. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +7 -3
  26. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +7 -3
  27. data/lib/sevendigital/digestion_tract/pager_digestor.rb +13 -9
  28. data/lib/sevendigital/digestion_tract/price_digestor.rb +15 -12
  29. data/lib/sevendigital/digestion_tract/release_digestor.rb +26 -34
  30. data/lib/sevendigital/digestion_tract/tag_digestor.rb +8 -7
  31. data/lib/sevendigital/digestion_tract/track_digestor.rb +27 -28
  32. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +9 -8
  33. data/lib/sevendigital/digestion_tract/user_digestor.rb +8 -7
  34. data/lib/sevendigital/management/artist_manager.rb +9 -11
  35. data/lib/sevendigital/management/basket_manager.rb +4 -4
  36. data/lib/sevendigital/management/country_manager.rb +11 -0
  37. data/lib/sevendigital/management/list_manager.rb +18 -0
  38. data/lib/sevendigital/management/oauth_manager.rb +2 -2
  39. data/lib/sevendigital/management/release_manager.rb +9 -11
  40. data/lib/sevendigital/management/tag_manager.rb +1 -1
  41. data/lib/sevendigital/management/track_manager.rb +4 -5
  42. data/lib/sevendigital/management/user_card_manager.rb +2 -2
  43. data/lib/sevendigital/management/user_manager.rb +9 -4
  44. data/lib/sevendigital/model/api_response.rb +12 -4
  45. data/lib/sevendigital/model/artist.rb +5 -0
  46. data/lib/sevendigital/model/list.rb +5 -0
  47. data/lib/sevendigital/model/list_item.rb +9 -0
  48. data/lib/sevendigital/model/release.rb +2 -2
  49. data/lib/sevendigital/model/sevendigital_object.rb +1 -1
  50. data/lib/sevendigital/model/user.rb +12 -1
  51. data/lib/sevendigital/pager.rb +2 -6
  52. data/lib/sevendigital/version.rb +1 -1
  53. data/spec/api_operator_cached_spec.rb +14 -14
  54. data/spec/api_operator_spec.rb +18 -34
  55. data/spec/digestion_tract/api_response_digestor_spec.rb +26 -25
  56. data/spec/digestion_tract/artist_digestor_spec.rb +9 -9
  57. data/spec/digestion_tract/basket_digestor_spec.rb +2 -2
  58. data/spec/digestion_tract/basket_item_digestor_spec.rb +4 -4
  59. data/spec/digestion_tract/chart_digestor_spec.rb +4 -4
  60. data/spec/digestion_tract/country_digestor_spec.rb +33 -0
  61. data/spec/digestion_tract/digestor_spec.rb +34 -0
  62. data/spec/digestion_tract/download_url_digestor_spec.rb +2 -2
  63. data/spec/digestion_tract/format_digestor_spec.rb +2 -2
  64. data/spec/digestion_tract/label_digestor_spec.rb +2 -2
  65. data/spec/digestion_tract/list_digestor_spec.rb +32 -0
  66. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -0
  67. data/spec/digestion_tract/locker_digestor_spec.rb +2 -2
  68. data/spec/digestion_tract/locker_release_digestor_spec.rb +5 -5
  69. data/spec/digestion_tract/locker_track_digestor_spec.rb +4 -4
  70. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +2 -2
  71. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +2 -2
  72. data/spec/digestion_tract/pager_digestor_spec.rb +3 -3
  73. data/spec/digestion_tract/price_digestor_spec.rb +4 -4
  74. data/spec/digestion_tract/release_digestor_spec.rb +19 -5
  75. data/spec/digestion_tract/tag_digestor_spec.rb +3 -3
  76. data/spec/digestion_tract/track_digestor_spec.rb +4 -4
  77. data/spec/digestion_tract/user_card_digestor_spec.rb +5 -5
  78. data/spec/digestion_tract/user_digestor_spec.rb +4 -6
  79. data/spec/integration/artist_spec.rb +86 -0
  80. data/spec/integration/country_spec.rb +18 -0
  81. data/spec/integration/list_spec.rb +22 -0
  82. data/spec/integration/purchasing_spec.rb +24 -0
  83. data/spec/integration/release_spec.rb +34 -0
  84. data/spec/integration/sevendigital_spec.yml +5 -0
  85. data/spec/integration/track_spec.rb +23 -0
  86. data/spec/integration/user_spec.rb +22 -0
  87. data/spec/management/artist_manager_spec.rb +32 -11
  88. data/spec/management/basket_manager_spec.rb +4 -4
  89. data/spec/management/country_manager_spec.rb +34 -0
  90. data/spec/management/list_manager_spec.rb +27 -0
  91. data/spec/management/oauth_manager_spec.rb +4 -4
  92. data/spec/management/release_manager_spec.rb +13 -13
  93. data/spec/management/tag_manager_spec.rb +1 -1
  94. data/spec/management/track_manager_spec.rb +4 -4
  95. data/spec/management/user_card_manager_spec.rb +2 -2
  96. data/spec/management/user_manager_spec.rb +20 -4
  97. data/spec/model/api_response_spec.rb +3 -3
  98. data/spec/model/artist_spec.rb +2 -2
  99. data/spec/model/sevendigital_object_spec.rb +4 -4
  100. data/spec/model/user_spec.rb +21 -0
  101. data/spec/spec_helper.rb +31 -11
  102. data/spec/test-xml/methods/country/resolve.xml +7 -0
  103. data/spec/test-xml/methods/editorial/list.xml +171 -0
  104. data/spec/test-xml/methods/user/details.xml +5 -0
  105. data/spec/test-xml/objects/artist.xml +1 -0
  106. data/spec/test-xml/objects/list.xml +89 -0
  107. data/spec/test-xml/objects/list_item_list.xml +86 -0
  108. data/spec/test-xml/objects/list_item_release.xml +14 -0
  109. data/spec/test-xml/objects/nested_release_list.xml +23 -0
  110. metadata +126 -273
  111. data/lib/sevendigital/peachy_patchy.rb +0 -9
  112. data/lib/sevendigital/proxy_police.rb +0 -28
  113. data/spec/coverage/assets/0.3.9/app.js +0 -66
  114. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  115. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  116. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  117. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  118. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  119. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  120. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  121. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  122. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  123. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  124. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  125. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  126. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  127. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  128. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  129. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  130. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  131. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  132. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  133. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  134. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  135. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  136. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  137. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  138. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  139. data/spec/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  140. data/spec/coverage/assets/0.3.9/jquery.url.js +0 -174
  141. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  142. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  143. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  144. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  145. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  146. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  147. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  148. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  149. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  150. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  151. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  152. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  153. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  154. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  155. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  156. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  157. data/spec/coverage/assets/0.3.9/stylesheet.css +0 -341
  158. data/spec/coverage/index.html +0 -47481
  159. data/spec/coverage/resultset.yml +0 -3556
  160. data/spec/model/coverage/assets/0.3.9/app.js +0 -66
  161. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  162. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  163. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  164. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  165. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  166. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  167. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  168. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  169. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  170. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  171. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  172. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  173. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  174. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  175. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  176. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  177. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  178. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  179. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  180. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  181. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  182. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  183. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  184. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  185. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  186. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  187. data/spec/model/coverage/assets/0.3.9/jquery.url.js +0 -174
  188. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  189. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  190. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  191. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  192. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  193. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  194. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  195. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  196. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  197. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  198. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  199. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  200. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  201. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  202. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  203. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  204. data/spec/model/coverage/assets/0.3.9/stylesheet.css +0 -341
  205. data/spec/model/coverage/index.html +0 -8637
  206. data/spec/model/coverage/resultset.yml +0 -642
  207. data/spec/pager_spec.rb +0 -7
  208. data/spec/peachy_spec_helper_patch.rb +0 -7
  209. data/spec/proxy_police_spec.rb +0 -70
  210. data/spec/sevendigital_spec.rb +0 -51
  211. data/spec/sevendigital_spec.yml +0 -5
@@ -6,17 +6,18 @@ module Sevendigital
6
6
  def default_element_name; :card end
7
7
  def default_list_element_name; :cards end
8
8
 
9
- def from_proxy(card_proxy)
10
- make_sure_not_eating_nil(card_proxy)
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
11
 
12
12
  card = Sevendigital::Card.new(@api_client)
13
- card.id = card_proxy.id.to_i
14
- card.type = card_proxy.type.value.to_s
15
- card.last_4_digits = card_proxy.last4digits.value.to_s
16
- card.card_holder_name = card_proxy.card_holder_name.value.to_s if value_present?(card_proxy.card_holder_name)
17
- card.expiry_date = card_proxy.expiry_date.value.to_s if value_present?(card_proxy.expiry_date)
18
13
 
19
- return card
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
20
21
  end
21
22
 
22
23
  end
@@ -4,16 +4,17 @@ module Sevendigital
4
4
  class UserDigestor < Digestor # :nodoc:
5
5
 
6
6
  def default_element_name; :user end
7
-
8
- def from_proxy(user_proxy)
9
- make_sure_not_eating_nil(user_proxy)
7
+
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
10
10
 
11
11
  user = User.new(@api_client)
12
- user.id = user_proxy.id.to_s if !user_proxy.nil?
13
- user.type = user_proxy.type.value.to_sym
14
- user.email_address = user_proxy.email_address.value.to_s if value_present?(user_proxy.email_address)
15
12
 
16
- return user
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
17
18
  end
18
19
 
19
20
  end
@@ -1,5 +1,3 @@
1
- require "peachy"
2
-
3
1
  module Sevendigital
4
2
 
5
3
  # provides access to Artist related API methods (artist/*)
@@ -12,7 +10,7 @@ module Sevendigital
12
10
  # @return [Artist]
13
11
  def get_details(artist_id, options={})
14
12
  api_response = @api_client.make_api_request(:GET, "artist/details", {:artistId => artist_id}, options)
15
- @api_client.artist_digestor.from_xml(api_response.content.artist)
13
+ @api_client.artist_digestor.from_xml_doc(api_response.item_xml("artist"))
16
14
  end
17
15
 
18
16
  # calls *artist/releases* API method and returns Release array
@@ -22,7 +20,7 @@ module Sevendigital
22
20
  # @return [[Artist]]
23
21
  def get_releases(artist_id, options={})
24
22
  api_response = @api_client.make_api_request(:GET, "artist/releases", {:artistId => artist_id}, options)
25
- @api_client.release_digestor.list_from_xml(api_response.content.releases)
23
+ @api_client.release_digestor.list_from_xml_doc(api_response.item_xml("releases"))
26
24
  end
27
25
 
28
26
  # calls *artist/toptracks* API method and returns Track array
@@ -32,7 +30,7 @@ module Sevendigital
32
30
  # @return [Array<Track>]
33
31
  def get_top_tracks(artist_id, options={})
34
32
  api_response = @api_client.make_api_request(:GET, "artist/topTracks", {:artistId => artist_id}, options)
35
- @api_client.track_digestor.list_from_xml(api_response.content.tracks)
33
+ @api_client.track_digestor.list_from_xml_doc(api_response.item_xml("tracks"))
36
34
  end
37
35
 
38
36
  # calls *artist/similar* API method and returns Artist array
@@ -42,7 +40,7 @@ module Sevendigital
42
40
  # @return [Array<Artist>]
43
41
  def get_similar(artist_id, options={})
44
42
  api_response = @api_client.make_api_request(:GET, "artist/similar", {:artistId => artist_id}, options)
45
- @api_client.artist_digestor.list_from_xml(api_response.content.artists)
43
+ @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
46
44
  end
47
45
 
48
46
  # calls *artist/byTag/top* API method and returns Artist array
@@ -52,7 +50,7 @@ module Sevendigital
52
50
  # @return [Array<Artist>]
53
51
  def get_top_by_tag(tags, options={})
54
52
  api_response = @api_client.make_api_request(:GET, "artist/byTag/top", {:tags => tags}, options)
55
- @api_client.artist_digestor.nested_list_from_xml(api_response.content.tagged_results, :tagged_item, :tagged_results)
53
+ @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("taggedResults"), :taggedItem, :artist)
56
54
  end
57
55
 
58
56
  # calls *artist/search* API method and returns Artist array
@@ -62,7 +60,7 @@ module Sevendigital
62
60
  # @return [Array<Artist>]
63
61
  def search(query, options={})
64
62
  api_response = @api_client.make_api_request(:GET, "artist/search", {:q => query}, options)
65
- @api_client.artist_digestor.nested_list_from_xml(api_response.content.search_results, :search_result, :search_results)
63
+ @api_client.artist_digestor.nested_list_from_xml_doc(api_response.item_xml("searchResults"), :searchResult, :artist)
66
64
  end
67
65
 
68
66
  # calls *artist/browse* API method and returns Artist array
@@ -72,7 +70,7 @@ module Sevendigital
72
70
  # @return [Array<Artist>]
73
71
  def browse(letter, options={})
74
72
  api_response = @api_client.make_api_request(:GET, "artist/browse", {:letter => letter}, options)
75
- @api_client.artist_digestor.list_from_xml(api_response.content.artists)
73
+ @api_client.artist_digestor.list_from_xml_doc(api_response.item_xml("artists"))
76
74
  end
77
75
 
78
76
  # calls *artist/chart* API method and returns Artist array
@@ -80,7 +78,7 @@ module Sevendigital
80
78
  # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
81
79
  def get_chart(options={})
82
80
  api_response = @api_client.make_api_request(:GET, "artist/chart", {}, options)
83
- @api_client.chart_item_digestor.list_from_xml(api_response.content.chart)
81
+ @api_client.chart_item_digestor.list_from_xml_doc(api_response.item_xml("chart"))
84
82
  end
85
83
 
86
84
  # calls *artist/tags* API method and returns Tag array
@@ -90,7 +88,7 @@ module Sevendigital
90
88
  # @return [Array<Tag>]
91
89
  def get_tags(artist_id, options={})
92
90
  api_response = @api_client.make_api_request(:GET, "artist/tags", {:artistId => artist_id}, options)
93
- @api_client.tag_digestor.list_from_xml(api_response.content.tags)
91
+ @api_client.tag_digestor.list_from_xml_doc(api_response.item_xml("tags"))
94
92
  end
95
93
 
96
94
 
@@ -4,23 +4,23 @@ module Sevendigital
4
4
 
5
5
  def get(basket_id, options={})
6
6
  api_response = @api_client.make_api_request(:GET, "basket", {:basketId => basket_id}, options)
7
- @api_client.basket_digestor.from_xml(api_response.content.basket)
7
+ @api_client.basket_digestor.from_xml_doc(api_response.item_xml("basket"))
8
8
  end
9
9
 
10
10
  def create(options={})
11
11
  api_response = @api_client.make_api_request(:GET, "basket/create", {}, options)
12
- @api_client.basket_digestor.from_xml(api_response.content.basket)
12
+ @api_client.basket_digestor.from_xml_doc(api_response.item_xml("basket"))
13
13
  end
14
14
 
15
15
  def add_item(basket_id, release_id, track_id=nil, options={})
16
16
  api_response = @api_client.make_api_request(:GET, "basket/addItem", {:basketId => basket_id, :releaseId => release_id, :trackId => track_id}, options)
17
- @api_client.basket_digestor.from_xml(api_response.content.basket)
17
+ @api_client.basket_digestor.from_xml_doc(api_response.item_xml("basket"))
18
18
  end
19
19
 
20
20
 
21
21
  def remove_item(basket_id, item_id, options={})
22
22
  api_response = @api_client.make_api_request(:GET, "basket/removeItem", {:basketId => basket_id, :itemId => item_id}, options)
23
- @api_client.basket_digestor.from_xml(api_response.content.basket)
23
+ @api_client.basket_digestor.from_xml_doc(api_response.item_xml("basket"))
24
24
  end
25
25
 
26
26
 
@@ -0,0 +1,11 @@
1
+ module Sevendigital
2
+
3
+ class CountryManager < Manager
4
+
5
+ def resolve(ip_address, options={})
6
+ api_response = @api_client.make_api_request(:GET, "country/resolve", {:ipaddress=>ip_address}, options)
7
+ @api_client.country_digestor.from_xml_doc(api_response.item_xml("GeoIpLookup"))
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Sevendigital
2
+
3
+ # provides access to Artist related API methods (artist/*)
4
+ class ListManager < Manager
5
+
6
+ # calls *editorial/list* API method and returns Artist with populated details
7
+ #
8
+ # @param [String] key
9
+ # @param [Hash] options optional hash of additional API parameters, e.g. page_size => 50, etc
10
+ # @return [List]
11
+ def get_editorial_list(key, options={})
12
+ api_response = @api_client.make_api_request(:GET, "editorial/list", {:key => key}, options)
13
+ @api_client.list_digestor.from_xml_doc(api_response.item_xml("list"))
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -4,12 +4,12 @@ module Sevendigital
4
4
 
5
5
  def get_request_token
6
6
  api_response = @api_client.make_signed_api_request(:GET, "oauth/requestToken", {})
7
- @api_client.oauth_request_token_digestor.from_xml(api_response.content.oauth_request_token, :oauth_request_token)
7
+ @api_client.oauth_request_token_digestor.from_xml_doc(api_response.item_xml("oauth_request_token"))
8
8
  end
9
9
 
10
10
  def get_access_token(request_token)
11
11
  api_response = @api_client.make_signed_api_request(:GET, "oauth/accessToken", {}, {}, request_token)
12
- @api_client.oauth_access_token_digestor.from_xml(api_response.content.oauth_access_token, :oauth_access_token)
12
+ @api_client.oauth_access_token_digestor.from_xml_doc(api_response.item_xml("oauth_access_token"))
13
13
  end
14
14
 
15
15
  def authorise_request_token(username, password, request_token)
@@ -1,23 +1,21 @@
1
- require "peachy"
2
-
3
1
  module Sevendigital
4
2
 
5
3
  class ReleaseManager < Manager
6
4
 
7
5
  def get_details(release_id, options = {})
8
6
  api_response = @api_client.make_api_request(:GET, "release/details", {:releaseId => release_id}, options)
9
- @api_client.release_digestor.from_xml(api_response.content.release)
7
+ @api_client.release_digestor.from_xml_doc(api_response.item_xml("release"))
10
8
  end
11
9
 
12
10
  def get_tracks(release_id, options = {})
13
11
  options[:page_size] ||= 100
14
12
  api_response = @api_client.make_api_request(:GET, "release/tracks", {:releaseId => release_id}, options)
15
- @api_client.track_digestor.list_from_xml(api_response.content.tracks)
13
+ @api_client.track_digestor.list_from_xml_doc(api_response.item_xml("tracks"))
16
14
  end
17
15
 
18
16
  def get_chart(options={})
19
17
  api_response = @api_client.make_api_request(:GET, "release/chart", {}, options)
20
- @api_client.chart_item_digestor.list_from_xml(api_response.content.chart)
18
+ @api_client.chart_item_digestor.list_from_xml_doc(api_response.item_xml("chart"))
21
19
  end
22
20
 
23
21
  def get_by_date(from_date = nil, to_date = nil, options = {})
@@ -26,30 +24,30 @@ module Sevendigital
26
24
  parameters[:toDate] = to_date.strftime("%Y%m%d") if to_date
27
25
 
28
26
  api_response = @api_client.make_api_request(:GET, "release/byDate", parameters, options)
29
- @api_client.release_digestor.list_from_xml(api_response.content.releases)
27
+ @api_client.release_digestor.list_from_xml_doc(api_response.item_xml("releases"))
30
28
  end
31
29
 
32
30
  def get_recommendations(release_id, options = {})
33
31
  api_response = @api_client.make_api_request(:GET, "release/recommend", {:releaseId => release_id}, options)
34
- @api_client.release_digestor.nested_list_from_xml(api_response.content.recommendations, :recommended_item, :recommendations)
32
+ @api_client.release_digestor.nested_list_from_xml_doc(api_response.item_xml("recommendations"), :recommendedItem, :release)
35
33
  end
36
34
 
37
35
 
38
36
  def get_top_by_tag(tags, options = {})
39
37
  api_response = @api_client.make_api_request(:GET, "release/byTag/top", {:tags => tags}, options)
40
- @api_client.release_digestor.nested_list_from_xml( \
41
- api_response.content.tagged_results, :tagged_item, :tagged_results )
38
+ @api_client.release_digestor.nested_list_from_xml_doc( \
39
+ api_response.item_xml("taggedResults"), :taggedItem, :release )
42
40
  end
43
41
 
44
42
  def search(query, options={})
45
43
  api_response = @api_client.make_api_request(:GET, "release/search", {:q => query}, options)
46
- @api_client.release_digestor.nested_list_from_xml(api_response.content.search_results, :search_result, :search_results)
44
+ @api_client.release_digestor.nested_list_from_xml_doc(api_response.item_xml("searchResults"), :searchResult, :release)
47
45
  end
48
46
 
49
47
 
50
48
  def get_tags(release_id, options = {})
51
49
  api_response = @api_client.make_api_request(:GET, "release/tags", {:releaseId => release_id}, options)
52
- @api_client.tag_digestor.list_from_xml(api_response.content.tags)
50
+ @api_client.tag_digestor.list_from_xml_doc(api_response.item_xml("tags"))
53
51
  end
54
52
 
55
53
  end
@@ -4,7 +4,7 @@ module Sevendigital
4
4
 
5
5
  def get_tag_list(options={})
6
6
  api_response = @api_client.make_api_request(:GET, "tag", {}, options)
7
- @api_client.tag_digestor.list_from_xml(api_response.content.tags)
7
+ @api_client.tag_digestor.list_from_xml_doc(api_response.item_xml("tags"))
8
8
  end
9
9
 
10
10
  end
@@ -1,10 +1,8 @@
1
1
  module Sevendigital
2
-
3
2
  class TrackManager < Manager
4
-
5
3
  def get_details(id, options={})
6
4
  api_response = @api_client.make_api_request(:GET, "track/details", {:trackId => id}, options)
7
- @api_client.track_digestor.from_xml(api_response.content.track)
5
+ @api_client.track_digestor.from_xml_doc(api_response.item_xml("track"))
8
6
  end
9
7
 
10
8
  def get_details_from_release(track_id, release_id, options={})
@@ -13,7 +11,7 @@ module Sevendigital
13
11
 
14
12
  def get_chart(options={})
15
13
  api_response = @api_client.make_api_request(:GET, "track/chart", {}, options)
16
- @api_client.chart_item_digestor.list_from_xml(api_response.content.chart)
14
+ @api_client.chart_item_digestor.list_from_xml_doc(api_response.item_xml("chart"))
17
15
  end
18
16
 
19
17
  def build_preview_url(id, options={})
@@ -23,7 +21,8 @@ module Sevendigital
23
21
 
24
22
  def search(query, options={})
25
23
  api_response = @api_client.make_api_request(:GET, "track/search", {:q => query}, options)
26
- @api_client.track_digestor.nested_list_from_xml(api_response.content.search_results, :search_result, :search_results)
24
+ @api_client.track_digestor.nested_list_from_xml_doc(api_response.item_xml("searchResults"), :searchResult, :track)
27
25
  end
26
+
28
27
  end
29
28
  end
@@ -4,7 +4,7 @@ module Sevendigital
4
4
 
5
5
  def get_card_list(token, options={})
6
6
  api_response = @api_client.make_signed_api_request(:GET, "user/payment/card", {}, options, token)
7
- @api_client.user_card_digestor.list_from_xml(api_response.content.cards)
7
+ @api_client.user_card_digestor.list_from_xml_doc(api_response.item_xml("cards"))
8
8
  end
9
9
 
10
10
  def add_card(card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
@@ -14,7 +14,7 @@ module Sevendigital
14
14
  :cardStartDate => card_start_date, :cardExpiryDate => card_expiry_date, :cardIssueNumber => card_issue_number,
15
15
  :cardVerificationCode => card_verification_code, :cardPostCode => card_post_code, :cardCountry => card_country
16
16
  }, options, token)
17
- @api_client.user_card_digestor.from_xml(api_response.content.card)
17
+ @api_client.user_card_digestor.from_xml_doc(api_response.item_xml("card"))
18
18
  end
19
19
 
20
20
  def select_card(card_id, token, options={})
@@ -2,6 +2,11 @@ module Sevendigital
2
2
 
3
3
  class UserManager < Manager
4
4
 
5
+ def get_details(token, options={})
6
+ api_response = @api_client.make_signed_api_request(:GET, "user/details", {}, options, token)
7
+ @locker = @api_client.user_digestor.from_xml_doc(api_response.item_xml("user"))
8
+ end
9
+
5
10
  def login(access_token)
6
11
  raise Sevendigital::SevendigitalError if !access_token.kind_of? OAuth::AccessToken
7
12
  user = Sevendigital::User.new(@api_client)
@@ -20,14 +25,14 @@ module Sevendigital
20
25
  def sign_up(email, password, options={})
21
26
  api_response = @api_client.make_signed_api_request(:POST, "user/signUp", \
22
27
  {:emailAddress => email, :password=> password}, options)
23
- user = @api_client.user_digestor.from_xml(api_response.content.user)
28
+ user = @api_client.user_digestor.from_xml_doc(api_response.item_xml("user"))
24
29
  user.oauth_access_token = authenticate(email, password).oauth_access_token
25
30
  user
26
31
  end
27
32
 
28
33
  def get_locker(token, options={})
29
34
  api_response = @api_client.make_signed_api_request(:GET, "user/locker", {}, options, token)
30
- @locker = @api_client.locker_digestor.from_xml(api_response.content.locker)
35
+ @locker = @api_client.locker_digestor.from_xml_doc(api_response.item_xml("locker"))
31
36
  end
32
37
 
33
38
  # <b>DEPRECATED:</b> Please use <tt>purchase_item</tt> instead.
@@ -39,13 +44,13 @@ module Sevendigital
39
44
  def purchase_item(release_id, track_id, price, token, options={})
40
45
  api_response = @api_client.make_signed_api_request(:GET, "user/purchase/item", \
41
46
  {:releaseId => release_id, :trackId => track_id, :price => price}, options, token)
42
- @api_client.locker_digestor.from_xml(api_response.content.purchase)
47
+ @api_client.locker_digestor.from_xml_doc(api_response.item_xml("purchase"))
43
48
  end
44
49
 
45
50
  def purchase_basket(basket_id, token, options={})
46
51
  api_response = @api_client.make_signed_api_request(:GET, "user/purchase/basket", \
47
52
  {:basketId => basket_id}, options, token)
48
- @api_client.locker_digestor.from_xml(api_response.content.purchase)
53
+ @api_client.locker_digestor.from_xml_doc(api_response.item_xml("purchase"))
49
54
  end
50
55
 
51
56
  def get_stream_track_url(release_id, track_id, token, options={})
@@ -7,17 +7,25 @@ module Sevendigital
7
7
 
8
8
  #True if no API error has been returned
9
9
  def ok?
10
- return (@error_code == 0 && !@content.nil?)
10
+ (@error_code == 0 && !@content.nil?)
11
+ end
12
+
13
+ def content_xml
14
+ puts @content
15
+ @content_xml ||= Nokogiri::XML(@content)
16
+ end
17
+
18
+ def item_xml(element_name)
19
+ content_xml.at_xpath("./response/#{element_name}")
11
20
  end
12
21
 
13
22
  def _dump(depth)
14
- Marshal.dump([@error_code, @error_message, @headers, @content.to_s])
23
+ Marshal.dump([@error_code, @error_message, @headers, @content])
15
24
  end
16
25
 
17
26
  def self._load(properties)
18
27
  response = ApiResponse.new
19
- response.error_code, response.error_message, response.headers, content_xml = Marshal.load(properties)
20
- response.content = Peachy::Proxy.new(content_xml).response
28
+ response.error_code, response.error_message, response.headers, response.content = Marshal.load(properties)
21
29
  response
22
30
  end
23
31
 
@@ -32,6 +32,10 @@ class Artist < SevendigitalObject
32
32
  #@return [String]
33
33
  sevendigital_basic_property :url
34
34
 
35
+ #popularity of the artist (lazy loaded using #get_tags)
36
+ #@return [decimal] similar
37
+ sevendigital_basic_property :popularity
38
+
35
39
  #artist's releases (lazy loaded using get_releases)
36
40
  #@return [Array<Release>]
37
41
  sevendigital_extended_property :releases
@@ -53,6 +57,7 @@ class Artist < SevendigitalObject
53
57
  def get_details(options={})
54
58
  artist_with_details = @api_client.artist.get_details(@id, options)
55
59
  copy_basic_properties_from(artist_with_details)
60
+ artist_with_details
56
61
  end
57
62
 
58
63
  #releases by this artist retrieved by calling *artist/releases* API method
@@ -0,0 +1,5 @@
1
+ module Sevendigital
2
+ class List < SevendigitalObject
3
+ attr_accessor :id, :key, :list_items
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module Sevendigital
2
+
3
+ class ListItem < SevendigitalObject
4
+
5
+ attr_accessor :id, :type, :release
6
+
7
+ end
8
+
9
+ end