7digital 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. data/README.rdoc +132 -5
  2. data/lib/sevendigital.rb +1 -2
  3. data/lib/sevendigital/api_operator.rb +103 -12
  4. data/lib/sevendigital/api_operator_cached.rb +14 -8
  5. data/lib/sevendigital/api_request.rb +50 -9
  6. data/lib/sevendigital/client.rb +51 -89
  7. data/lib/sevendigital/client_configuration.rb +86 -0
  8. data/lib/sevendigital/client_digestors.rb +79 -0
  9. data/lib/sevendigital/client_managers.rb +34 -0
  10. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +8 -3
  11. data/lib/sevendigital/digestion_tract/artist_digestor.rb +1 -1
  12. data/lib/sevendigital/digestion_tract/basket_digestor.rb +18 -0
  13. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +25 -0
  14. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +1 -1
  15. data/lib/sevendigital/digestion_tract/digestor.rb +7 -3
  16. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +19 -0
  17. data/lib/sevendigital/digestion_tract/format_digestor.rb +1 -1
  18. data/lib/sevendigital/digestion_tract/label_digestor.rb +1 -1
  19. data/lib/sevendigital/digestion_tract/locker_digestor.rb +17 -0
  20. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +19 -0
  21. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +21 -0
  22. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +14 -0
  23. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +14 -0
  24. data/lib/sevendigital/digestion_tract/pager_digestor.rb +1 -1
  25. data/lib/sevendigital/digestion_tract/price_digestor.rb +3 -3
  26. data/lib/sevendigital/digestion_tract/release_digestor.rb +1 -1
  27. data/lib/sevendigital/digestion_tract/tag_digestor.rb +22 -0
  28. data/lib/sevendigital/digestion_tract/track_digestor.rb +1 -1
  29. data/lib/sevendigital/management/artist_manager.rb +71 -34
  30. data/lib/sevendigital/management/basket_manager.rb +29 -0
  31. data/lib/sevendigital/management/manager.rb +1 -1
  32. data/lib/sevendigital/management/oauth_manager.rb +23 -0
  33. data/lib/sevendigital/management/release_manager.rb +7 -14
  34. data/lib/sevendigital/management/tag_manager.rb +11 -0
  35. data/lib/sevendigital/management/track_manager.rb +9 -9
  36. data/lib/sevendigital/management/user_manager.rb +51 -0
  37. data/lib/sevendigital/model/api_response.rb +19 -3
  38. data/lib/sevendigital/model/artist.rb +27 -9
  39. data/lib/sevendigital/model/basket.rb +16 -0
  40. data/lib/sevendigital/model/basket_item.rb +15 -0
  41. data/lib/sevendigital/model/download_url.rb +7 -0
  42. data/lib/sevendigital/model/format.rb +0 -2
  43. data/lib/sevendigital/model/label.rb +1 -3
  44. data/lib/sevendigital/model/locker.rb +5 -0
  45. data/lib/sevendigital/model/locker_release.rb +9 -0
  46. data/lib/sevendigital/model/locker_track.rb +9 -0
  47. data/lib/sevendigital/model/price.rb +0 -2
  48. data/lib/sevendigital/model/release.rb +22 -8
  49. data/lib/sevendigital/model/sevendigital_error.rb +9 -1
  50. data/lib/sevendigital/model/sevendigital_object.rb +16 -11
  51. data/lib/sevendigital/model/tag.rb +7 -0
  52. data/lib/sevendigital/model/track.rb +4 -4
  53. data/lib/sevendigital/model/user.rb +34 -0
  54. data/lib/sevendigital/pager.rb +8 -2
  55. data/lib/sevendigital/proxy_police.rb +5 -1
  56. data/lib/sevendigital/version.rb +5 -0
  57. data/spec/api_operator_cached_spec.rb +62 -7
  58. data/spec/api_operator_spec.rb +245 -21
  59. data/spec/api_request_spec.rb +20 -15
  60. data/spec/client_configuration_spec.rb +75 -0
  61. data/spec/client_spec.rb +126 -48
  62. data/spec/coverage/assets/0.3.9/app.js +66 -0
  63. data/spec/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  64. data/spec/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  65. data/spec/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  66. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  67. data/spec/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  68. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  69. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  70. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  71. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  72. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  73. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  74. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  75. data/spec/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  76. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  77. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  78. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  79. data/spec/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  80. data/spec/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  81. data/spec/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  82. data/spec/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  83. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  84. data/spec/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  85. data/spec/coverage/assets/0.3.9/favicon.png +0 -0
  86. data/spec/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  87. data/spec/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  88. data/spec/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  89. data/spec/coverage/assets/0.3.9/jquery.url.js +174 -0
  90. data/spec/coverage/assets/0.3.9/loading.gif +0 -0
  91. data/spec/coverage/assets/0.3.9/magnify.png +0 -0
  92. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  93. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  94. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  95. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  96. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  97. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  98. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  99. data/spec/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  100. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  101. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  102. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  103. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  104. data/spec/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  105. data/spec/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  106. data/spec/coverage/assets/0.3.9/stylesheet.css +341 -0
  107. data/spec/coverage/index.html +43412 -0
  108. data/spec/coverage/resultset.yml +3251 -0
  109. data/spec/data/configuration_override.yml +2 -1
  110. data/spec/digestion_tract/api_response_digestor_spec.rb +15 -1
  111. data/spec/digestion_tract/artist_digestor_spec.rb +3 -3
  112. data/spec/digestion_tract/basket_digestor_spec.rb +32 -0
  113. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -0
  114. data/spec/digestion_tract/chart_digestor_spec.rb +2 -2
  115. data/spec/digestion_tract/download_url_digestor_spec.rb +41 -0
  116. data/spec/digestion_tract/format_digestor_spec.rb +2 -2
  117. data/spec/digestion_tract/label_digestor_spec.rb +2 -2
  118. data/spec/digestion_tract/locker_digestor_spec.rb +31 -0
  119. data/spec/digestion_tract/locker_release_digestor_spec.rb +71 -0
  120. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -0
  121. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +35 -0
  122. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +35 -0
  123. data/spec/digestion_tract/pager_digestor_spec.rb +2 -2
  124. data/spec/digestion_tract/price_digestor_spec.rb +21 -5
  125. data/spec/digestion_tract/release_digestor_spec.rb +2 -2
  126. data/spec/digestion_tract/tag_digestor_spec.rb +46 -0
  127. data/spec/digestion_tract/track_digestor_spec.rb +1 -1
  128. data/spec/management/artist_manager_spec.rb +46 -41
  129. data/spec/management/basket_manager_spec.rb +78 -0
  130. data/spec/management/oauth_manager_spec.rb +73 -0
  131. data/spec/management/release_manager_spec.rb +33 -74
  132. data/spec/management/tag_manager_spec.rb +34 -0
  133. data/spec/management/track_manager_spec.rb +42 -25
  134. data/spec/management/user_manager_spec.rb +163 -0
  135. data/spec/model/api_response_spec.rb +69 -2
  136. data/spec/model/artist_spec.rb +1 -26
  137. data/spec/model/basket_spec.rb +63 -0
  138. data/spec/model/coverage/assets/0.3.9/app.js +66 -0
  139. data/spec/model/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
  140. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
  141. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
  142. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
  143. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
  144. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
  145. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
  146. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
  147. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
  148. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
  149. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
  150. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
  151. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
  152. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
  153. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
  154. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
  155. data/spec/model/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
  156. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
  157. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
  158. data/spec/model/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
  159. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +363 -0
  160. data/spec/model/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  161. data/spec/model/coverage/assets/0.3.9/favicon.png +0 -0
  162. data/spec/model/coverage/assets/0.3.9/jquery-1.4.2.min.js +155 -0
  163. data/spec/model/coverage/assets/0.3.9/jquery.dataTables.min.js +152 -0
  164. data/spec/model/coverage/assets/0.3.9/jquery.timeago.js +141 -0
  165. data/spec/model/coverage/assets/0.3.9/jquery.url.js +174 -0
  166. data/spec/model/coverage/assets/0.3.9/loading.gif +0 -0
  167. data/spec/model/coverage/assets/0.3.9/magnify.png +0 -0
  168. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  169. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  170. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  171. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  172. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  173. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  174. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  175. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  176. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
  177. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  178. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
  179. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
  180. data/spec/model/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  181. data/spec/model/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  182. data/spec/model/coverage/assets/0.3.9/stylesheet.css +341 -0
  183. data/spec/model/coverage/index.html +8637 -0
  184. data/spec/model/coverage/resultset.yml +642 -0
  185. data/spec/model/release_spec.rb +15 -14
  186. data/spec/model/sevendigital_object_spec.rb +74 -0
  187. data/spec/model/track_spec.rb +8 -4
  188. data/spec/model/user_spec.rb +98 -0
  189. data/spec/pager_spec.rb +2 -2
  190. data/spec/proxy_police_spec.rb +1 -1
  191. data/spec/spec_helper.rb +11 -3
  192. data/spec/test-xml/methods/artist/browse.xml +22 -0
  193. data/spec/test-xml/methods/artist/chart.xml +31 -0
  194. data/spec/test-xml/methods/basket/additem.xml +24 -0
  195. data/spec/test-xml/methods/basket/create.xml +11 -0
  196. data/spec/test-xml/methods/basket/index.xml +24 -0
  197. data/spec/test-xml/methods/basket/removeitem.xml +11 -0
  198. data/spec/test-xml/methods/oauth/accesstoken.xml +6 -0
  199. data/spec/test-xml/methods/oauth/requesttoken.xml +6 -0
  200. data/spec/test-xml/methods/tag/index.xml +17 -0
  201. data/spec/test-xml/methods/user/locker.xml +50 -0
  202. data/spec/test-xml/methods/user/purchase/item.xml +49 -0
  203. data/spec/test-xml/objects/basket.xml +22 -0
  204. data/spec/test-xml/objects/basket_item.xml +12 -0
  205. data/spec/test-xml/objects/basket_item_list.xml +26 -0
  206. data/spec/test-xml/objects/basket_item_list_empty.xml +2 -0
  207. data/spec/test-xml/objects/download_url.xml +8 -0
  208. data/spec/test-xml/objects/locker.xml +48 -0
  209. data/spec/test-xml/objects/locker_release.xml +41 -0
  210. data/spec/test-xml/objects/locker_release_list.xml +87 -0
  211. data/spec/test-xml/objects/locker_release_list_empty.xml +5 -0
  212. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -0
  213. data/spec/test-xml/objects/locker_track.xml +25 -0
  214. data/spec/test-xml/objects/locker_track_list.xml +26 -0
  215. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -0
  216. data/spec/test-xml/objects/oauth_access_token.xml +4 -0
  217. data/spec/test-xml/objects/oauth_request_token.xml +4 -0
  218. data/spec/test-xml/objects/tag.xml +5 -0
  219. metadata +395 -13
  220. data/lib/sevendigital/peachy_patch.rb +0 -19
