7digital 0.0.5 → 0.0.6

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 (271) hide show
  1. data/README.rdoc +136 -136
  2. data/lib/sevendigital.rb +53 -53
  3. data/lib/sevendigital/api_operator.rb +130 -124
  4. data/lib/sevendigital/api_operator_cached.rb +41 -29
  5. data/lib/sevendigital/api_request.rb +65 -64
  6. data/lib/sevendigital/client.rb +113 -98
  7. data/lib/sevendigital/client_configuration.rb +86 -86
  8. data/lib/sevendigital/client_digestors.rb +107 -79
  9. data/lib/sevendigital/client_managers.rb +47 -34
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +58 -57
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +32 -31
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -18
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -25
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +28 -27
  15. data/lib/sevendigital/digestion_tract/digestor.rb +71 -70
  16. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +20 -19
  17. data/lib/sevendigital/digestion_tract/format_digestor.rb +22 -21
  18. data/lib/sevendigital/digestion_tract/label_digestor.rb +20 -19
  19. data/lib/sevendigital/digestion_tract/locker_digestor.rb +18 -17
  20. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +20 -19
  21. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +22 -21
  22. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +14 -13
  23. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +14 -13
  24. data/lib/sevendigital/digestion_tract/pager_digestor.rb +24 -23
  25. data/lib/sevendigital/digestion_tract/price_digestor.rb +25 -24
  26. data/lib/sevendigital/digestion_tract/release_digestor.rb +53 -52
  27. data/lib/sevendigital/digestion_tract/tag_digestor.rb +22 -21
  28. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  29. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -0
  30. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -0
  31. data/lib/sevendigital/management/artist_manager.rb +99 -82
  32. data/lib/sevendigital/management/basket_manager.rb +29 -29
  33. data/lib/sevendigital/management/manager.rb +12 -11
  34. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  35. data/lib/sevendigital/management/release_manager.rb +56 -50
  36. data/lib/sevendigital/management/tag_manager.rb +10 -10
  37. data/lib/sevendigital/management/track_manager.rb +28 -28
  38. data/lib/sevendigital/management/user_card_manager.rb +27 -0
  39. data/lib/sevendigital/management/user_manager.rb +71 -51
  40. data/lib/sevendigital/model/api_response.rb +25 -40
  41. data/lib/sevendigital/model/artist.rb +94 -64
  42. data/lib/sevendigital/model/basket.rb +15 -15
  43. data/lib/sevendigital/model/basket_item.rb +14 -14
  44. data/lib/sevendigital/model/card.rb +12 -0
  45. data/lib/sevendigital/model/chart_item.rb +9 -9
  46. data/lib/sevendigital/model/download_url.rb +7 -7
  47. data/lib/sevendigital/model/format.rb +7 -7
  48. data/lib/sevendigital/model/label.rb +7 -7
  49. data/lib/sevendigital/model/locker.rb +4 -4
  50. data/lib/sevendigital/model/locker_release.rb +9 -9
  51. data/lib/sevendigital/model/locker_track.rb +9 -9
  52. data/lib/sevendigital/model/price.rb +9 -9
  53. data/lib/sevendigital/model/release.rb +52 -47
  54. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  55. data/lib/sevendigital/model/sevendigital_object.rb +57 -56
  56. data/lib/sevendigital/model/tag.rb +7 -7
  57. data/lib/sevendigital/model/track.rb +83 -28
  58. data/lib/sevendigital/model/user.rb +63 -33
  59. data/lib/sevendigital/pager.rb +23 -22
  60. data/lib/sevendigital/peachy_patchy.rb +9 -0
  61. data/lib/sevendigital/proxy_police.rb +27 -27
  62. data/lib/sevendigital/version.rb +5 -5
  63. data/spec/api_operator_cached_spec.rb +178 -102
  64. data/spec/api_operator_spec.rb +336 -338
  65. data/spec/api_request_spec.rb +31 -31
  66. data/spec/client_configuration_spec.rb +74 -74
  67. data/spec/client_spec.rb +162 -153
  68. data/spec/data/config/sevendigital.yml +5 -5
  69. data/spec/data/configuration_env_override.yml +5 -5
  70. data/spec/data/configuration_override.yml +1 -1
  71. data/spec/digestion_tract/api_response_digestor_spec.rb +92 -92
  72. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  73. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  74. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  75. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  76. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  77. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  78. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  79. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  80. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -71
  81. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  82. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  83. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  84. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  85. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  86. data/spec/digestion_tract/release_digestor_spec.rb +101 -101
  87. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  88. data/spec/digestion_tract/track_digestor_spec.rb +104 -104
  89. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -0
  90. data/spec/digestion_tract/user_digestor_spec.rb +44 -0
  91. data/spec/management/artist_manager_spec.rb +151 -133
  92. data/spec/management/basket_manager_spec.rb +77 -77
  93. data/spec/management/oauth_manager_spec.rb +72 -72
  94. data/spec/management/release_manager_spec.rb +200 -181
  95. data/spec/management/tag_manager_spec.rb +34 -34
  96. data/spec/management/track_manager_spec.rb +107 -105
  97. data/spec/management/user_card_manager_spec.rb +79 -0
  98. data/spec/management/user_manager_spec.rb +202 -162
  99. data/spec/model/api_response_spec.rb +48 -111
  100. data/spec/model/artist_spec.rb +154 -141
  101. data/spec/model/basket_spec.rb +62 -62
  102. data/spec/model/release_spec.rb +122 -110
  103. data/spec/model/sevendigital_object_spec.rb +73 -73
  104. data/spec/model/track_spec.rb +144 -143
  105. data/spec/model/user_spec.rb +160 -97
  106. data/spec/pager_spec.rb +7 -7
  107. data/spec/peachy_spec_helper_patch.rb +6 -6
  108. data/spec/proxy_police_spec.rb +69 -47
  109. data/spec/sevendigital_spec.rb +70 -0
  110. data/spec/sevendigital_spec.yml +5 -0
  111. data/spec/spec_helper.rb +64 -60
  112. data/spec/test-xml/methods/artist/browse.xml +21 -21
  113. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  114. data/spec/test-xml/methods/artist/chart.xml +30 -30
  115. data/spec/test-xml/methods/artist/details.xml +9 -9
  116. data/spec/test-xml/methods/artist/releases.xml +544 -544
  117. data/spec/test-xml/methods/artist/search.xml +18 -18
  118. data/spec/test-xml/methods/artist/similar.xml +39 -39
  119. data/spec/test-xml/methods/artist/tags.xml +12 -0
  120. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  121. data/spec/test-xml/methods/basket/additem.xml +23 -23
  122. data/spec/test-xml/methods/basket/create.xml +10 -10
  123. data/spec/test-xml/methods/basket/index.xml +23 -23
  124. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  125. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  126. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  127. data/spec/test-xml/methods/release/bydate.xml +173 -173
  128. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  129. data/spec/test-xml/methods/release/chart.xml +181 -181
  130. data/spec/test-xml/methods/release/details.xml +48 -48
  131. data/spec/test-xml/methods/release/recommend.xml +89 -89
  132. data/spec/test-xml/methods/release/search.xml +194 -194
  133. data/spec/test-xml/methods/release/tags.xml +27 -0
  134. data/spec/test-xml/methods/release/tracks.xml +28 -28
  135. data/spec/test-xml/methods/tag/index.xml +16 -16
  136. data/spec/test-xml/methods/track/chart.xml +149 -149
  137. data/spec/test-xml/methods/track/details.xml +30 -30
  138. data/spec/test-xml/methods/track/search.xml +159 -159
  139. data/spec/test-xml/methods/user/locker.xml +49 -49
  140. data/spec/test-xml/methods/user/payment/card/add.xml +8 -0
  141. data/spec/test-xml/methods/user/payment/card/index.xml +8 -0
  142. data/spec/test-xml/methods/user/payment/card/select.xml +1 -0
  143. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  144. data/spec/test-xml/methods/user/signUp.xml +6 -0
  145. data/spec/test-xml/objects/artist.xml +6 -6
  146. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  147. data/spec/test-xml/objects/artist_list.xml +22 -22
  148. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  149. data/spec/test-xml/objects/basket.xml +21 -21
  150. data/spec/test-xml/objects/basket_item.xml +11 -11
  151. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  152. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  153. data/spec/test-xml/objects/download_url.xml +7 -7
  154. data/spec/test-xml/objects/locker.xml +47 -47
  155. data/spec/test-xml/objects/locker_release.xml +40 -40
  156. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  157. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  158. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  159. data/spec/test-xml/objects/locker_track.xml +25 -25
  160. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  161. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  162. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  163. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  164. data/spec/test-xml/objects/price.xml +7 -7
  165. data/spec/test-xml/objects/release.xml +40 -40
  166. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  167. data/spec/test-xml/objects/release_list.xml +18 -18
  168. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  169. data/spec/test-xml/objects/response.xml +38 -38
  170. data/spec/test-xml/objects/tag.xml +4 -4
  171. data/spec/test-xml/objects/track.xml +33 -33
  172. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  173. data/spec/test-xml/objects/user.xml +4 -0
  174. data/spec/test-xml/objects/user_payment_card.xml +6 -0
  175. data/spec/test-xml/objects/user_payment_card_list_empty.xml +1 -0
  176. metadata +51 -192
  177. data/lib/sevendigital/default_configuration.yml +0 -2
  178. data/spec/coverage/assets/0.3.9/app.js +0 -66
  179. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  180. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  181. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  182. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  183. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  184. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  185. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  186. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  187. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  188. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  189. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  190. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  191. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  192. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  193. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  194. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  195. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  196. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  197. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  198. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  199. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  200. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  201. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  202. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  203. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  204. data/spec/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  205. data/spec/coverage/assets/0.3.9/jquery.url.js +0 -174
  206. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  207. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  208. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  209. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  210. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  211. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  212. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  213. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  214. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  215. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  216. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  217. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  218. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  219. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  220. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  221. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  222. data/spec/coverage/assets/0.3.9/stylesheet.css +0 -341
  223. data/spec/coverage/index.html +0 -43412
  224. data/spec/coverage/resultset.yml +0 -3251
  225. data/spec/model/coverage/assets/0.3.9/app.js +0 -66
  226. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  227. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  228. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  229. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  230. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  231. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  232. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  233. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  234. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  235. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  236. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  237. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  238. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  239. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  240. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  241. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  242. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  243. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  244. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  245. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  246. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
  247. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  248. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  249. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
  250. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
  251. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +0 -141
  252. data/spec/model/coverage/assets/0.3.9/jquery.url.js +0 -174
  253. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  254. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  255. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  256. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  257. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  258. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  259. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  260. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  261. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  262. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  263. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  264. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  265. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  266. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  267. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  268. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  269. data/spec/model/coverage/assets/0.3.9/stylesheet.css +0 -341
  270. data/spec/model/coverage/index.html +0 -8637
  271. data/spec/model/coverage/resultset.yml +0 -642
