7digital 0.0.7 → 0.1.0

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 (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
@@ -3,18 +3,21 @@ module Sevendigital
3
3
  #@private
4
4
  class DownloadUrlDigestor < Digestor # :nodoc:
5
5
 
6
- def default_element_name; :download_url end
7
- def default_list_element_name; :download_urls end
6
+ def default_element_name; :downloadUrl end
7
+ def default_list_element_name; :downloadUrls end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
8
11
 
9
- def from_proxy(download_url_proxy)
10
- make_sure_not_eating_nil (download_url_proxy)
11
12
  download_url = DownloadUrl.new()
12
- download_url.url = download_url_proxy.url.value.to_s
13
- download_url.format = @api_client.format_digestor.from_proxy(download_url_proxy.format)
14
13
 
15
- return download_url
14
+ download_url.url = get_required_value(xml_node,"url")
15
+ download_url.format = get_required_node(xml_node, "format") {|v| @api_client.format_digestor.from_xml_doc(v)}
16
+
17
+ download_url
16
18
  end
17
19
 
20
+
18
21
  end
19
22
 
20
23
  end
@@ -6,15 +6,17 @@ module Sevendigital
6
6
  def default_element_name; :format end
7
7
  def default_list_element_name; :formats end
8
8
 
9
- def from_proxy(format_proxy)
10
- make_sure_not_eating_nil (format_proxy)
11
- format = Format.new()
12
- format.id = format_proxy.id.to_i
13
- format.file_format = format_proxy.file_format.value.to_sym
14
- format.bit_rate = format_proxy.bit_rate.value.to_i
15
- format.drm_free = format_proxy.drm_free.value.to_s.downcase == "true"
16
-
17
- return format
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ format = Sevendigital::Format.new()
13
+
14
+ format.id = get_required_attribute(xml_node,"id").to_i
15
+ format.file_format = get_required_value(xml_node,"fileFormat").to_sym
16
+ format.bit_rate = get_required_value(xml_node,"bitRate").to_i
17
+ format.drm_free = get_required_value(xml_node,"drmFree").downcase == "true"
18
+
19
+ format
18
20
  end
19
21
 
20
22
  end
@@ -5,16 +5,17 @@ module Sevendigital
5
5
 
6
6
  def default_element_name; :label end
7
7
  def default_list_element_name; :labels end
8
-
9
- def from_proxy(label_proxy)
10
- make_sure_not_eating_nil(label_proxy)
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
11
 
12
12
  label = Label.new()
13
- label.id = label_proxy.id.to_i
14
- label.name = label_proxy.name.value.to_s
15
13
 
16
- return label
17
- end
14
+ label.id = get_required_attribute(xml_node, "id").to_i
15
+ label.name = get_required_value(xml_node, "name")
16
+
17
+ label
18
+ end
18
19
 
19
20
  end
20
21
 
@@ -0,0 +1,24 @@
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class ListDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :list end
7
+
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
10
+
11
+ list = List.new(@api_client)
12
+
13
+ list.id = get_required_attribute(xml_node, "id").to_i
14
+ list.key = get_required_value(xml_node, "key")
15
+ list.list_items = get_required_node(xml_node, "listItems") do |v|
16
+ @api_client.list_item_digestor.list_from_xml_doc(v)
17
+ end
18
+
19
+ list
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,26 @@
1
+ module Sevendigital
2
+
3
+ #@private
4
+ class ListItemDigestor < Digestor # :nodoc:
5
+
6
+ def default_element_name; :listItem end
7
+ def default_list_element_name; :listItems end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
+
12
+ list_item = Sevendigital::ListItem.new(@api_client)
13
+
14
+ list_item.id = get_required_attribute(xml_node, "id").to_i
15
+ list_item.type = get_required_value(xml_node, "type").to_sym
16
+
17
+ list_item.release = get_required_node(xml_node, "release") do |v|
18
+ @api_client.release_digestor.from_xml_doc(v)
19
+ end
20
+
21
+ list_item
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -5,12 +5,16 @@ module Sevendigital
5
5
 
6
6
  def default_element_name; :locker end
7
7
 
8
- def from_proxy(locker_proxy)
9
- make_sure_not_eating_nil (locker_proxy)
10
- locker = Locker.new(@api_client)
11
- locker.locker_releases = @api_client.locker_release_digestor.list_from_proxy(locker_proxy.locker_releases)
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
12
10
 
13
- return locker
11
+ locker = Locker.new(@api_client)
12
+
13
+ locker.locker_releases = get_required_node(xml_node, "lockerReleases") do |v|
14
+ @api_client.locker_release_digestor.list_from_xml_doc(v)
15
+ end
16
+
17
+ locker
14
18
  end
15
19
 
16
20
  end
@@ -3,16 +3,22 @@ module Sevendigital
3
3
  #@private
4
4
  class LockerReleaseDigestor < Digestor # :nodoc:
5
5
 
6
- def default_element_name; :locker_release end
7
- def default_list_element_name; :locker_releases end
6
+ def default_element_name; :lockerRelease end
7
+ def default_list_element_name; :lockerReleases end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
8
11
 
9
- def from_proxy(locker_release_proxy)
10
- make_sure_not_eating_nil(locker_release_proxy)
11
12
  locker_release = Sevendigital::LockerRelease.new(@api_client)
12
- locker_release.release = @api_client.release_digestor.from_xml(locker_release_proxy.release)
13
- locker_release.locker_tracks = @api_client.locker_track_digestor.list_from_xml(locker_release_proxy.locker_tracks, :locker_tracks)
14
13
 
15
- return locker_release
14
+ locker_release.release = get_required_node(xml_node, "release") do |v|
15
+ @api_client.release_digestor.from_xml_doc(v)
16
+ end
17
+ locker_release.locker_tracks = get_required_node(xml_node, "lockerTracks") do |v|
18
+ @api_client.locker_track_digestor.list_from_xml_doc(v)
19
+ end
20
+
21
+ locker_release
16
22
  end
17
23
 
18
24
  end
@@ -3,18 +3,22 @@ module Sevendigital
3
3
  #@private
4
4
  class LockerTrackDigestor < Digestor # :nodoc:
5
5
 
6
- def default_element_name; :locker_track end
7
- def default_list_element_name; :locker_tracks end
6
+ def default_element_name; :lockerTrack end
7
+ def default_list_element_name; :lockerTracks end
8
+
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
8
11
 
9
- def from_proxy(locker_track_proxy)
10
- make_sure_not_eating_nil(locker_track_proxy)
11
12
  locker_track = Sevendigital::LockerTrack.new(@api_client)
12
- locker_track.track = @api_client.track_digestor.from_xml(locker_track_proxy.track)
13
- locker_track.remaining_downloads = locker_track_proxy.remaining_downloads.value.to_i
14
- locker_track.purchase_date = DateTime.parse(locker_track_proxy.purchase_date.value.to_s)
15
- locker_track.download_urls = @api_client.download_url_digestor.list_from_xml(locker_track_proxy.download_urls)
16
13
 
17
- return locker_track
14
+ locker_track.track = get_required_node(xml_node, "track") {|v| @api_client.track_digestor.from_xml_doc(v)}
15
+ locker_track.remaining_downloads = get_required_value(xml_node, "remainingDownloads").to_i
16
+ locker_track.purchase_date = DateTime.parse(get_required_value(xml_node, "purchaseDate"))
17
+ locker_track.download_urls = get_required_node(xml_node, "downloadUrls") do |v|
18
+ @api_client.download_url_digestor.list_from_xml_doc(v)
19
+ end
20
+
21
+ locker_track
18
22
  end
19
23
 
20
24
  end
@@ -5,9 +5,13 @@ module Sevendigital
5
5
 
6
6
  def default_element_name; :oauth_access_token end
7
7
 
8
- def from_proxy(token_proxy)
9
- make_sure_not_eating_nil(token_proxy)
10
- OAuth::AccessToken.new(@api_client.oauth_consumer, token_proxy.oauth_token.value, token_proxy.oauth_token_secret.value)
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
10
+ OAuth::AccessToken.new(
11
+ @api_client.oauth_consumer,
12
+ get_required_value(xml_node,"oauth_token"),
13
+ get_required_value(xml_node,"oauth_token_secret")
14
+ )
11
15
  end
12
16
 
13
17
  end
@@ -5,9 +5,13 @@ module Sevendigital
5
5
 
6
6
  def default_element_name; :oauth_request_token end
7
7
 
8
- def from_proxy(token_proxy)
9
- make_sure_not_eating_nil(token_proxy)
10
- OAuth::RequestToken.new(@api_client.oauth_consumer, token_proxy.oauth_token.value, token_proxy.oauth_token_secret.value)
8
+ def from_xml_doc(xml_node)
9
+ make_sure_eating_nokogiri_node(xml_node)
10
+ OAuth::RequestToken.new(
11
+ @api_client.oauth_consumer,
12
+ get_required_value(xml_node,"oauth_token"),
13
+ get_required_value(xml_node,"oauth_token_secret")
14
+ )
11
15
  end
12
16
 
13
17
  end
@@ -6,18 +6,22 @@ module Sevendigital
6
6
  def default_element_name; :results end
7
7
  def default_list_element_name; nil end
8
8
 
9
- def from_proxy(pager_proxy)
10
- make_sure_not_eating_nil(pager_proxy)
11
- return nil unless paging_info_available?(pager_proxy)
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
+
12
14
  pager = Pager.new
13
- pager.page = pager_proxy.page.value.to_i
14
- pager.page_size = pager_proxy.page_size.value.to_i
15
- pager.total_items = pager_proxy.total_items.value.to_i
16
- return pager
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
17
21
  end
18
22
 
19
- def paging_info_available?(pager_proxy)
20
- pager_proxy.page && pager_proxy.page_size && pager_proxy.total_items
23
+ def paging_info_available?(xml_doc)
24
+ xml_doc.at_xpath("./page") && xml_doc.at_xpath("./pageSize") && xml_doc.at_xpath("./totalItems")
21
25
  end
22
26
 
23
27
  end
@@ -7,19 +7,22 @@ module Sevendigital
7
7
  def default_element_name; :price end
8
8
  def default_list_element_name; nil end
9
9
 
10
- def from_proxy(price_proxy)
11
- make_sure_not_eating_nil(price_proxy)
12
- price = Sevendigital::Price.new()
13
- price.currency_code = price_proxy.currency.code.to_s.upcase.to_sym
14
- price.currency_symbol= price_proxy.currency.value
15
- price.value= price_proxy.value.value.to_f if !price_proxy.value.value.to_s.empty?
16
- price.formatted_price= price_proxy.formatted_price.value
17
- price.rrp= price_proxy.rrp.value.to_f if price_proxy.rrp
18
- price.formatted_rrp= price_proxy.formatted_rrp.value if price_proxy.formatted_rrp
19
- price.on_sale = price_proxy.on_sale.value.to_s.downcase == "true" if price_proxy.on_sale
20
-
21
- return price
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}
22
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
+
23
26
 