@@ -0,0 +1,86 @@
1
+ require 'ostruct'
2
+ require 'yaml'
3
+
4
+ module Sevendigital
5
+
6
+ DEFAULT_CONFIGURATION = {
7
+ :api_url => "api.7digital.com",
8
+ :api_version => "1.2",
9
+ :media_api_url => "media-eu.7digital.com",
10
+ :media_api_version => "media",
11
+ :account_api_url => "account.7digital.com",
12
+ :account_api_version => "web"
13
+ }.freeze
14
+
15
+ class ClientConfiguration < OpenStruct
16
+
17
+ def initialize(*args)
18
+
19
+ super()
20
+
21
+ self.override_with(Sevendigital::DEFAULT_CONFIGURATION)
22
+
23
+ self.override_with(default_configuration_file)
24
+
25
+ args.each do |configuration_argument|
26
+ self.override_with(configuration_argument)
27
+ end
28
+ puts "Now: #{self.inspect}"
29
+
30
+ end
31
+
32
+ def override_with(configuration)
33
+ puts "Now: #{self.inspect}"
34
+ puts "Overriding with #{configuration.class}: #{configuration.inspect}"
35
+ return self unless configuration
36
+ if configuration.kind_of? Hash then
37
+ table.merge!(configuration)
38
+ return self
39
+ end
40
+ if configuration.kind_of? OpenStruct then
41
+ table.merge!(configuration.marshal_dump)
42
+ return self
43
+ end
44
+ if (configuration.kind_of? String) && is_it_yml_file?(configuration) then
45
+ table.merge!(load_configuration_from_yml(configuration, current_environment))
46
+ return self
47
+ end
48
+
49
+ end
50
+
51
+ def default_configuration_file
52
+ return nil unless defined?(RAILS_ROOT)
53
+ "#{RAILS_ROOT}/config/sevendigital.yml"
54
+ end
55
+
56
+ def current_environment
57
+ defined?(RAILS_ENV) ? RAILS_ENV : nil
58
+ end
59
+
60
+ def load_configuration_from_yml(file_name, environment=nil)
61
+ plain_settings = transform_keys_to_symbols(YAML.load_file(file_name))
62
+ if (plain_settings[:common] || (environment && plain_settings[environment.to_sym])) then
63
+ environment_settings = plain_settings[:common] || {}
64
+ environment_settings.update(plain_settings[environment.to_sym]) if environment
65
+ environment_settings
66
+ else
67
+ plain_settings
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def is_it_yml_file?(file_name)
74
+ file_name.include?('.yml')
75
+ end
76
+
77
+ def transform_keys_to_symbols(hash)
78
+ return hash if not hash.is_a?(Hash)
79
+ new_hash = hash.inject({}){|memo,(k,v)| memo[k.to_sym] = transform_keys_to_symbols(v); memo}
80
+ return new_hash
81
+ end
82
+
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,79 @@
1
+ module Sevendigital
2
+
3
+ class Client
4
+
5
+ def api_response_digestor
6
+ @api_response_digestor ||= ApiResponseDigestor.new(self)
7
+ end
8
+
9
+ def artist_digestor
10
+ @artist_digestor ||= ArtistDigestor.new(self)
11
+ end
12
+
13
+ def basket_digestor
14
+ @basket_digestor ||= BasketDigestor.new(self)
15
+ end
16
+
17
+ def basket_item_digestor
18
+ @basket_item_digestor ||= BasketItemDigestor.new(self)
19
+ end
20
+
21
+ def chart_item_digestor
22
+ @chart_item_digestor ||= ChartItemDigestor.new(self)
23
+ end
24
+
25
+ def download_url_digestor
26
+ @download_url_digestor ||= DownloadUrlDigestor.new(self)
27
+ end
28
+
29
+ def format_digestor
30
+ @format_digestor ||= FormatDigestor.new(self)
31
+ end
32
+
33
+ def label_digestor
34
+ @label_digestor ||= LabelDigestor.new(self)
35
+ end
36
+
37
+ def locker_digestor
38
+ @locker_digestor ||= LockerDigestor.new(self)
39
+ end
40
+
41
+ def locker_release_digestor
42
+ @locker_release_digestor ||= LockerReleaseDigestor.new(self)
43
+ end
44
+
45
+ def locker_track_digestor
46
+ @locker_track_digestor ||= LockerTrackDigestor.new(self)
47
+ end
48
+
49
+ def oauth_request_token_digestor
50
+ @oauth_request_token_digestor ||= OAuthRequestTokenDigestor.new(self)
51
+ end
52
+
53
+ def oauth_access_token_digestor
54
+ @oauth_access_token_digestor ||= OAuthAccessTokenDigestor.new(self)
55
+ end
56
+
57
+ def pager_digestor
58
+ @pager_digestor ||= PagerDigestor.new(self)
59
+ end
60
+
61
+ def price_digestor
62
+ @price_digestor ||= PriceDigestor.new(self)
63
+ end
64
+
65
+ def release_digestor
66
+ @release_digestor ||= ReleaseDigestor.new(self)
67
+ end
68
+
69
+ def track_digestor
70
+ @track_digestor ||= TrackDigestor.new(self)
71
+ end
72
+
73
+ def tag_digestor
74
+ @tag_digestor ||= TagDigestor.new(self)
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,34 @@
1
+ module Sevendigital
2
+
3
+ class Client
4
+
5
+ def artist
6
+ @artist_manager ||= ArtistManager.new(self)
7
+ end
8
+
9
+ def basket
10
+ @basket_manager ||= BasketManager.new(self)
11
+ end
12
+ def release
13
+ @release_manager ||= ReleaseManager.new(self)
14
+ end
15
+
16
+ def tag
17
+ @tag_manager ||= TagManager.new(self)
18
+ end
19
+
20
+ def track
21
+ @track_manager ||= TrackManager.new(self)
22
+ end
23
+
24
+ def user
25
+ @user_manager ||= UserManager.new(self)
26
+ end
27
+
28
+ def oauth
29
+ @oauth_manager ||= OAuthManager.new(self)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -1,6 +1,6 @@
1
1
  module Sevendigital
