7digital 0.1.2 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +143 -143
  3. data/lib/sevendigital.rb +55 -55
  4. data/lib/sevendigital/api_operator.rb +127 -127
  5. data/lib/sevendigital/api_operator_cached.rb +91 -62
  6. data/lib/sevendigital/api_request.rb +72 -62
  7. data/lib/sevendigital/client.rb +122 -122
  8. data/lib/sevendigital/client_configuration.rb +85 -83
  9. data/lib/sevendigital/client_digestors.rb +122 -122
  10. data/lib/sevendigital/client_managers.rb +57 -57
  11. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
  12. data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
  13. data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
  14. data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
  15. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
  16. data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
  17. data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
  18. data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
  19. data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
  20. data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
  21. data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
  22. data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
  23. data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
  24. data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
  25. data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
  26. data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
  27. data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
  28. data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
  29. data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
  30. data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
  31. data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
  32. data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
  33. data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
  34. data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
  35. data/lib/sevendigital/management/artist_manager.rb +97 -97
  36. data/lib/sevendigital/management/basket_manager.rb +29 -29
  37. data/lib/sevendigital/management/country_manager.rb +10 -10
  38. data/lib/sevendigital/management/list_manager.rb +18 -18
  39. data/lib/sevendigital/management/manager.rb +12 -12
  40. data/lib/sevendigital/management/oauth_manager.rb +23 -23
  41. data/lib/sevendigital/management/release_manager.rb +54 -54
  42. data/lib/sevendigital/management/tag_manager.rb +10 -10
  43. data/lib/sevendigital/management/track_manager.rb +29 -27
  44. data/lib/sevendigital/management/user_card_manager.rb +26 -26
  45. data/lib/sevendigital/management/user_manager.rb +76 -76
  46. data/lib/sevendigital/model/api_response.rb +32 -32
  47. data/lib/sevendigital/model/artist.rb +104 -104
  48. data/lib/sevendigital/model/basket.rb +15 -15
  49. data/lib/sevendigital/model/basket_item.rb +14 -14
  50. data/lib/sevendigital/model/card.rb +11 -11
  51. data/lib/sevendigital/model/chart_item.rb +9 -9
  52. data/lib/sevendigital/model/download_url.rb +7 -7
  53. data/lib/sevendigital/model/format.rb +7 -7
  54. data/lib/sevendigital/model/label.rb +7 -7
  55. data/lib/sevendigital/model/list.rb +4 -4
  56. data/lib/sevendigital/model/list_item.rb +8 -8
  57. data/lib/sevendigital/model/locker.rb +4 -4
  58. data/lib/sevendigital/model/locker_release.rb +9 -9
  59. data/lib/sevendigital/model/locker_track.rb +9 -9
  60. data/lib/sevendigital/model/price.rb +9 -9
  61. data/lib/sevendigital/model/release.rb +57 -57
  62. data/lib/sevendigital/model/sevendigital_error.rb +11 -11
  63. data/lib/sevendigital/model/sevendigital_object.rb +57 -57
  64. data/lib/sevendigital/model/tag.rb +7 -7
  65. data/lib/sevendigital/model/track.rb +87 -83
  66. data/lib/sevendigital/model/user.rb +74 -74
  67. data/lib/sevendigital/pager.rb +20 -20
  68. data/lib/sevendigital/version.rb +5 -5
  69. data/spec/api_operator_cached_spec.rb +233 -178
  70. data/spec/api_operator_spec.rb +320 -320
  71. data/spec/api_request_spec.rb +46 -31
  72. data/spec/client_configuration_spec.rb +78 -78
  73. data/spec/client_spec.rb +161 -161
  74. data/spec/data/config/sevendigital.yml +5 -5
  75. data/spec/data/configuration_env_override.yml +5 -5
  76. data/spec/data/configuration_override.yml +1 -1
  77. data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
  78. data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
  79. data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
  80. data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
  81. data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
  82. data/spec/digestion_tract/country_digestor_spec.rb +33 -33
  83. data/spec/digestion_tract/digestor_spec.rb +33 -33
  84. data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
  85. data/spec/digestion_tract/format_digestor_spec.rb +38 -38
  86. data/spec/digestion_tract/label_digestor_spec.rb +33 -33
  87. data/spec/digestion_tract/list_digestor_spec.rb +31 -31
  88. data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
  89. data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
  90. data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
  91. data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
  92. data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
  93. data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
  94. data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
  95. data/spec/digestion_tract/price_digestor_spec.rb +73 -73
  96. data/spec/digestion_tract/release_digestor_spec.rb +115 -115
  97. data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
  98. data/spec/digestion_tract/track_digestor_spec.rb +105 -104
  99. data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
  100. data/spec/digestion_tract/user_digestor_spec.rb +42 -42
  101. data/spec/integration/artist_spec.rb +99 -86
  102. data/spec/integration/country_spec.rb +18 -18
  103. data/spec/integration/list_spec.rb +22 -22
  104. data/spec/integration/purchasing_spec.rb +24 -24
  105. data/spec/integration/release_spec.rb +34 -34
  106. data/spec/integration/sevendigital_spec.yml +4 -4
  107. data/spec/integration/track_spec.rb +38 -23
  108. data/spec/integration/user_spec.rb +22 -22
  109. data/spec/management/artist_manager_spec.rb +172 -172
  110. data/spec/management/basket_manager_spec.rb +77 -77
  111. data/spec/management/country_manager_spec.rb +34 -34
  112. data/spec/management/list_manager_spec.rb +26 -26
  113. data/spec/management/oauth_manager_spec.rb +72 -72
  114. data/spec/management/release_manager_spec.rb +200 -200
  115. data/spec/management/tag_manager_spec.rb +34 -34
  116. data/spec/management/track_manager_spec.rb +111 -107
  117. data/spec/management/user_card_manager_spec.rb +78 -78
  118. data/spec/management/user_manager_spec.rb +218 -218
  119. data/spec/model/api_response_spec.rb +48 -48
  120. data/spec/model/artist_spec.rb +162 -162
  121. data/spec/model/basket_spec.rb +62 -62
  122. data/spec/model/release_spec.rb +133 -133
  123. data/spec/model/sevendigital_object_spec.rb +73 -73
  124. data/spec/model/track_spec.rb +146 -144
  125. data/spec/model/user_spec.rb +181 -181
  126. data/spec/spec_helper.rb +86 -84
  127. data/spec/test-xml/methods/artist/browse.xml +21 -21
  128. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  129. data/spec/test-xml/methods/artist/chart.xml +30 -30
  130. data/spec/test-xml/methods/artist/details.xml +9 -9
  131. data/spec/test-xml/methods/artist/releases.xml +544 -544
  132. data/spec/test-xml/methods/artist/search.xml +18 -18
  133. data/spec/test-xml/methods/artist/similar.xml +39 -39
  134. data/spec/test-xml/methods/artist/tags.xml +11 -11
  135. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  136. data/spec/test-xml/methods/basket/additem.xml +23 -23
  137. data/spec/test-xml/methods/basket/create.xml +10 -10
  138. data/spec/test-xml/methods/basket/index.xml +23 -23
  139. data/spec/test-xml/methods/basket/removeitem.xml +10 -10
  140. data/spec/test-xml/methods/country/resolve.xml +6 -6
  141. data/spec/test-xml/methods/editorial/list.xml +170 -170
  142. data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
  143. data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
  144. data/spec/test-xml/methods/release/bydate.xml +173 -173
  145. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  146. data/spec/test-xml/methods/release/chart.xml +181 -181
  147. data/spec/test-xml/methods/release/details.xml +48 -48
  148. data/spec/test-xml/methods/release/recommend.xml +89 -89
  149. data/spec/test-xml/methods/release/search.xml +194 -194
  150. data/spec/test-xml/methods/release/tags.xml +27 -27
  151. data/spec/test-xml/methods/release/tracks.xml +28 -28
  152. data/spec/test-xml/methods/tag/index.xml +16 -16
  153. data/spec/test-xml/methods/track/chart.xml +149 -149
  154. data/spec/test-xml/methods/track/details.xml +30 -30
  155. data/spec/test-xml/methods/track/search.xml +159 -159
  156. data/spec/test-xml/methods/user/details.xml +4 -4
  157. data/spec/test-xml/methods/user/locker.xml +49 -49
  158. data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
  159. data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
  160. data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
  161. data/spec/test-xml/methods/user/purchase/item.xml +48 -48
  162. data/spec/test-xml/methods/user/signUp.xml +5 -5
  163. data/spec/test-xml/objects/artist.xml +7 -7
  164. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  165. data/spec/test-xml/objects/artist_list.xml +22 -22
  166. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  167. data/spec/test-xml/objects/basket.xml +21 -21
  168. data/spec/test-xml/objects/basket_item.xml +11 -11
  169. data/spec/test-xml/objects/basket_item_list.xml +25 -25
  170. data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
  171. data/spec/test-xml/objects/download_url.xml +7 -7
  172. data/spec/test-xml/objects/list.xml +89 -89
  173. data/spec/test-xml/objects/list_item_list.xml +85 -85
  174. data/spec/test-xml/objects/list_item_release.xml +13 -13
  175. data/spec/test-xml/objects/locker.xml +47 -47
  176. data/spec/test-xml/objects/locker_release.xml +40 -40
  177. data/spec/test-xml/objects/locker_release_list.xml +87 -87
  178. data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
  179. data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
  180. data/spec/test-xml/objects/locker_track.xml +25 -25
  181. data/spec/test-xml/objects/locker_track_list.xml +26 -26
  182. data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
  183. data/spec/test-xml/objects/nested_release_list.xml +22 -22
  184. data/spec/test-xml/objects/oauth_access_token.xml +3 -3
  185. data/spec/test-xml/objects/oauth_request_token.xml +3 -3
  186. data/spec/test-xml/objects/price.xml +7 -7
  187. data/spec/test-xml/objects/release.xml +40 -40
  188. data/spec/test-xml/objects/release_chart_item.xml +39 -39
  189. data/spec/test-xml/objects/release_list.xml +18 -18
  190. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  191. data/spec/test-xml/objects/response.xml +38 -38
  192. data/spec/test-xml/objects/tag.xml +4 -4
  193. data/spec/test-xml/objects/track.xml +34 -33
  194. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  195. data/spec/test-xml/objects/user.xml +4 -4
  196. data/spec/test-xml/objects/user_payment_card.xml +5 -5
  197. metadata +15 -25
