7digital 0.0.1 → 0.0.2

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 (91) hide show
  1. data/README.rdoc +9 -7
  2. data/lib/sevendigital.rb +54 -53
  3. data/lib/sevendigital/api_operator.rb +33 -30
  4. data/lib/sevendigital/api_operator_cached.rb +23 -23
  5. data/lib/sevendigital/api_request.rb +23 -23
  6. data/lib/sevendigital/client.rb +136 -124
  7. data/lib/sevendigital/default_configuration.yml +2 -2
  8. data/lib/sevendigital/digestion_tract/api_response_digestor.rb +52 -52
  9. data/lib/sevendigital/digestion_tract/artist_digestor.rb +31 -31
  10. data/lib/sevendigital/digestion_tract/chart_item_digestor.rb +27 -27
  11. data/lib/sevendigital/digestion_tract/digestor.rb +66 -66
  12. data/lib/sevendigital/digestion_tract/format_digestor.rb +21 -21
  13. data/lib/sevendigital/digestion_tract/label_digestor.rb +19 -19
  14. data/lib/sevendigital/digestion_tract/pager_digestor.rb +23 -23
  15. data/lib/sevendigital/digestion_tract/price_digestor.rb +24 -24
  16. data/lib/sevendigital/digestion_tract/release_digestor.rb +52 -52
  17. data/lib/sevendigital/digestion_tract/track_digestor.rb +37 -37
  18. data/lib/sevendigital/management/artist_manager.rb +45 -39
  19. data/lib/sevendigital/management/manager.rb +11 -11
  20. data/lib/sevendigital/management/release_manager.rb +57 -50
  21. data/lib/sevendigital/management/track_manager.rb +28 -17
  22. data/lib/sevendigital/model/api_response.rb +24 -12
  23. data/lib/sevendigital/model/artist.rb +46 -36
  24. data/lib/sevendigital/model/chart_item.rb +9 -9
  25. data/lib/sevendigital/model/format.rb +9 -9
  26. data/lib/sevendigital/model/label.rb +9 -9
  27. data/lib/sevendigital/model/price.rb +11 -11
  28. data/lib/sevendigital/model/release.rb +33 -33
  29. data/lib/sevendigital/model/sevendigital_error.rb +3 -3
  30. data/lib/sevendigital/model/sevendigital_object.rb +51 -51
  31. data/lib/sevendigital/model/track.rb +28 -7
  32. data/lib/sevendigital/pager.rb +16 -16
  33. data/lib/sevendigital/peachy_patch.rb +19 -0
  34. data/lib/sevendigital/proxy_police.rb +23 -23
  35. data/spec/api_operator_cached_spec.rb +47 -46
  36. data/spec/api_operator_spec.rb +114 -107
  37. data/spec/api_request_spec.rb +26 -27
  38. data/spec/client_spec.rb +75 -45
  39. data/spec/data/config/sevendigital.yml +5 -5
  40. data/spec/data/configuration_env_override.yml +5 -5
  41. data/spec/digestion_tract/api_response_digestor_spec.rb +78 -74
  42. data/spec/digestion_tract/artist_digestor_spec.rb +81 -82
  43. data/spec/digestion_tract/chart_digestor_spec.rb +52 -53
  44. data/spec/digestion_tract/format_digestor_spec.rb +38 -39
  45. data/spec/digestion_tract/label_digestor_spec.rb +33 -34
  46. data/spec/digestion_tract/pager_digestor_spec.rb +50 -51
  47. data/spec/digestion_tract/price_digestor_spec.rb +57 -57
  48. data/spec/digestion_tract/release_digestor_spec.rb +101 -102
  49. data/spec/digestion_tract/track_digestor_spec.rb +104 -106
  50. data/spec/management/artist_manager_spec.rb +128 -107
  51. data/spec/management/release_manager_spec.rb +222 -178
  52. data/spec/management/track_manager_spec.rb +88 -52
  53. data/spec/model/api_response_spec.rb +44 -31
  54. data/spec/model/artist_spec.rb +166 -121
  55. data/spec/model/release_spec.rb +109 -110
  56. data/spec/model/track_spec.rb +140 -0
  57. data/spec/pager_spec.rb +7 -8
  58. data/spec/peachy_spec_helper_patch.rb +7 -0
  59. data/spec/proxy_police_spec.rb +47 -48
  60. data/spec/spec_helper.rb +52 -48
  61. data/spec/test-xml/methods/artist/byTag/top.xml +50 -50
  62. data/spec/test-xml/methods/artist/details.xml +9 -9
  63. data/spec/test-xml/methods/artist/releases.xml +544 -544
  64. data/spec/test-xml/methods/artist/search.xml +19 -0
  65. data/spec/test-xml/methods/artist/similar.xml +39 -39
  66. data/spec/test-xml/methods/artist/toptracks.xml +279 -279
  67. data/spec/test-xml/methods/release/bydate.xml +173 -173
  68. data/spec/test-xml/methods/release/bytag/top.xml +150 -150
  69. data/spec/test-xml/methods/release/chart.xml +181 -181
  70. data/spec/test-xml/methods/release/details.xml +48 -48
  71. data/spec/test-xml/methods/release/recommend.xml +89 -89
  72. data/spec/test-xml/methods/release/search.xml +195 -0
  73. data/spec/test-xml/methods/release/tracks.xml +28 -28
  74. data/spec/test-xml/methods/track/chart.xml +149 -149
  75. data/spec/test-xml/methods/track/details.xml +30 -30
  76. data/spec/test-xml/methods/track/search.xml +160 -0
  77. data/spec/test-xml/objects/artist.xml +6 -6
  78. data/spec/test-xml/objects/artist_chart_item.xml +7 -7
  79. data/spec/test-xml/objects/artist_list.xml +22 -22
  80. data/spec/test-xml/objects/artist_list_empty.xml +4 -4
  81. data/spec/test-xml/objects/price.xml +7 -7
  82. data/spec/test-xml/objects/release.xml +40 -40
  83. data/spec/test-xml/objects/release_chart_item.xml +39 -34
  84. data/spec/test-xml/objects/release_list.xml +18 -18
  85. data/spec/test-xml/objects/release_list_empty.xml +4 -4
  86. data/spec/test-xml/objects/response.xml +39 -0
  87. data/spec/test-xml/objects/track.xml +33 -33
  88. data/spec/test-xml/objects/track_chart_item.xml +27 -27
  89. metadata +10 -5
  90. data/lib/peachy_patchy.rb +0 -14
  91. 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
- end
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
- end
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, :track_number,
5
- :duration, :explicit_content, :isrc, :release, :url, :price
6
-
7
- end
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
@@ -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