@@ -1,11 +1,11 @@
1
- module Sevendigital
2
-
3
- class TagManager < Manager
4
-
5
- def get_tag_list(options={})
6
- api_response = @api_client.make_api_request("tag", {}, options)
7
- @api_client.tag_digestor.list_from_xml(api_response.content.tags)
8
- end
9
-
10
- end
1
+ module Sevendigital
2
+
3
+ class TagManager < Manager
4
+
5
+ def get_tag_list(options={})
6
+ api_response = @api_client.make_api_request(:GET, "tag", {}, options)
7
+ @api_client.tag_digestor.list_from_xml(api_response.content.tags)
8
+ end
9
+
10
+ end
11
11
  end
@@ -1,29 +1,29 @@
1
- module Sevendigital
2
-
3
- class TrackManager < Manager
4
-
5
- def get_details(id, options={})
6
- api_response = @api_client.make_api_request("track/details", {:trackId => id}, options)
7
- @api_client.track_digestor.from_xml(api_response.content.track)
8
- end
9
-
10
- def get_details_from_release(track_id, release_id, options={})
11
- @api_client.release.get_tracks(release_id, options).find {|track| track.id = track_id}
12
- end
13
-
14
- def get_chart(options={})
15
- api_response = @api_client.make_api_request("track/chart", {}, options)
16
- @api_client.chart_item_digestor.list_from_xml(api_response.content.chart)
17
- end
18
-
19
- def build_preview_url(id, options={})
20
- api_request = @api_client.create_api_request("track/preview", {:trackId => id}, options)
21
- @api_client.operator.create_request_uri(api_request)
22
- end
23
-
24
- def search(query, options={})
25
- api_response = @api_client.make_api_request("track/search", {:q => query}, options)
26
- @api_client.track_digestor.nested_list_from_xml(api_response.content.search_results, :search_result, :search_results)
27
- end
28
- end
1
+ module Sevendigital
2
+
3
+ class TrackManager < Manager
4
+
5
+ def get_details(id, options={})
6
+ api_response = @api_client.make_api_request(:GET, "track/details", {:trackId => id}, options)
7
+ @api_client.track_digestor.from_xml(api_response.content.track)
8
+ end
9
+
10
+ def get_details_from_release(track_id, release_id, options={})
11
+ @api_client.release.get_tracks(release_id, options).find {|track| track.id == track_id}
12
+ end
13
+
14
+ def get_chart(options={})
15
+ api_response = @api_client.make_api_request(:GET, "track/chart", {}, options)
16
+ @api_client.chart_item_digestor.list_from_xml(api_response.content.chart)
17
+ end
18
+
19
+ def build_preview_url(id, options={})
20
+ api_request = @api_client.create_api_request(:GET, "track/preview", {:trackId => id}, options)
21
+ @api_client.operator.get_request_uri(api_request)
22
+ end
23
+
24
+ def search(query, options={})
25
+ 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)
27
+ end
28
+ end
29
29
  end
