7digital 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +9 -7
- data/lib/sevendigital.rb +54 -53
- data/lib/sevendigital/api_operator.rb +33 -30
- data/lib/sevendigital/api_operator_cached.rb +23 -23
- data/lib/sevendigital/api_request.rb +23 -23
- data/lib/sevendigital/client.rb +136 -124
- data/lib/sevendigital/default_configuration.yml +2 -2
- data/lib/sevendigital/digestion_tract/api_response_digestor.rb +52 -52
- data/lib/sevendigital/digestion_tract/artist_digestor.rb +31 -31
- data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +27 -27
- data/lib/sevendigital/digestion_tract/digestor.rb +66 -66
- data/lib/sevendigital/digestion_tract/format_digestor.rb +21 -21
- data/lib/sevendigital/digestion_tract/label_digestor.rb +19 -19
- data/lib/sevendigital/digestion_tract/pager_digestor.rb +23 -23
- data/lib/sevendigital/digestion_tract/price_digestor.rb +24 -24
- data/lib/sevendigital/digestion_tract/release_digestor.rb +52 -52
- data/lib/sevendigital/digestion_tract/track_digestor.rb +37 -37
- data/lib/sevendigital/management/artist_manager.rb +45 -39
- data/lib/sevendigital/management/manager.rb +11 -11
- data/lib/sevendigital/management/release_manager.rb +57 -50
- data/lib/sevendigital/management/track_manager.rb +28 -17
- data/lib/sevendigital/model/api_response.rb +24 -12
- data/lib/sevendigital/model/artist.rb +46 -36
- data/lib/sevendigital/model/chart_item.rb +9 -9
- data/lib/sevendigital/model/format.rb +9 -9
- data/lib/sevendigital/model/label.rb +9 -9
- data/lib/sevendigital/model/price.rb +11 -11
- data/lib/sevendigital/model/release.rb +33 -33
- data/lib/sevendigital/model/sevendigital_error.rb +3 -3
- data/lib/sevendigital/model/sevendigital_object.rb +51 -51
- data/lib/sevendigital/model/track.rb +28 -7
- data/lib/sevendigital/pager.rb +16 -16
- data/lib/sevendigital/peachy_patch.rb +19 -0
- data/lib/sevendigital/proxy_police.rb +23 -23
- data/spec/api_operator_cached_spec.rb +47 -46
- data/spec/api_operator_spec.rb +114 -107
- data/spec/api_request_spec.rb +26 -27
- data/spec/client_spec.rb +75 -45
- data/spec/data/config/sevendigital.yml +5 -5
- data/spec/data/configuration_env_override.yml +5 -5
- data/spec/digestion_tract/api_response_digestor_spec.rb +78 -74
- data/spec/digestion_tract/artist_digestor_spec.rb +81 -82
- data/spec/digestion_tract/chart_digestor_spec.rb +52 -53
- data/spec/digestion_tract/format_digestor_spec.rb +38 -39
- data/spec/digestion_tract/label_digestor_spec.rb +33 -34
- data/spec/digestion_tract/pager_digestor_spec.rb +50 -51
- data/spec/digestion_tract/price_digestor_spec.rb +57 -57
- data/spec/digestion_tract/release_digestor_spec.rb +101 -102
- data/spec/digestion_tract/track_digestor_spec.rb +104 -106
- data/spec/management/artist_manager_spec.rb +128 -107
- data/spec/management/release_manager_spec.rb +222 -178
- data/spec/management/track_manager_spec.rb +88 -52
- data/spec/model/api_response_spec.rb +44 -31
- data/spec/model/artist_spec.rb +166 -121
- data/spec/model/release_spec.rb +109 -110
- data/spec/model/track_spec.rb +140 -0
- data/spec/pager_spec.rb +7 -8
- data/spec/peachy_spec_helper_patch.rb +7 -0
- data/spec/proxy_police_spec.rb +47 -48
- data/spec/spec_helper.rb +52 -48
- data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
- 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 +19 -0
- data/spec/test-xml/methods/artist/similar.xml +39 -39
- data/spec/test-xml/methods/artist/toptracks.xml +279 -279
- 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 +195 -0
- data/spec/test-xml/methods/release/tracks.xml +28 -28
- 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 +160 -0
- data/spec/test-xml/objects/artist.xml +6 -6
- 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/price.xml +7 -7
- data/spec/test-xml/objects/release.xml +40 -40
- data/spec/test-xml/objects/release_chart_item.xml +39 -34
- 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 +39 -0
- data/spec/test-xml/objects/track.xml +33 -33
- data/spec/test-xml/objects/track_chart_item.xml +27 -27
- metadata +10 -5
- data/lib/peachy_patchy.rb +0 -14
- data/lib/sevendigital/version.rb +0 -3
@@ -1,13 +1,25 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
class ApiResponse
|
4
|
-
|
5
|
-
attr_accessor :error_code, :error_message, :content
|
6
|
-
|
7
|
-
def ok?
|
8
|
-
return (@error_code == 0 && !@content.nil?)
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
class ApiResponse
|
4
|
+
|
5
|
+
attr_accessor :error_code, :error_message, :content
|
6
|
+
|
7
|
+
def ok?
|
8
|
+
return (@error_code == 0 && !@content.nil?)
|
9
|
+
end
|
10
|
+
|
11
|
+
def _dump(depth)
|
12
|
+
Marshal.dump([@error_code, @error_message, @content.to_s])
|
13
|
+
end
|
14
|
+
|
15
|
+
def self._load(properties)
|
16
|
+
response = ApiResponse.new
|
17
|
+
response.error_code, response.error_message, content_xml = Marshal.load(properties)
|
18
|
+
response.content = Peachy::Proxy.new(content_xml).response
|
19
|
+
response
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
24
|
+
|
13
25
|
end
|
@@ -1,37 +1,47 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
class Artist < SevendigitalObject
|
4
|
-
|
5
|
-
attr_accessor :id, :name, :appears_as
|
6
|
-
|
7
|
-
sevendigital_basic_property :sort_name, :image, :url
|
8
|
-
|
9
|
-
def get_details(options={})
|
10
|
-
artist_with_details = @api_client.artist.get_details(@id, options)
|
11
|
-
copy_basic_properties_from(artist_with_details)
|
12
|
-
end
|
13
|
-
|
14
|
-
sevendigital_extended_property :releases
|
15
|
-
sevendigital_extended_property :top_tracks
|
16
|
-
sevendigital_extended_property :similar
|
17
|
-
|
18
|
-
def get_releases(options={})
|
19
|
-
@releases = @api_client.artist.get_releases(@id, options).collect do |release|
|
20
|
-
release.artist = self
|
21
|
-
release
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_top_tracks(options={})
|
26
|
-
@tracks = @api_client.artist.get_top_tracks(@id, options).collect do |track|
|
27
|
-
track.artist = self
|
28
|
-
track
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def get_similar(options={})
|
33
|
-
@similar = @api_client.artist.get_similar(@id, options)
|
34
|
-
end
|
35
|
-
|
36
|
-
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
class Artist < SevendigitalObject
|
4
|
+
|
5
|
+
attr_accessor :id, :name, :appears_as
|
6
|
+
|
7
|
+
sevendigital_basic_property :sort_name, :image, :url
|
8
|
+
|
9
|
+
def get_details(options={})
|
10
|
+
artist_with_details = @api_client.artist.get_details(@id, options)
|
11
|
+
copy_basic_properties_from(artist_with_details)
|
12
|
+
end
|
13
|
+
|
14
|
+
sevendigital_extended_property :releases
|
15
|
+
sevendigital_extended_property :top_tracks
|
16
|
+
sevendigital_extended_property :similar
|
17
|
+
|
18
|
+
def get_releases(options={})
|
19
|
+
@releases = @api_client.artist.get_releases(@id, options).collect do |release|
|
20
|
+
release.artist = self
|
21
|
+
release
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_top_tracks(options={})
|
26
|
+
@tracks = @api_client.artist.get_top_tracks(@id, options).collect do |track|
|
27
|
+
track.artist = self
|
28
|
+
track
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_similar(options={})
|
33
|
+
@similar = @api_client.artist.get_similar(@id, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def various?
|
37
|
+
joined_names = "#{name} #{appears_as}".downcase
|
38
|
+
|
39
|
+
various_variations = ["vario", "v???????????????rio", "v.a", "vaious", "varios" "vaious", "varoius", "variuos", \
|
40
|
+
"soundtrack", "karaoke", "original cast", "diverse artist"]
|
41
|
+
various_variations.each{|various_variation| return true if joined_names.include?(various_variation)}
|
42
|
+
return false
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
end
|
37
47
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
class ChartItem < SevendigitalObject
|
4
|
-
|
5
|
-
attr_accessor :position, :change, :item
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
class ChartItem < SevendigitalObject
|
4
|
+
|
5
|
+
attr_accessor :position, :change, :item
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require "peachy"
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
class Format
|
6
|
-
attr_accessor :id, :file_format, :bit_rate, :drm_free
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
1
|
+
require "peachy"
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
class Format
|
6
|
+
attr_accessor :id, :file_format, :bit_rate, :drm_free
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require "peachy"
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
class Label
|
6
|
-
attr_accessor :id, :name
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
1
|
+
require "peachy"
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
class Label
|
6
|
+
attr_accessor :id, :name
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require "peachy"
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
class Price
|
6
|
-
|
7
|
-
attr_accessor :currency_code, :currency_symbol, :value, :formatted_price, :rrp, :formatted_rrp, :on_sale
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
1
|
+
require "peachy"
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
class Price
|
6
|
+
|
7
|
+
attr_accessor :currency_code, :currency_symbol, :value, :formatted_price, :rrp, :formatted_rrp, :on_sale
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
require "peachy"
|
2
|
-
require "will_paginate"
|
3
|
-
|
4
|
-
module Sevendigital
|
5
|
-
|
6
|
-
class Release < SevendigitalObject
|
7
|
-
|
8
|
-
attr_accessor :id, :title
|
9
|
-
|
10
|
-
sevendigital_basic_property :version, :type, :artist, :image, :url, :release_date,
|
11
|
-
:added_date, :barcode, :year, :explicit_content, :formats, :label, :price
|
12
|
-
|
13
|
-
sevendigital_extended_property :tracks
|
14
|
-
sevendigital_extended_property :recommendations
|
15
|
-
|
16
|
-
def get_details(options={})
|
17
|
-
release_with_details = @api_client.release.get_details(@id, options)
|
18
|
-
copy_basic_properties_from(release_with_details)
|
19
|
-
end
|
20
|
-
|
21
|
-
def get_tracks(options={})
|
22
|
-
@tracks = @api_client.release.get_tracks(@id, options).collect do |track|
|
23
|
-
track.release = self
|
24
|
-
track
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def get_recommendations(options={})
|
29
|
-
@recommendations = @api_client.release.get_recommendations(@id, options)
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
1
|
+
require "peachy"
|
2
|
+
require "will_paginate"
|
3
|
+
|
4
|
+
module Sevendigital
|
5
|
+
|
6
|
+
class Release < SevendigitalObject
|
7
|
+
|
8
|
+
attr_accessor :id, :title
|
9
|
+
|
10
|
+
sevendigital_basic_property :version, :type, :artist, :image, :url, :release_date,
|
11
|
+
:added_date, :barcode, :year, :explicit_content, :formats, :label, :price
|
12
|
+
|
13
|
+
sevendigital_extended_property :tracks
|
14
|
+
sevendigital_extended_property :recommendations
|
15
|
+
|
16
|
+
def get_details(options={})
|
17
|
+
release_with_details = @api_client.release.get_details(@id, options)
|
18
|
+
copy_basic_properties_from(release_with_details)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_tracks(options={})
|
22
|
+
@tracks = @api_client.release.get_tracks(@id, options).collect do |track|
|
23
|
+
track.release = self
|
24
|
+
track
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_recommendations(options={})
|
29
|
+
@recommendations = @api_client.release.get_recommendations(@id, options)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
34
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
class SevendigitalError < StandardError; end
|
3
|
-
end
|
1
|
+
module Sevendigital
|
2
|
+
class SevendigitalError < StandardError; end
|
3
|
+
end
|
@@ -1,51 +1,51 @@
|
|
1
|
-
class Class
|
2
|
-
|
3
|
-
def sevendigital_basic_property(*properties)
|
4
|
-
@basic_properties = []
|
5
|
-
properties.each do |property|
|
6
|
-
@basic_properties << "@#{property}".to_sym
|
7
|
-
sevendigital_extended_property property, :get_details
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def sevendigital_extended_property(accessor, get_method = nil)
|
12
|
-
|
13
|
-
get_method ||= "get_#{accessor.to_s}".to_sym
|
14
|
-
demand_method = "demand_#{accessor.to_s}".to_sym
|
15
|
-
|
16
|
-
define_method(demand_method) do |*options|
|
17
|
-
if instance_variable_get("@#{accessor}") == nil then
|
18
|
-
value = send(get_method, *options)
|
19
|
-
instance_variable_set("@#{accessor}", value) if get_method != :get_details
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
define_method("#{accessor}") do |*options|
|
24
|
-
send(demand_method, *options) if instance_variable_get("@#{accessor}").nil? && @api_client.configuration.lazy_load?
|
25
|
-
instance_variable_get("@#{accessor}")
|
26
|
-
end
|
27
|
-
|
28
|
-
define_method("#{accessor}=") do |val|
|
29
|
-
instance_variable_set("@#{accessor}",val)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
module Sevendigital
|
35
|
-
|
36
|
-
class SevendigitalObject
|
37
|
-
|
38
|
-
def initialize(api_client)
|
39
|
-
@api_client = api_client
|
40
|
-
end
|
41
|
-
|
42
|
-
def copy_basic_properties_from(other_object)
|
43
|
-
self.class.instance_variable_get(:@basic_properties).each do |property|
|
44
|
-
instance_variable_set(property, other_object.instance_variable_get(property))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
1
|
+
class Class
|
2
|
+
|
3
|
+
def sevendigital_basic_property(*properties)
|
4
|
+
@basic_properties = []
|
5
|
+
properties.each do |property|
|
6
|
+
@basic_properties << "@#{property}".to_sym
|
7
|
+
sevendigital_extended_property property, :get_details
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def sevendigital_extended_property(accessor, get_method = nil)
|
12
|
+
|
13
|
+
get_method ||= "get_#{accessor.to_s}".to_sym
|
14
|
+
demand_method = "demand_#{accessor.to_s}".to_sym
|
15
|
+
|
16
|
+
define_method(demand_method) do |*options|
|
17
|
+
if instance_variable_get("@#{accessor}") == nil then
|
18
|
+
value = send(get_method, *options)
|
19
|
+
instance_variable_set("@#{accessor}", value) if get_method != :get_details
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
define_method("#{accessor}") do |*options|
|
24
|
+
send(demand_method, *options) if instance_variable_get("@#{accessor}").nil? && @api_client.configuration.lazy_load?
|
25
|
+
instance_variable_get("@#{accessor}")
|
26
|
+
end
|
27
|
+
|
28
|
+
define_method("#{accessor}=") do |val|
|
29
|
+
instance_variable_set("@#{accessor}",val)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module Sevendigital
|
35
|
+
|
36
|
+
class SevendigitalObject
|
37
|
+
|
38
|
+
def initialize(api_client)
|
39
|
+
@api_client = api_client
|
40
|
+
end
|
41
|
+
|
42
|
+
def copy_basic_properties_from(other_object)
|
43
|
+
self.class.instance_variable_get(:@basic_properties).each do |property|
|
44
|
+
instance_variable_set(property, other_object.instance_variable_get(property))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -1,8 +1,29 @@
|
|
1
|
-
module Sevendigital
|
2
|
-
|
3
|
-
class Track < SevendigitalObject
|
4
|
-
attr_accessor :id, :title, :version, :artist
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module Sevendigital
|
2
|
+
|
3
|
+
class Track < SevendigitalObject
|
4
|
+
attr_accessor :id, :title, :version, :artist
|
5
|
+
|
6
|
+
sevendigital_basic_property :track_number,:duration, :explicit_content, :isrc, :release, :url, :price
|
7
|
+
|
8
|
+
def get_details(options={})
|
9
|
+
track_with_details = @api_client.track.get_details(@id, options)
|
10
|
+
copy_basic_properties_from(track_with_details)
|
11
|
+
end
|
12
|
+
|
13
|
+
def short_title
|
14
|
+
# return title.gsub(/\s+[\(\[](album|lp|single|short|edit|radio)\s+version[\)\]]/ , "")
|
15
|
+
return title.gsub(/\s+\(.*\s?(version|mix|remix|edit|edition|live|feat|explicit|original)\s?.*\)/i, "")
|
16
|
+
end
|
17
|
+
|
18
|
+
def alternate_version_of?(another_track)
|
19
|
+
return another_track && short_title.downcase == another_track.short_title.downcase \
|
20
|
+
&& another_track.artist && artist.name.downcase == another_track.artist.name.downcase
|
21
|
+
end
|
22
|
+
|
23
|
+
def preview_url(options={})
|
24
|
+
#url = "http://previews.7digital.com/clips/34/#{id}.clip.mp3"
|
25
|
+
@api_client.track.build_preview_url(@id, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
8
29
|
end
|
data/lib/sevendigital/pager.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
require "will_paginate/collection"
|
2
|
-
|
3
|
-
module Sevendigital
|
4
|
-
|
5
|
-
class Pager
|
6
|
-
attr_accessor :page, :page_size, :total_items
|
7
|
-
|
8
|
-
def paginate_list(list)
|
9
|
-
paged_list = WillPaginate::Collection.create(@page, @page_size, @total_items) do |pager|
|
10
|
-
pager.replace(list)
|
11
|
-
end
|
12
|
-
return paged_list
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
1
|
+
require "will_paginate/collection"
|
2
|
+
|
3
|
+
module Sevendigital
|
4
|
+
|
5
|
+
class Pager
|
6
|
+
attr_accessor :page, :page_size, :total_items
|
7
|
+
|
8
|
+
def paginate_list(list)
|
9
|
+
paged_list = WillPaginate::Collection.create(@page, @page_size, @total_items) do |pager|
|
10
|
+
pager.replace(list)
|
11
|
+
end
|
12
|
+
return paged_list
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
17
|
end
|