@@ -1,5 +1,5 @@
1
- module Sevendigital
2
- class Locker < SevendigitalObject
3
- attr_accessor :locker_releases
4
- end
1
+ module Sevendigital
2
+ class Locker < SevendigitalObject
3
+ attr_accessor :locker_releases
4
+ end
5
5
  end
@@ -1,9 +1,9 @@
1
- module Sevendigital
2
-
3
- class LockerRelease < SevendigitalObject
4
-
5
- attr_accessor :release, :locker_tracks
6
-
7
- end
8
-
9
- end
1
+ module Sevendigital
2
+
3
+ class LockerRelease < SevendigitalObject
4
+
5
+ attr_accessor :release, :locker_tracks
6
+
7
+ end
8
+
9
+ end
@@ -1,9 +1,9 @@
1
- module Sevendigital
2
-
3
- class LockerTrack < SevendigitalObject
4
-
5
- attr_accessor :track, :download_urls, :remaining_downloads, :purchase_date
6
-
7
- end
8
-
9
- end
1
+ module Sevendigital
2
+
3
+ class LockerTrack < SevendigitalObject
4
+
5
+ attr_accessor :track, :download_urls, :remaining_downloads, :purchase_date
6
+
7
+ end
8
+
9
+ end
@@ -1,9 +1,9 @@
1
- module Sevendigital
2
-
3
- class Price
4
-
5
- attr_accessor :currency_code, :currency_symbol, :value, :formatted_price, :rrp, :formatted_rrp, :on_sale
6
-
7
- end
8
-
9
- end
1
+ module Sevendigital
2
+
3
+ class Price
4
+
5
+ attr_accessor :currency_code, :currency_symbol, :value, :formatted_price, :rrp, :formatted_rrp, :on_sale
6
+
7
+ end
8
+
9
+ end
@@ -1,58 +1,58 @@
1
- module Sevendigital
2
-
3
- class Release < SevendigitalObject
4
-
5
- attr_accessor :id, :title
6
-
7
- sevendigital_basic_property :version, :type, :artist, :image, :url, :release_date,
8
- :added_date, :barcode, :year, :explicit_content, :formats, :label
9
-
10
- sevendigital_extended_property :tracks
11
- sevendigital_extended_property :recommendations
12
- sevendigital_extended_property :tags
13
-
14
- def get_details(options={})
15
- release_with_details = @api_client.release.get_details(@id, options)
16
- copy_basic_properties_from(release_with_details)
17
- @price = release_with_details.instance_variable_get("@price")
18
- release_with_details
19
- end
20
-
21
- def image(image_size = nil)
22
- return @image.gsub(/_\d+\.jpg/, "_#{image_size}.jpg") if image_size
23
- @image
24
- end
25
-
26
- def get_tracks(options={})
27
- @api_client.release.get_tracks(@id, options)
28
- end
29
-
30
- def get_recommendations(options={})
31
- @api_client.release.get_recommendations(@id, options)
32
- end
33
-
34
- def get_tags(options={})
35
- @api_client.release.get_tags(@id, options)
36
- end
37
-
38
- def demand_price(options={})
39
- get_details(options) if @price.nil? || @price.value.nil?
40
- end
41
-
42
- def price(options={})
43
- begin
44
- demand_price(options) if @api_client.configuration.lazy_load
45
- rescue Sevendigital::SevendigitalError => error
46
- @api_client.log(:verbose) { "Release: Error while lazyloading price - #{error.error_code} #{error.error_message}" }
47
- raise error if !@api_client.configuration.ignorant_lazy_load
48
- end
49
- @price
50
- end
51
-
52
- def price=(value)
53
- @price = value
54
- end
55
-
56
- end
57
-
1
+ module Sevendigital
2
+
3
+ class Release < SevendigitalObject
4
+
5
+ attr_accessor :id, :title
6
+
7
+ sevendigital_basic_property :version, :type, :artist, :image, :url, :release_date,
8
+ :added_date, :barcode, :year, :explicit_content, :formats, :label
9
+
10
+ sevendigital_extended_property :tracks
11
+ sevendigital_extended_property :recommendations
12
+ sevendigital_extended_property :tags
13
+
14
+ def get_details(options={})
15
+ release_with_details = @api_client.release.get_details(@id, options)
16
+ copy_basic_properties_from(release_with_details)
17
+ @price = release_with_details.instance_variable_get("@price")
18
+ release_with_details
19
+ end
20
+
21
+ def image(image_size = nil)
22
+ return @image.gsub(/_\d+\.jpg/, "_#{image_size}.jpg") if image_size
23
+ @image
24
+ end
25
+
26
+ def get_tracks(options={})
27
+ @api_client.release.get_tracks(@id, options)
28
+ end
29
+
30
+ def get_recommendations(options={})
31
+ @api_client.release.get_recommendations(@id, options)
32
+ end
33
+
34
+ def get_tags(options={})
35
+ @api_client.release.get_tags(@id, options)
36
+ end
37
+
38
+ def demand_price(options={})
39
+ get_details(options) if @price.nil? || @price.value.nil?
40
+ end
41
+
42
+ def price(options={})
43
+ begin
44
+ demand_price(options) if @api_client.configuration.lazy_load
45
+ rescue Sevendigital::SevendigitalError => error
46
+ @api_client.log(:verbose) { "Release: Error while lazyloading price - #{error.error_code} #{error.error_message}" }
47
+ raise error if !@api_client.configuration.ignorant_lazy_load
48
+ end
49
+ @price
50
+ end
51
+
52
+ def price=(value)
53
+ @price = value
54
+ end
55
+
56
+ end
57
+
58
58
  end