2
2
 
3
- class ApiResponseDigestor < Digestor
3
+ class ApiResponseDigestor < Digestor # :nodoc:
4
4
 
5
5
  def from_xml(xml_or_proxy, element_name = :response)
6
6
  return from_proxy(ProxyPolice.ensure_is_proxy(xml_or_proxy, element_name))
@@ -36,8 +36,13 @@ module Sevendigital
36
36
  end
37
37
 
38
38
  def from_http_response(http_response)
39
- return from_xml(http_response.body.to_s) if http_response.is_a?(Net::HTTPSuccess)
40
- from_invalid_http_response(http_response)
39
+ if http_response.is_a?(Net::HTTPSuccess) then
40
+ response = from_xml(http_response.body.to_s)
41
+ else
42
+ response = from_invalid_http_response(http_response)
43
+ end
44
+ response.headers = http_response.header
45
+ response
41
46
  end
42
47
 
43
48
  def from_invalid_http_response(http_response)
@@ -1,6 +1,6 @@
1
1
  module Sevendigital
2
2
 
3
- class ArtistDigestor < Digestor
3
+ class ArtistDigestor < Digestor # :nodoc:
4
4
 
5
5
  def default_element_name; :artist end
6
6
  def default_list_element_name; :artists end
@@ -0,0 +1,18 @@
1
+ module Sevendigital
2
+
3
+ class BasketDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :basket end
6
+
7
+ def from_proxy(basket_proxy)
8
+ make_sure_not_eating_nil (basket_proxy)
9
+ basket = Sevendigital::Basket.new(@api_client)
10
+ basket.id = basket_proxy.id.to_s
11
+ basket.basket_items = @api_client.basket_item_digestor.list_from_proxy(basket_proxy.basket_items)
12
+
13
+ return basket
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,25 @@
1
+ module Sevendigital
2
+
3
+ class BasketItemDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :basket_item end
6
+ def default_list_element_name; :basket_items end
7
+
8
+ def from_proxy(basket_item_proxy)
9
+ make_sure_not_eating_nil(basket_item_proxy)
10
+ basket_item = BasketItem.new(@api_client)
11
+
12
+ basket_item.id = basket_item_proxy.id.to_i
13
+ basket_item.type = basket_item_proxy.type.value.downcase.to_sym
14
+ basket_item.artist_name = basket_item_proxy.artist_name.value.to_s
15
+ basket_item.item_name = basket_item_proxy.item_name.value.to_s
16
+ basket_item.release_id = basket_item_proxy.release_id.value.to_i
17
+ basket_item.track_id = basket_item_proxy.track_id.value.to_i
18
+ basket_item.price = @api_client.price_digestor.from_proxy(basket_item_proxy.price)
19
+
20
+ return basket_item
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -1,6 +1,6 @@
1
1
  module Sevendigital