@@ -0,0 +1,27 @@
1
+ module Sevendigital
2
+
3
+ class UserCardManager < Manager
4
+
5
+ def get_card_list(token, options={})
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)
8
+ end
9
+
10
+ def add_card(card_number, card_type, card_holder_name, card_start_date, card_expiry_date, card_issue_number,
11
+ card_verification_code, card_post_code, card_country, token, options={})
12
+ api_response = @api_client.make_signed_api_request(:POST, "user/payment/card/add", {
13
+ :cardNumber => card_number, :cardType => card_type, :cardHolderName => card_holder_name,
14
+ :cardStartDate => card_start_date, :cardExpiryDate => card_expiry_date, :cardIssueNumber => card_issue_number,
15
+ :cardVerificationCode => card_verification_code, :cardPostCode => card_post_code, :cardCountry => card_country
16
+ }, options, token)
17
+ @api_client.user_card_digestor.from_xml(api_response.content.card)
18
+ end
19
+
20
+ def select_card(card_id, token, options={})
21
+ api_response = @api_client.make_signed_api_request(
22
+ :POST, "user/payment/card/select", {:cardId => card_id}, options, token)
23
+ api_response.ok?
24
+ end
25
+
26
+ end
27
+ end
@@ -1,51 +1,71 @@
1
- module Sevendigital
2
-
3
- class UserManager < Manager
4
-
5
- def login(access_token)
6
- raise Sevendigital::SevendigitalError if !access_token.kind_of? OAuth::AccessToken
7
- user = Sevendigital::User.new(@api_client)
8
- user.oauth_access_token = access_token
9
- user
10
- end
11
-
12
- def authenticate(email, password)
13
- request_token = @api_client.oauth.get_request_token
14
- return nil unless @api_client.oauth.authorise_request_token(email, password, request_token)
15
- user = Sevendigital::User.new(@api_client)
16
- user.oauth_access_token = @api_client.oauth.get_access_token(request_token)
17
- user
18
- end
19
-
20
- def get_locker(token, options={})
21
- api_response = @api_client.make_signed_api_request("user/locker", {}, {}, token)
22
- @locker = @api_client.locker_digestor.from_xml(api_response.content.locker)
23
- end
24
-
25
- def purchase(release_id, track_id, price, token, options={})
26
- api_response = @api_client.make_signed_api_request("user/purchase/item", \
27
- {:releaseId => release_id, :trackId => track_id, :price => price}, options, token)
28
- @api_client.locker_digestor.from_xml(api_response.content.purchase)
29
- end
30
-
31
- def get_stream_track_url(release_id, track_id, token, options={})
32
- api_request = @api_client.create_api_request("user/streamtrack", {:releaseId => release_id, :trackId => track_id}, options)
33
- api_request.api_service = :media
34
- api_request.require_signature
35
- api_request.token = token
36
- @api_client.operator.get_request_uri(api_request)
37
- end
38
-
39
- def get_add_card_url(return_url, token, options={})
40
- api_request = @api_client.create_api_request("payment/addcard", {:returnUrl => return_url}, options)
41
- api_request.api_service = :account
42
- api_request.require_signature
43
- api_request.require_secure_connection
44
- api_request.token = token
45
- @api_client.operator.get_request_uri(api_request)
46
- end
47
-
48
-
49
- end
50
-
51
- end
1
+ module Sevendigital
2
+
3
+ class UserManager < Manager
4
+
5
+ def login(access_token)
6
+ raise Sevendigital::SevendigitalError if !access_token.kind_of? OAuth::AccessToken
7
+ user = Sevendigital::User.new(@api_client)
8
+ user.oauth_access_token = access_token
9
+ user
10
+ end
11
+
12
+ def authenticate(email, password)
13
+ request_token = @api_client.oauth.get_request_token
14
+ return nil unless @api_client.oauth.authorise_request_token(email, password, request_token)
15
+ user = Sevendigital::User.new(@api_client)
16
+ user.oauth_access_token = @api_client.oauth.get_access_token(request_token)
17
+ user
18
+ end
19
+
20
+ def sign_up(email, password, options={})
21
+ api_response = @api_client.make_signed_api_request(:POST, "user/signUp", \
22
+ {:emailAddress => email, :password=> password}, options)
23
+ user = @api_client.user_digestor.from_xml(api_response.content.user)
24
+ user.oauth_access_token = authenticate(email, password).oauth_access_token
25
+ user
26
+ end
27
+
28
+ def get_locker(token, options={})
29
+ 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)
31
+ end
32
+
33
+ # <b>DEPRECATED:</b> Please use <tt>purchase_item</tt> instead.
34
+ def purchase(release_id, track_id, price, token, options={})
35
+ warn "[DEPRECATION] 'purchase' is deprecated. Please use 'purchase_item' instead."
36
+ purchase_item(release_id, track_id, price, token, options)
37
+ end
38
+
39
+ def purchase_item(release_id, track_id, price, token, options={})
40
+ api_response = @api_client.make_signed_api_request(:GET, "user/purchase/item", \
41
+ {:releaseId => release_id, :trackId => track_id, :price => price}, options, token)
42
+ @api_client.locker_digestor.from_xml(api_response.content.purchase)
43
+ end
44
+
45
+ def purchase_basket(basket_id, token, options={})
46
+ api_response = @api_client.make_signed_api_request(:GET, "user/purchase/basket", \
47
+ {:basketId => basket_id}, options, token)
48
+ @api_client.locker_digestor.from_xml(api_response.content.purchase)
49
+ end
50
+
51
+ def get_stream_track_url(release_id, track_id, token, options={})
52
+ api_request = @api_client.create_api_request(:GET, "user/streamtrack", {:releaseId => release_id, :trackId => track_id}, options)
53
+ api_request.api_service = :media
54
+ api_request.require_signature
55
+ api_request.token = token
56
+ @api_client.operator.get_request_uri(api_request)
57
+ end
58
+
59
+ def get_add_card_url(return_url, token, options={})
60
+ api_request = @api_client.create_api_request(:GET, "payment/addcard", {:returnUrl => return_url}, options)
61
+ api_request.api_service = :account
62
+ api_request.require_signature
63
+ api_request.require_secure_connection
64
+ api_request.token = token
65
+ @api_client.operator.get_request_uri(api_request)
66
+ end
67
+
68
+
69
+ end
70
+
71
+ end
@@ -1,41 +1,26 @@
1
- module Sevendigital
2
-
3
- #Holds the complete API response
4
- class ApiResponse
5
-
6
- attr_accessor :error_code, :error_message, :content, :headers
7
-
8
- #True if no API error has been returned
9
- def ok?
10
- return (@error_code == 0 && !@content.nil?)
11
- end
12
-
13
- def _dump(depth)
14
- Marshal.dump([@error_code, @error_message, @headers, @content.to_s])
15
- end
16
-
17
- def self._load(properties)
18
- 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
21
- response
22
- end
23
-
24
- #Returns true if the response has been retrieved from cache but has since expired
25
- def out_of_date?(current_time=nil)
26
- return true if @headers.nil? || @headers["Date"].nil? || @headers["cache-control"].nil?
27
- return true if !(@headers["cache-control"] =~ /max-age=([0-9]+)/)
28
- current_time ||= Time.now.utc
29
- response_time = Time.parse(@headers["Date"])
30
- max_age = /max-age=([0-9]+)/.match(@headers["cache-control"])[1].to_i
31
- response_time + max_age < current_time
32
- end
33
-
34
-
35
- def response_cacheable?
36
- return true
37
- end
38
-
39
- end
40
-
1
+ module Sevendigital
2
+
3
+ #Holds the complete API response
4
+ class ApiResponse
5
+
6
+ attr_accessor :error_code, :error_message, :content, :headers
7
+
8
+ #True if no API error has been returned
9
+ def ok?
10
+ return (@error_code == 0 && !@content.nil?)
11
+ end
12
+
13
+ def _dump(depth)
14
+ Marshal.dump([@error_code, @error_message, @headers, @content.to_s])
15
+ end
16
+
17
+ def self._load(properties)
18
+ 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
21
+ response
22
+ end
23
+
24
+ end
25
+
41
26
  end
