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.
- checksums.yaml +7 -0
- data/README.rdoc +143 -143
- data/lib/sevendigital.rb +55 -55
- data/lib/sevendigital/api_operator.rb +127 -127
- data/lib/sevendigital/api_operator_cached.rb +91 -62
- data/lib/sevendigital/api_request.rb +72 -62
- data/lib/sevendigital/client.rb +122 -122
- data/lib/sevendigital/client_configuration.rb +85 -83
- data/lib/sevendigital/client_digestors.rb +122 -122
- data/lib/sevendigital/client_managers.rb +57 -57
- data/lib/sevendigital/digestion_tract/api_response_digestor.rb +48 -48
- data/lib/sevendigital/digestion_tract/artist_digestor.rb +35 -35
- data/lib/sevendigital/digestion_tract/basket_digestor.rb +19 -19
- data/lib/sevendigital/digestion_tract/basket_item_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +34 -34
- data/lib/sevendigital/digestion_tract/country_digestor.rb +15 -15
- data/lib/sevendigital/digestion_tract/digestor.rb +122 -122
- data/lib/sevendigital/digestion_tract/download_url_digestor.rb +23 -23
- data/lib/sevendigital/digestion_tract/format_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/label_digestor.rb +21 -21
- data/lib/sevendigital/digestion_tract/list_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/list_item_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/locker_digestor.rb +22 -22
- data/lib/sevendigital/digestion_tract/locker_release_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/locker_track_digestor.rb +26 -26
- data/lib/sevendigital/digestion_tract/oauth_access_token_digestor.rb +18 -18
- data/lib/sevendigital/digestion_tract/oauth_request_token_digestor.rb +18 -18
- data/lib/sevendigital/digestion_tract/pager_digestor.rb +28 -28
- data/lib/sevendigital/digestion_tract/price_digestor.rb +28 -28
- data/lib/sevendigital/digestion_tract/release_digestor.rb +45 -45
- data/lib/sevendigital/digestion_tract/tag_digestor.rb +23 -23
- data/lib/sevendigital/digestion_tract/track_digestor.rb +38 -37
- data/lib/sevendigital/digestion_tract/user_card_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/user_digestor.rb +21 -21
- data/lib/sevendigital/management/artist_manager.rb +97 -97
- data/lib/sevendigital/management/basket_manager.rb +29 -29
- data/lib/sevendigital/management/country_manager.rb +10 -10
- data/lib/sevendigital/management/list_manager.rb +18 -18
- data/lib/sevendigital/management/manager.rb +12 -12
- data/lib/sevendigital/management/oauth_manager.rb +23 -23
- data/lib/sevendigital/management/release_manager.rb +54 -54
- data/lib/sevendigital/management/tag_manager.rb +10 -10
- data/lib/sevendigital/management/track_manager.rb +29 -27
- data/lib/sevendigital/management/user_card_manager.rb +26 -26
- data/lib/sevendigital/management/user_manager.rb +76 -76
- data/lib/sevendigital/model/api_response.rb +32 -32
- data/lib/sevendigital/model/artist.rb +104 -104
- data/lib/sevendigital/model/basket.rb +15 -15
- data/lib/sevendigital/model/basket_item.rb +14 -14
- data/lib/sevendigital/model/card.rb +11 -11
- data/lib/sevendigital/model/chart_item.rb +9 -9
- data/lib/sevendigital/model/download_url.rb +7 -7
- data/lib/sevendigital/model/format.rb +7 -7
- data/lib/sevendigital/model/label.rb +7 -7
- data/lib/sevendigital/model/list.rb +4 -4
- data/lib/sevendigital/model/list_item.rb +8 -8
- data/lib/sevendigital/model/locker.rb +4 -4
- data/lib/sevendigital/model/locker_release.rb +9 -9
- data/lib/sevendigital/model/locker_track.rb +9 -9
- data/lib/sevendigital/model/price.rb +9 -9
- data/lib/sevendigital/model/release.rb +57 -57
- data/lib/sevendigital/model/sevendigital_error.rb +11 -11
- data/lib/sevendigital/model/sevendigital_object.rb +57 -57
- data/lib/sevendigital/model/tag.rb +7 -7
- data/lib/sevendigital/model/track.rb +87 -83
- data/lib/sevendigital/model/user.rb +74 -74
- data/lib/sevendigital/pager.rb +20 -20
- data/lib/sevendigital/version.rb +5 -5
- data/spec/api_operator_cached_spec.rb +233 -178
- data/spec/api_operator_spec.rb +320 -320
- data/spec/api_request_spec.rb +46 -31
- data/spec/client_configuration_spec.rb +78 -78
- data/spec/client_spec.rb +161 -161
- data/spec/data/config/sevendigital.yml +5 -5
- data/spec/data/configuration_env_override.yml +5 -5
- data/spec/data/configuration_override.yml +1 -1
- data/spec/digestion_tract/api_response_digestor_spec.rb +93 -93
- data/spec/digestion_tract/artist_digestor_spec.rb +81 -81
- data/spec/digestion_tract/basket_digestor_spec.rb +31 -31
- data/spec/digestion_tract/basket_item_digestor_spec.rb +58 -58
- data/spec/digestion_tract/chart_digestor_spec.rb +52 -52
- data/spec/digestion_tract/country_digestor_spec.rb +33 -33
- data/spec/digestion_tract/digestor_spec.rb +33 -33
- data/spec/digestion_tract/download_url_digestor_spec.rb +40 -40
- data/spec/digestion_tract/format_digestor_spec.rb +38 -38
- data/spec/digestion_tract/label_digestor_spec.rb +33 -33
- data/spec/digestion_tract/list_digestor_spec.rb +31 -31
- data/spec/digestion_tract/list_item_digestor_spec.rb +80 -80
- data/spec/digestion_tract/locker_digestor_spec.rb +30 -30
- data/spec/digestion_tract/locker_release_digestor_spec.rb +70 -70
- data/spec/digestion_tract/locker_track_digestor_spec.rb +56 -56
- data/spec/digestion_tract/oauth_access_token_digestor_spec.rb +34 -34
- data/spec/digestion_tract/oauth_request_token_digestor_spec.rb +34 -34
- data/spec/digestion_tract/pager_digestor_spec.rb +50 -50
- data/spec/digestion_tract/price_digestor_spec.rb +73 -73
- data/spec/digestion_tract/release_digestor_spec.rb +115 -115
- data/spec/digestion_tract/tag_digestor_spec.rb +46 -46
- data/spec/digestion_tract/track_digestor_spec.rb +105 -104
- data/spec/digestion_tract/user_card_digestor_spec.rb +58 -58
- data/spec/digestion_tract/user_digestor_spec.rb +42 -42
- data/spec/integration/artist_spec.rb +99 -86
- data/spec/integration/country_spec.rb +18 -18
- data/spec/integration/list_spec.rb +22 -22
- data/spec/integration/purchasing_spec.rb +24 -24
- data/spec/integration/release_spec.rb +34 -34
- data/spec/integration/sevendigital_spec.yml +4 -4
- data/spec/integration/track_spec.rb +38 -23
- data/spec/integration/user_spec.rb +22 -22
- data/spec/management/artist_manager_spec.rb +172 -172
- data/spec/management/basket_manager_spec.rb +77 -77
- data/spec/management/country_manager_spec.rb +34 -34
- data/spec/management/list_manager_spec.rb +26 -26
- data/spec/management/oauth_manager_spec.rb +72 -72
- data/spec/management/release_manager_spec.rb +200 -200
- data/spec/management/tag_manager_spec.rb +34 -34
- data/spec/management/track_manager_spec.rb +111 -107
- data/spec/management/user_card_manager_spec.rb +78 -78
- data/spec/management/user_manager_spec.rb +218 -218
- data/spec/model/api_response_spec.rb +48 -48
- data/spec/model/artist_spec.rb +162 -162
- data/spec/model/basket_spec.rb +62 -62
- data/spec/model/release_spec.rb +133 -133
- data/spec/model/sevendigital_object_spec.rb +73 -73
- data/spec/model/track_spec.rb +146 -144
- data/spec/model/user_spec.rb +181 -181
- data/spec/spec_helper.rb +86 -84
- data/spec/test-xml/methods/artist/browse.xml +21 -21
- data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
- data/spec/test-xml/methods/artist/chart.xml +30 -30
- data/spec/test-xml/methods/artist/details.xml +9 -9
- data/spec/test-xml/methods/artist/releases.xml +544 -544
- data/spec/test-xml/methods/artist/search.xml +18 -18
- data/spec/test-xml/methods/artist/similar.xml +39 -39
- data/spec/test-xml/methods/artist/tags.xml +11 -11
- data/spec/test-xml/methods/artist/toptracks.xml +279 -279
- data/spec/test-xml/methods/basket/additem.xml +23 -23
- data/spec/test-xml/methods/basket/create.xml +10 -10
- data/spec/test-xml/methods/basket/index.xml +23 -23
- data/spec/test-xml/methods/basket/removeitem.xml +10 -10
- data/spec/test-xml/methods/country/resolve.xml +6 -6
- data/spec/test-xml/methods/editorial/list.xml +170 -170
- data/spec/test-xml/methods/oauth/accesstoken.xml +5 -5
- data/spec/test-xml/methods/oauth/requesttoken.xml +5 -5
- data/spec/test-xml/methods/release/bydate.xml +173 -173
- data/spec/test-xml/methods/release/bytag/top.xml +150 -150
- data/spec/test-xml/methods/release/chart.xml +181 -181
- data/spec/test-xml/methods/release/details.xml +48 -48
- data/spec/test-xml/methods/release/recommend.xml +89 -89
- data/spec/test-xml/methods/release/search.xml +194 -194
- data/spec/test-xml/methods/release/tags.xml +27 -27
- data/spec/test-xml/methods/release/tracks.xml +28 -28
- data/spec/test-xml/methods/tag/index.xml +16 -16
- data/spec/test-xml/methods/track/chart.xml +149 -149
- data/spec/test-xml/methods/track/details.xml +30 -30
- data/spec/test-xml/methods/track/search.xml +159 -159
- data/spec/test-xml/methods/user/details.xml +4 -4
- data/spec/test-xml/methods/user/locker.xml +49 -49
- data/spec/test-xml/methods/user/payment/card/add.xml +7 -7
- data/spec/test-xml/methods/user/payment/card/index.xml +7 -7
- data/spec/test-xml/methods/user/purchase/basket.xml +48 -48
- data/spec/test-xml/methods/user/purchase/item.xml +48 -48
- data/spec/test-xml/methods/user/signUp.xml +5 -5
- data/spec/test-xml/objects/artist.xml +7 -7
- data/spec/test-xml/objects/artist_chart_item.xml +7 -7
- data/spec/test-xml/objects/artist_list.xml +22 -22
- data/spec/test-xml/objects/artist_list_empty.xml +4 -4
- data/spec/test-xml/objects/basket.xml +21 -21
- data/spec/test-xml/objects/basket_item.xml +11 -11
- data/spec/test-xml/objects/basket_item_list.xml +25 -25
- data/spec/test-xml/objects/basket_item_list_empty.xml +1 -1
- data/spec/test-xml/objects/download_url.xml +7 -7
- data/spec/test-xml/objects/list.xml +89 -89
- data/spec/test-xml/objects/list_item_list.xml +85 -85
- data/spec/test-xml/objects/list_item_release.xml +13 -13
- data/spec/test-xml/objects/locker.xml +47 -47
- data/spec/test-xml/objects/locker_release.xml +40 -40
- data/spec/test-xml/objects/locker_release_list.xml +87 -87
- data/spec/test-xml/objects/locker_release_list_empty.xml +4 -4
- data/spec/test-xml/objects/locker_release_one_item_list.xml +43 -43
- data/spec/test-xml/objects/locker_track.xml +25 -25
- data/spec/test-xml/objects/locker_track_list.xml +26 -26
- data/spec/test-xml/objects/locker_track_list_empty.xml +2 -2
- data/spec/test-xml/objects/nested_release_list.xml +22 -22
- data/spec/test-xml/objects/oauth_access_token.xml +3 -3
- data/spec/test-xml/objects/oauth_request_token.xml +3 -3
- data/spec/test-xml/objects/price.xml +7 -7
- data/spec/test-xml/objects/release.xml +40 -40
- data/spec/test-xml/objects/release_chart_item.xml +39 -39
- data/spec/test-xml/objects/release_list.xml +18 -18
- data/spec/test-xml/objects/release_list_empty.xml +4 -4
- data/spec/test-xml/objects/response.xml +38 -38
- data/spec/test-xml/objects/tag.xml +4 -4
- data/spec/test-xml/objects/track.xml +34 -33
- data/spec/test-xml/objects/track_chart_item.xml +27 -27
- data/spec/test-xml/objects/user.xml +4 -4
- data/spec/test-xml/objects/user_payment_card.xml +5 -5
- 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
|
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
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|