2
2
 
3
- class ChartItemDigestor < Digestor
3
+ class ChartItemDigestor < Digestor # :nodoc:
4
4
 
5
5
  def default_element_name; :chart_item end
6
6
  def default_list_element_name; :chart end
@@ -1,6 +1,7 @@
1
1
  module Sevendigital
2
2
 
3
- class Digestor
3
+ #internal generic class used for digesting XML responses from the API
4
+ class Digestor # :nodoc:
4
5
 
5
6
  #TODO TEST THIS CRAP
6
7
 
@@ -19,10 +20,11 @@ module Sevendigital
19
20
  def list_from_proxy(object_list_proxy)
20
21
  make_sure_not_eating_nil(object_list_proxy)
21
22
  list = []
23
+ return list if object_list_proxy.kind_of?(Peachy::SimpleContent)
22
24
  if object_list_proxy.send(default_element_name) then
23
25
  object_list_proxy.send(default_element_name).each { |object_proxy| list << from_proxy(object_proxy) }
24
26
  end
25
- return paginate_results(object_list_proxy, list)
27
+ paginate_results(object_list_proxy, list)
26
28
  end
27
29
 
28
30
  #nested parsing for api methods that return standard object inside containers with no additional (useful) information
@@ -44,7 +46,9 @@ module Sevendigital
44
46
  end