@@ -1,65 +1,95 @@
1
- module Sevendigital
2
-
3
- #==Basic properties
4
- #<tt>*id*</tt>:: \Artist ID
5
- #<tt>*name*</tt>:: \Artist\'s name
6
- #<tt>*appears_as*</tt>:: \Artist\'s name as it appears on the release or track (only available when artist is linked from release or track)
7
- #
8
- #==Optional properties
9
- #with lazy loading enabled these will be automatically populated by calling get_details
10
- #<tt>*sort_name*</tt>:: \Artist name used for sorting, e.g. Beatles, The
11
- #<tt>*image*</tt>:: \Artist image URL
12
- #<tt>*url*</tt>:: \Artist buy link URL
13
- #
14
- #==Extended properties
15
- #with lazy loading enabled these will be automatically populated by calling the method in brackets
16
- #<tt>*releases*</tt>:: array of artist\'s releases (retrieved using get_releases)
17
- #<tt>*top_tracks*</tt>:: array of artist\'s top tracks (get_top_tracks)
18
- #<tt>*similar*</tt>:: array of artists similar to this artist (get_similar)
19
- #additional options can be passed in when accessing lazy loaded properties, e.g.
20
- # artist.releases({:page_size => 5, :image_size =>250})
21
-
22
- class Artist < SevendigitalObject
23
-
24
- attr_accessor :id, :name, :appears_as #:nodoc:
25
-
26
- sevendigital_basic_property :sort_name, :image, :url
27
-
28
- #Retrieves artist\'s details by calling *artist/details* API method
29
- def get_details(options={})
30
- artist_with_details = @api_client.artist.get_details(@id, options)
31
- copy_basic_properties_from(artist_with_details)
32
- end
33
-
34
- sevendigital_extended_property :releases
35
- sevendigital_extended_property :top_tracks
36
- sevendigital_extended_property :similar
37
-
38
- #Retrieves releases by this artist by calling *artist/releases* API method
39
- def get_releases(options={})
40
- @api_client.artist.get_releases(@id, options)
41
- end
42
-
43
- #Retrieves top tracks by this artist by calling *artist/topTracks* API method
44
- def get_top_tracks(options={})
45
- @api_client.artist.get_top_tracks(@id, options)
46
- end
47
-
48
- #Retrieves artists similar to this artist by calling *artist/similar* API method
49
- def get_similar(options={})
50
- @similar = @api_client.artist.get_similar(@id, options)
51
- end
52
-
53
- #True if this artist represents various artists
54
- def various?
55
- joined_names = "#{name} #{appears_as}".downcase
56
-
57
- various_variations = ["vario", "v???????????????rio", "v.a", "vaious", "varios" "vaious", "varoius", "variuos", \
58
- "soundtrack", "karaoke", "original cast", "diverse artist"]
59
- various_variations.each{|various_variation| return true if joined_names.include?(various_variation)}
60
- return false
61
- end
62
-
63
-
64
- end
1
+ module Sevendigital
2
+
3
+ #with lazy loading enabled these will be automatically populated by calling get_details
4
+ #==Extended properties
5
+ #with lazy loading enabled these will be automatically populated by calling the method in brackets
6
+ #additional options can be passed in when accessing lazy loaded properties, e.g.
7
+ # artist.releases({:page_size => 5, :image_size =>250})
8
+
9
+ class Artist < SevendigitalObject
10
+
11
+ #7digital artist ID
12
+ #@return [Integer]
13
+ attr_accessor :id
14
+
15
+ #artist's name
16
+ #@return [String]
17
+ attr_accessor :name
18
+
19
+ #Artist's name as it appears on the release or track (only available when artist is linked from release or track)
20
+ #@return [String]
21
+ attr_accessor :appears_as
22
+
23
+ #Artist name used for sorting, e.g. Beatles, The (optional lazy-loaded property)
24
+ #@return [String]
25
+ sevendigital_basic_property :sort_name
26
+
27
+ #Artist image URL (optional lazy-loaded property)
28
+ #@return [String]
29
+ sevendigital_basic_property :image
30
+
31
+ #Artist buy link URL (optional lazy-loaded property)
32
+ #@return [String]
33
+ sevendigital_basic_property :url
34
+
35
+ #artist's releases (lazy loaded using get_releases)
36
+ #@return [Array<Release>]
37
+ sevendigital_extended_property :releases
38
+
39
+ #artist's top tracks (lazy loaded using get_top_tracks)
40
+ #@return [Array<Track>]
41
+ sevendigital_extended_property :top_tracks
42
+
43
+ #list of artists similar to this artist (lazy loaded using {#get_similar})
44
+ #@return [Array<Artist>] similar
45
+ sevendigital_extended_property :similar
46
+
47
+ #list of tags associated with the artist (lazy loaded using #get_tags)
48
+ #@return [Array<Artist>] similar
49
+ sevendigital_extended_property :tags
50
+
51
+ #populates all available details on artist by calling *artist/details* API method
52
+ #@return [Artist]
53
+ def get_details(options={})
54
+ artist_with_details = @api_client.artist.get_details(@id, options)
55
+ copy_basic_properties_from(artist_with_details)
56
+ end
57
+
58
+ #releases by this artist retrieved by calling *artist/releases* API method
59
+ #@return [Array<Release>]
60
+ def get_releases(options={})
61
+ @api_client.artist.get_releases(@id, options)
62
+ end
63
+
64
+ #top tracks by this artist retrieved by calling *artist/topTracks* API method
65
+ #@return [Array<Track>]
66
+ def get_top_tracks(options={})
67
+ @api_client.artist.get_top_tracks(@id, options)
68
+ end
69
+
70
+ #artists similar to this artist retrieved by calling *artist/similar* API method
71
+ #@return [Array<Track>]
72
+ def get_similar(options={})
73
+ @similar = @api_client.artist.get_similar(@id, options)
74
+ end
75
+
76
+ #tags associated with this artist retrieved by calling *artist/tags* API method
77
+ #@return [Array<Tag>]
78
+ def get_tags(options={})
79
+ @api_client.artist.get_tags(@id, options)
80
+ end
81
+
82
+ #does this artist represents various artists?
83
+ #@return [Boolean]
84
+ def various?
85
+ joined_names = "#{name} #{appears_as}".downcase
86
+
87
+ various_variations = ["vario", "v???????????????rio", "v.a", "vaious", "varios" "vaious", "varoius", "variuos", \
88
+ "soundtrack", "karaoke", "original cast", "diverse artist"]
89
+ various_variations.each{|various_variation| return true if joined_names.include?(various_variation)}
90
+ return false
91
+ end
92
+
93
+
94
+ end
65
95
  end