@@ -1,11 +1,11 @@
1
- module Sevendigital
2
- class SevendigitalError < StandardError;
3
- attr_accessor :error_code, :error_message
4
-
5
- def initialize(error_code = 10000, error_message=nil)
6
- @error_code = error_code
7
- @error_message = error_message
8
- end
9
-
10
- end
11
- end
1
+ module Sevendigital
2
+ class SevendigitalError < StandardError;
3
+ attr_accessor :error_code, :error_message
4
+
5
+ def initialize(error_code = 10000, error_message=nil)
6
+ @error_code = error_code
7
+ @error_message = error_message
8
+ end
9
+
10
+ end
11
+ end
@@ -1,57 +1,57 @@
1
- #@private
2
- class Class # :nodoc:
3
-
4
- def sevendigital_basic_property(*properties)
5
- @basic_properties ||= []
6
- properties.each do |property|
7
- @basic_properties << "@#{property}".to_sym
8
- sevendigital_extended_property property, :get_details
9
- end
10
- end
11
-
12
- def sevendigital_extended_property(accessor, get_method = nil)
13
-
14
- get_method ||= "get_#{accessor.to_s}".to_sym
15
- demand_method = "demand_#{accessor.to_s}".to_sym
16
-
17
- define_method(demand_method) do |*options|
18
- if instance_variable_get("@#{accessor}").nil? then
19
- value = send(get_method, *options)
20
- instance_variable_set("@#{accessor}", value) if get_method != :get_details
21
- end
22
- end
23
-
24
- define_method("#{accessor}") do |*options|
25
- begin
26
- send(demand_method, *options) if instance_variable_get("@#{accessor}").nil? && @api_client.configuration.lazy_load
27
- rescue Sevendigital::SevendigitalError => error
28
- @api_client.log(:verbose) { "Class: Error whilse lazyloading #{accessor} - #{error.error_code} #{error.error_message}" }
29
- raise error if !@api_client.configuration.ignorant_lazy_load
30
- end
31
- instance_variable_get("@#{accessor}")
32
- end
33
-
34
- define_method("#{accessor}=") do |val|
35
- instance_variable_set("@#{accessor}",val)
36
- end
37
- end
38
- end
39
-
40
- module Sevendigital
41
-
42
- class SevendigitalObject
43
-
44
- def initialize(api_client)
45
- @api_client = api_client
46
- end
47
-
48
- def copy_basic_properties_from(other_object)
49
- self.class.instance_variable_get(:@basic_properties).each do |property|
50
- instance_variable_set(property, other_object.instance_variable_get(property))
51
- end
52
- end
53
-
54
- end
55
-
56
- end
57
-
1
+ #@private
2
+ class Class # :nodoc:
3
+
4
+ def sevendigital_basic_property(*properties)
5
+ @basic_properties ||= []
6
+ properties.each do |property|
7
+ @basic_properties << "@#{property}".to_sym
8
+ sevendigital_extended_property property, :get_details
9
+ end
10
+ end
11
+
12
+ def sevendigital_extended_property(accessor, get_method = nil)
13
+
14
+ get_method ||= "get_#{accessor.to_s}".to_sym
15
+ demand_method = "demand_#{accessor.to_s}".to_sym
16
+
17
+ define_method(demand_method) do |*options|
18
+ if instance_variable_get("@#{accessor}").nil? then
19
+ value = send(get_method, *options)
20
+ instance_variable_set("@#{accessor}", value) if get_method != :get_details
21
+ end
22
+ end
23
+
24
+ define_method("#{accessor}") do |*options|
25
+ begin
26
+ send(demand_method, *options) if instance_variable_get("@#{accessor}").nil? && @api_client.configuration.lazy_load
27
+ rescue Sevendigital::SevendigitalError => error
28
+ @api_client.log(:verbose) { "Class: Error while lazyloading #{accessor} - #{error.error_code} #{error.error_message}" }
29
+ raise error if !@api_client.configuration.ignorant_lazy_load
30
+ end
31
+ instance_variable_get("@#{accessor}")
32
+ end
33
+
34
+ define_method("#{accessor}=") do |val|
35
+ instance_variable_set("@#{accessor}",val)
36
+ end
37
+ end
38
+ end
39
+
40
+ module Sevendigital
41
+
42
+ class SevendigitalObject
43
+
44
+ def initialize(api_client)
45
+ @api_client = api_client
46
+ end
47
+
48
+ def copy_basic_properties_from(other_object)
49
+ self.class.instance_variable_get(:@basic_properties).each do |property|
50
+ instance_variable_set(property, other_object.instance_variable_get(property))
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
@@ -1,7 +1,7 @@
1
- module Sevendigital
2
-
3
- class Tag
4
- attr_accessor :id, :text, :url, :count
5
- end
6
-
7
- end
1
+ module Sevendigital
2
+
3
+ class Tag
4
+ attr_accessor :id, :text, :url, :count
5
+ end
6
+
7
+ end
@@ -1,84 +1,88 @@
1
- module Sevendigital
2
-
3
- class Track < SevendigitalObject
4
-
5
- #track id
6
- #@return [Integer]
7
- attr_accessor :id
8
-
9
- #title of the track
10
- #@return [String]
11
- attr_accessor :title
12
-
13
- #version of the track (e.g. remix, radio edit)
14
- #@return [String]
15
- attr_accessor :version
16
-
17
- #release the track appears on
18
- #@return [Release]
19
- attr_accessor :release
20
-
21
- #Artist of the track
22
- #@return [Artist]
23
- attr_accessor :artist
24
-
25
- #Number of the track as it appears on the release
26
- #@return [Integer]
27
- sevendigital_basic_property :track_number
28
-
29
- #The length of the track in seconds
30
- #@return [Integer]
31
- sevendigital_basic_property :duration
32
-
33
- #parental advisory - explicit content tag
34
- #@return [Boolean]
35
- sevendigital_basic_property :explicit_content
36
-
37
- #ISRC code
38
- #@return [String]
39
- sevendigital_basic_property :isrc
40
-
41
- #URL link to 7digital page where this track can be purchased
42
- #@return [String]
43
- sevendigital_basic_property :url
44
-
45
- #Pricing information of the track
46
- #@return [Price]
47
- sevendigital_basic_property :price
48
-
49
- #Retrieves and populates all track properties
50
- #
51
- #useful with lazy loading turned off
52
- #@param [Hash] options optional hash of additional API parameters, e.g. image_size => 75, etc
53
- #@return [Track]
54
- def get_details(options={})
55
- track_with_details = @api_client.track.get_details_from_release(@id, @release.id, options)
56
- copy_basic_properties_from(track_with_details)
57
- self
58
- end
59
-
60
- #Title of the track stripped out of any version information if it's included the title of the track rather than version property
61
- #e.g. if title is "Some Song (Radio Edit)" it will return "Some Song"
62
- #@return [String]
63
- def short_title
64
- # return title.gsub(/\s+[\(\[](album|lp|single|short|edit|radio)\s+version[\)\]]/ , "")
65
- return title.gsub(/\s+\(.*\s?(version|mix|remix|edit|edition|live|feat|explicit|original|remaster)\s?.*\)/i, "")
66
- end
67
-
68
- #Compares 2 songs whether they're just different versions of the same song by the same artist
69
- #e.g. track "Some Song (Radio Edit)" is alternate version of "Some Song (Remastered)"
70
- #returns true also if the 2 songs are the same
71
- #@return [Boolean]
72
- def alternate_version_of?(another_track)
73
- return another_track && short_title.downcase == another_track.short_title.downcase \
74
- && another_track.artist && artist.name.downcase == another_track.artist.name.downcase
75
- end
76
-
77
- #URL of mp3 preview for this track
78
- #@return [String]
79
- def preview_url(options={})
80
- @api_client.track.build_preview_url(@id, options)
81
- end
82
-
83
- end
1
+ module Sevendigital
2
+
3
+ class Track < SevendigitalObject
4
+
5
+ #track id
6
+ #@return [Integer]
7
+ attr_accessor :id
8
+
9
+ #title of the track
10
+ #@return [String]
11
+ attr_accessor :title
12
+
13
+ #version of the track (e.g. remix, radio edit)
14
+ #@return [String]
15
+ attr_accessor :version
16
+
17
+ #release the track appears on
18
+ #@return [Release]
19
+ attr_accessor :release
20
+
21
+ #Artist of the track
22
+ #@return [Artist]
23
+ attr_accessor :artist
24
+
25
+ #Number of the track as it appears on the release
26
+ #@return [Integer]
27
+ sevendigital_basic_property :track_number
28
+
29
+ #The length of the track in seconds
30
+ #@return [Integer]
31
+ sevendigital_basic_property :duration
32
+
33
+ #parental advisory - explicit content tag
34
+ #@return [Boolean]
35
+ sevendigital_basic_property :explicit_content
36
+
37
+ #ISRC code
38
+ #@return [String]
39
+ sevendigital_basic_property :isrc
40
+
41
+ #URL link to 7digital page where this track can be purchased
42
+ #@return [String]
43
+ sevendigital_basic_property :url
44
+
45
+ #Pricing information of the track
46
+ #@return [Price]
47
+ sevendigital_basic_property :price
48
+
49
+ #Track type, e.g. :audio, :video, :pdf, etc
50
+ #@return [String]
51
+ sevendigital_basic_property :type
52
+
53
+ #Retrieves and populates all track properties
54
+ #
55
+ #useful with lazy loading turned off
56
+ #@param [Hash] options optional hash of additional API parameters, e.g. image_size => 75, etc
57
+ #@return [Track]
58
+ def get_details(options={})
59
+ track_with_details = @api_client.track.get_details_from_release(@id, @release.id, options)
60
+ copy_basic_properties_from(track_with_details)
61
+ self
62
+ end
63
+
64
+ #Title of the track stripped out of any version information if it's included the title of the track rather than version property
65
+ #e.g. if title is "Some Song (Radio Edit)" it will return "Some Song"
66
+ #@return [String]
67
+ def short_title
68
+ # return title.gsub(/\s+[\(\[](album|lp|single|short|edit|radio)\s+version[\)\]]/ , "")
69
+ return title.gsub(/\s+\(.*\s?(version|mix|remix|edit|edition|live|feat|explicit|original|remaster)\s?.*\)/i, "")
70
+ end
71
+
72
+ #Compares 2 songs whether they're just different versions of the same song by the same artist
73
+ #e.g. track "Some Song (Radio Edit)" is alternate version of "Some Song (Remastered)"
74
+ #returns true also if the 2 songs are the same
75
+ #@return [Boolean]
76
+ def alternate_version_of?(another_track)
77
+ return another_track && short_title.downcase == another_track.short_title.downcase \
78
+ && another_track.artist && artist.name.downcase == another_track.artist.name.downcase
79
+ end
80
+
81
+ #URL of mp3 preview for this track
82
+ #@return [String]
83
+ def preview_url(options={})
84
+ @api_client.track.build_preview_url(@id, options)
85
+ end
86
+
87
+ end
84
88
  end