24
27
  end
25
28
 
@@ -8,45 +8,37 @@ module Sevendigital
8
8
  def default_element_name; :release end
9
9
  def default_list_element_name; :releases end
10
10
 
11
- def from_proxy(release_proxy)
12
- make_sure_not_eating_nil(release_proxy)
11
+ def from_xml_doc(xml_node)
12
+ make_sure_eating_nokogiri_node(xml_node)
13
+
13
14
  release = Release.new(@api_client)
14
15
 
15
- populate_required_properties(release, release_proxy)
16
- populate_optional_properties(release, release_proxy)
17
- populate_formats(release, release_proxy)
16
+ populate_required_properties(release, xml_node)
17
+ populate_optional_properties(release, xml_node)
18
+
19
+ release
20
+ end
18
21
 
19
- return release
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) }
20
26
  end
21
27
 
22
- def populate_required_properties(release, release_proxy)
23
- release.id = release_proxy.id.to_i
24
- release.title = release_proxy.title.value.to_s
25
- release.artist = @api_client.artist_digestor.from_proxy(release_proxy.artist)
26
- end
27
-
28
- def populate_optional_properties(release, release_proxy)
29
- release.version = release_proxy.version.value.to_s if release_proxy.version
30
- release.type = release_proxy.type.value.downcase.to_sym if value_present?(release_proxy.type)
31
- release.barcode = release_proxy.barcode.value.to_s if value_present?(release_proxy.barcode)
32
- release.year = release_proxy.year.value.to_i if value_present?(release_proxy.year)
33
- release.explicit_content = release_proxy.explicit_content.value.to_s.downcase == "true" if value_present?(release_proxy.explicit_content)
34
- release.release_date = DateTime.parse(release_proxy.release_date.value.to_s) if value_present?(release_proxy.release_date)
35
- release.added_date = DateTime.parse(release_proxy.added_date.value.to_s) if value_present?(release_proxy.added_date)
36
- release.label = @api_client.label_digestor.from_proxy(release_proxy.label) if content_present?(release_proxy.label)
37
- release.image = release_proxy.image.value.to_s if value_present?(release_proxy.image)
38
- release.url = release_proxy.url.value.to_s if value_present?(release_proxy.url)
39
- release.price = @api_client.price_digestor.from_proxy(release_proxy.price) if content_present?(release_proxy.price)
40
- end
41
-
42
- def populate_formats(release, release_proxy)
43
- if release_proxy.formats && release_proxy.formats.format then
44
- release.formats = Array.new
45
- release_proxy.formats.format.each do |format|
46
- release.formats << @api_client.format_digestor.from_proxy(format)
47
- end
48
- end
49
- end
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
50
42
 