45
47
 
46
48
  def paginate_results(xml_results, list)
47
- @api_client.pager_digestor.from_xml(xml_results).paginate_list(list)
49
+ pager = @api_client.pager_digestor.from_xml(xml_results)
50
+ return list if !pager
51
+ pager.paginate_list(list)
48
52
  end
49
53
 
50
54
  def make_sure_not_eating_nil(proxy)
@@ -0,0 +1,19 @@
1
+ module Sevendigital
2
+
3
+ class DownloadUrlDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :download_url end
6
+ def default_list_element_name; :download_urls end
7
+
8
+ def from_proxy(download_url_proxy)
9
+ make_sure_not_eating_nil (download_url_proxy)
10
+ download_url = DownloadUrl.new()
11
+ download_url.url = download_url_proxy.url.value.to_s
12
+ download_url.format = @api_client.format_digestor.from_proxy(download_url_proxy.format)
13
+
14
+ return download_url
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -1,6 +1,6 @@
1
1
  module Sevendigital
2
2
 
3
- class FormatDigestor < Digestor
3
+ class FormatDigestor < Digestor # :nodoc:
4
4
 
5
5
  def default_element_name; :format end
6
6
  def default_list_element_name; :formats end
@@ -1,6 +1,6 @@
1
1
  module Sevendigital
2
2
 
3
- class LabelDigestor < Digestor
3
+ class LabelDigestor < Digestor # :nodoc:
4
4
 
5
5
  def default_element_name; :label end
6
6
  def default_list_element_name; :labels end
@@ -0,0 +1,17 @@
1
+ module Sevendigital
2
+
3
+ class LockerDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :locker end
6
+
7
+ def from_proxy(locker_proxy)
8
+ make_sure_not_eating_nil (locker_proxy)
9
+ locker = Locker.new(@api_client)
10
+ locker.locker_releases = @api_client.locker_release_digestor.list_from_proxy(locker_proxy.locker_releases)
11
+
12
+ return locker
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,19 @@
1
+ module Sevendigital
2
+
3
+ class LockerReleaseDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :locker_release end
6
+ def default_list_element_name; :locker_releases end
7
+
8
+ def from_proxy(locker_release_proxy)
9
+ make_sure_not_eating_nil(locker_release_proxy)
10
+ locker_release = Sevendigital::LockerRelease.new(@api_client)
11
+ locker_release.release = @api_client.release_digestor.from_xml(locker_release_proxy.release)
12
+ locker_release.locker_tracks = @api_client.locker_track_digestor.list_from_xml(locker_release_proxy.locker_tracks, :locker_tracks)
13
+
14
+ return locker_release
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,21 @@
1
+ module Sevendigital
2
+
3
+ class LockerTrackDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :locker_track end
6
+ def default_list_element_name; :locker_tracks end
7
+
8
+ def from_proxy(locker_track_proxy)
9
+ make_sure_not_eating_nil(locker_track_proxy)
10
+ locker_track = Sevendigital::LockerTrack.new(@api_client)
11
+ locker_track.track = @api_client.track_digestor.from_xml(locker_track_proxy.track)
12
+ locker_track.remaining_downloads = locker_track_proxy.remaining_downloads.value.to_i
13
+ locker_track.purchase_date = DateTime.parse(locker_track_proxy.purchase_date.value.to_s)
14
+ locker_track.download_urls = @api_client.download_url_digestor.list_from_xml(locker_track_proxy.download_urls)
15
+
16
+ return locker_track
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,14 @@
1
+ module Sevendigital
2
+
3
+ class OAuthAccessTokenDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :oauth_access_token end
6
+
7
+ def from_proxy(token_proxy)
8
+ make_sure_not_eating_nil(token_proxy)
9
+ OAuth::AccessToken.new(@api_client.oauth_consumer, token_proxy.oauth_token.value, token_proxy.oauth_token_secret.value)
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ module Sevendigital
2
+
3
+ class OAuthRequestTokenDigestor < Digestor # :nodoc:
4
+
5
+ def default_element_name; :oauth_request_token end
6
+
7
+ def from_proxy(token_proxy)
8
+ make_sure_not_eating_nil(token_proxy)
9
+ OAuth::RequestToken.new(@api_client.oauth_consumer, token_proxy.oauth_token.value, token_proxy.oauth_token_secret.value)
10
+ end
11
+
12
+ end
13
+
14
+ end