51
43
  end
52
44
 
@@ -6,16 +6,17 @@ module Sevendigital
6
6
  def default_element_name; :tag end
7
7
  def default_list_element_name; :tags end
8
8
 
9
- def from_proxy(tag_proxy)
10
- make_sure_not_eating_nil(tag_proxy)
9
+ def from_xml_doc(xml_node)
10
+ make_sure_eating_nokogiri_node(xml_node)
11
11
 
12
12
  tag = Tag.new()
13
- tag.id = tag_proxy.id.to_s
14
- tag.text = tag_proxy.text.value.to_s
15
- tag.url = tag_proxy.url.value.to_s if value_present?(tag_proxy.url)
16
- tag.count = tag_proxy.count_.value.to_i if value_present?(tag_proxy.count_)
17
13
 
18
- return tag
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
19
20
  end
20
21
 
21
22
  end
@@ -6,33 +6,32 @@ module Sevendigital
6
6
  def default_element_name; :track end
7
7
  def default_list_element_name; :tracks end
8
8
 
9
-
10
- def from_proxy(track_proxy)
11
- make_sure_not_eating_nil (track_proxy)
12
-
13
- track = Track.new(@api_client)
14
- populate_required_properties(track, track_proxy)
15
- populate_optional_properties(track, track_proxy)
16
-
17
- return track
18
- end
19
-
20
- def populate_required_properties(track, track_proxy)
21
- track.id = track_proxy.id.to_i
22
- track.title = track_proxy.title.value.to_s
23
- track.artist = @api_client.artist_digestor.from_proxy(track_proxy.artist)
24
- end
25
-
26
- def populate_optional_properties(track, track_proxy)
27
- track.version = track_proxy.version.value.to_s if track_proxy.version
28
- track.track_number = track_proxy.track_number.value.to_i if track_proxy.track_number
29
- track.duration = track_proxy.duration.value.to_i if track_proxy.duration
30
- track.release = @api_client.release_digestor.from_proxy(track_proxy.release) if track_proxy.release
31
- track.explicit_content = track_proxy.explicit_content.value.to_s.downcase == "true" if track_proxy.explicit_content
32
- track.isrc = track_proxy.isrc.value.to_s if track_proxy.isrc
33
- track.image = track_proxy.image.value.to_s if track_proxy.image
34
- track.url = track_proxy.url.value.to_s if track_proxy.url
35
- track.price = @api_client.price_digestor.from_proxy(track_proxy.price) if track_proxy.price
36
- end
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
37
36
  end
38
37
  end