bassnode-discogs 0.3.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.
- data/.gitignore +5 -0
- data/COPYING +619 -0
- data/LICENSE +5 -0
- data/README.markdown +75 -0
- data/Rakefile +27 -0
- data/bassnode-discogs.gemspec +18 -0
- data/lib/discogs.rb +21 -0
- data/lib/wrapper/resource.rb +79 -0
- data/lib/wrapper/resource_mappings.rb +84 -0
- data/lib/wrapper/resources/artist.rb +37 -0
- data/lib/wrapper/resources/artist_release.rb +17 -0
- data/lib/wrapper/resources/format.rb +11 -0
- data/lib/wrapper/resources/generic_list.rb +29 -0
- data/lib/wrapper/resources/image.rb +11 -0
- data/lib/wrapper/resources/label.rb +16 -0
- data/lib/wrapper/resources/label_release.rb +17 -0
- data/lib/wrapper/resources/release.rb +22 -0
- data/lib/wrapper/resources/release_artist.rb +18 -0
- data/lib/wrapper/resources/release_label.rb +10 -0
- data/lib/wrapper/resources/search.rb +61 -0
- data/lib/wrapper/resources/search_result.rb +16 -0
- data/lib/wrapper/resources/track.rb +15 -0
- data/lib/wrapper/wrapper.rb +109 -0
- data/spec/resource_spec.rb +27 -0
- data/spec/resources/artist_release_spec.rb +59 -0
- data/spec/resources/artist_spec.rb +15 -0
- data/spec/resources/format_spec.rb +41 -0
- data/spec/resources/generic_list_spec.rb +66 -0
- data/spec/resources/image_spec.rb +43 -0
- data/spec/resources/label_release_spec.rb +55 -0
- data/spec/resources/label_spec.rb +15 -0
- data/spec/resources/release_artist_spec.rb +43 -0
- data/spec/resources/release_label_spec.rb +31 -0
- data/spec/resources/release_spec.rb +15 -0
- data/spec/resources/search_result_spec.rb +47 -0
- data/spec/resources/search_spec.rb +15 -0
- data/spec/resources/track_spec.rb +56 -0
- data/spec/samples/valid_artist.xml +76 -0
- data/spec/samples/valid_artist_release.xml +8 -0
- data/spec/samples/valid_description_list.xml +5 -0
- data/spec/samples/valid_format.xml +7 -0
- data/spec/samples/valid_genre_list.xml +5 -0
- data/spec/samples/valid_image.xml +1 -0
- data/spec/samples/valid_label.xml +34 -0
- data/spec/samples/valid_label_release.xml +8 -0
- data/spec/samples/valid_release.xml +99 -0
- data/spec/samples/valid_release_artist.xml +8 -0
- data/spec/samples/valid_release_label.xml +1 -0
- data/spec/samples/valid_search_result.xml +6 -0
- data/spec/samples/valid_search_results_1.xml +142 -0
- data/spec/samples/valid_search_results_2.xml +206 -0
- data/spec/samples/valid_track.xml +16 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/wrapper_methods/get_artist_spec.rb +109 -0
- data/spec/wrapper_methods/get_label_spec.rb +89 -0
- data/spec/wrapper_methods/get_release_spec.rb +123 -0
- data/spec/wrapper_methods/search_spec.rb +330 -0
- data/spec/wrapper_spec.rb +180 -0
- metadata +125 -0
@@ -0,0 +1,109 @@
|
|
1
|
+
# Core API wrapper class.
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
require 'net/http'
|
5
|
+
require 'rexml/document'
|
6
|
+
require 'zlib'
|
7
|
+
require 'stringio'
|
8
|
+
|
9
|
+
require File.dirname(__FILE__) + "/resource"
|
10
|
+
|
11
|
+
class Discogs::Wrapper
|
12
|
+
|
13
|
+
@@root_host = "http://www.discogs.com"
|
14
|
+
|
15
|
+
attr_reader :api_key
|
16
|
+
|
17
|
+
def initialize(api_key=nil)
|
18
|
+
@api_key = api_key
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_release(id)
|
22
|
+
query_and_build "release/#{id}", Discogs::Release
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_artist(name)
|
26
|
+
query_and_build "artist/#{name}", Discogs::Artist
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_label(name)
|
30
|
+
query_and_build "label/#{name}", Discogs::Label
|
31
|
+
end
|
32
|
+
|
33
|
+
def search(term, options={})
|
34
|
+
opts = { :type => :all, :page => 1 }.merge(options)
|
35
|
+
params = { :q => term, :type => opts[:type], :page => opts[:page] }
|
36
|
+
|
37
|
+
data = query_api("search", params)
|
38
|
+
resource = Discogs::Search.new(data)
|
39
|
+
|
40
|
+
resource.build_with_resp!
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def query_and_build(path, klass)
|
46
|
+
data = query_api(path)
|
47
|
+
resource = klass.send(:new, data)
|
48
|
+
resource.build!
|
49
|
+
end
|
50
|
+
|
51
|
+
# Queries the API and handles the response.
|
52
|
+
def query_api(path, params={})
|
53
|
+
response = make_request(path, params)
|
54
|
+
|
55
|
+
raise_unknown_resource(path) if response.code == "404"
|
56
|
+
raise_invalid_api_key if response.code == "400"
|
57
|
+
raise_internal_server_error if response.code == "500"
|
58
|
+
|
59
|
+
# Unzip the response data, or just read it in directly
|
60
|
+
# if the API responds without gzipping.
|
61
|
+
response_body = nil
|
62
|
+
begin
|
63
|
+
inflated_data = Zlib::GzipReader.new(StringIO.new(response.body))
|
64
|
+
response_body = inflated_data.read
|
65
|
+
rescue Zlib::GzipFile::Error
|
66
|
+
response_body = response.body
|
67
|
+
end
|
68
|
+
|
69
|
+
response_body
|
70
|
+
end
|
71
|
+
|
72
|
+
# Generates a HTTP request and returns the response.
|
73
|
+
def make_request(path, params={})
|
74
|
+
uri = build_uri(path, params)
|
75
|
+
|
76
|
+
request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
|
77
|
+
request.add_field("Accept-Encoding", "gzip,deflate")
|
78
|
+
|
79
|
+
Net::HTTP.new(uri.host).start do |http|
|
80
|
+
http.request(request)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def build_uri(path, params={})
|
85
|
+
parameters = { :f => "xml", :api_key => @api_key }.merge(params)
|
86
|
+
querystring = "?" + parameters.map { |key, value| "#{key}=#{value}" }.sort.join("&")
|
87
|
+
|
88
|
+
URI.parse(File.join(@@root_host, sanitize_path(path, querystring)))
|
89
|
+
end
|
90
|
+
|
91
|
+
def sanitize_path(*path_parts)
|
92
|
+
clean_path = path_parts.map { |part| part.gsub(/\s/, '+') }
|
93
|
+
|
94
|
+
clean_path.join
|
95
|
+
end
|
96
|
+
|
97
|
+
def raise_invalid_api_key
|
98
|
+
raise Discogs::InvalidAPIKey, "Invalid API key: #{@api_key}"
|
99
|
+
end
|
100
|
+
|
101
|
+
def raise_unknown_resource(path='')
|
102
|
+
raise Discogs::UnknownResource, "Unknown Discogs resource: #{path}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def raise_internal_server_error
|
106
|
+
raise Discogs::InternalServerError, "The remote server cannot complete the request"
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Resource do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@resource = Discogs::Resource.new(sample_valid_binary)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should have a default element name" do
|
10
|
+
Discogs::Resource.element_names.should == [ :resource ]
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have a default plural element name" do
|
14
|
+
Discogs::Resource.plural_element_names.should == [ :resources ]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have an original_content method" do
|
18
|
+
@resource.original_content.should == sample_valid_binary
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to build the content"
|
22
|
+
|
23
|
+
it "should remove the <resp> element by default"
|
24
|
+
|
25
|
+
it "should leave the <resp> element if told to"
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Artist::Release do
|
4
|
+
|
5
|
+
it "should map to release" do
|
6
|
+
Discogs::Artist::Release.element_names.should == [ :release ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural releases" do
|
10
|
+
Discogs::Artist::Release.plural_element_names.should == [ :releases ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for artist-release information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_artist_release.xml"))
|
17
|
+
@artist_release = Discogs::Artist::Release.new(data)
|
18
|
+
@artist_release.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a ID attribute" do
|
22
|
+
@artist_release.id.should == "999333"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a status attribute" do
|
26
|
+
@artist_release.status.should == "Accepted"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a type attribute" do
|
30
|
+
@artist_release.type.should == "Main"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a title attribute" do
|
34
|
+
@artist_release.title.should == "Temple of the Underworld"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a format attribute" do
|
38
|
+
@artist_release.format.should == "LP"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should have a label attribute" do
|
42
|
+
@artist_release.label.should == "Monitor Records"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should have a year attribute" do
|
46
|
+
@artist_release.year.should == "1992"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should have a trackinfo attribute" do
|
50
|
+
@artist_release.trackinfo.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should have an artist attribute" do
|
54
|
+
@artist_release.artist.should == "ArtIst"
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Artist do
|
4
|
+
|
5
|
+
it "should map to empty array" do
|
6
|
+
Discogs::Artist.element_names.should == []
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map plural to empty array" do
|
10
|
+
Discogs::Artist.plural_element_names.should == []
|
11
|
+
end
|
12
|
+
|
13
|
+
## See ./spec/wrapper_methods/get_artist_spec.rb for extensive tests of this class.
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Release::Format do
|
4
|
+
|
5
|
+
it "should map to format" do
|
6
|
+
Discogs::Release::Format.element_names.should == [ :format ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural formats" do
|
10
|
+
Discogs::Release::Format.plural_element_names.should == [ :formats ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for format information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_format.xml"))
|
17
|
+
@format = Discogs::Release::Format.new(data)
|
18
|
+
@format.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a name attribute" do
|
22
|
+
@format.name.should == "CD"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a quantity attribute" do
|
26
|
+
@format.qty.should == "1"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have an array of descriptions" do
|
30
|
+
@format.descriptions.should be_instance_of(Array)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have built each description" do
|
34
|
+
@format.descriptions[0].should == "Album"
|
35
|
+
@format.descriptions[1].should == "Digipak"
|
36
|
+
@format.descriptions[9].should be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::GenericList do
|
4
|
+
|
5
|
+
it "should map to all generic lists" do
|
6
|
+
Discogs::GenericList.element_names.should be_instance_of(Array)
|
7
|
+
|
8
|
+
Discogs::GenericList.element_names.include?(:aliases).should be_true
|
9
|
+
Discogs::GenericList.element_names.include?(:urls).should be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should map to plural lists" do
|
13
|
+
Discogs::GenericList.plural_element_names.should == [ :lists ]
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "when asking for description information" do
|
17
|
+
|
18
|
+
before do
|
19
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_description_list.xml"))
|
20
|
+
@descriptions = Discogs::GenericList.new(data)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return an array on build" do
|
24
|
+
@descriptions.build!.should be_instance_of(Array)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have access to the items after build" do
|
28
|
+
@descriptions.build!
|
29
|
+
|
30
|
+
@descriptions[0].should == "Album"
|
31
|
+
@descriptions[1].should == "LP"
|
32
|
+
@descriptions[2].should == "33 rpm"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return nil on unknown index" do
|
36
|
+
@descriptions[9].should be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "when asking for genre information" do
|
42
|
+
|
43
|
+
before do
|
44
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_genre_list.xml"))
|
45
|
+
@genres = Discogs::GenericList.new(data)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return an array on build" do
|
49
|
+
@genres.build!.should be_instance_of(Array)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have access to the items after build" do
|
53
|
+
@genres.build!
|
54
|
+
|
55
|
+
@genres[0].should == "Heavy Metal"
|
56
|
+
@genres[1].should == "Neofolk"
|
57
|
+
@genres[2].should == "Medieval folk"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return nil on unknown index" do
|
61
|
+
@genres[9].should be_nil
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Image do
|
4
|
+
|
5
|
+
it "should map to image" do
|
6
|
+
Discogs::Image.element_names.should == [ :image ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural images" do
|
10
|
+
Discogs::Image.plural_element_names.should == [ :images ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for image information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_image.xml"))
|
17
|
+
@image = Discogs::Image.new(data)
|
18
|
+
@image.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a type attribute" do
|
22
|
+
@image.type.should == "primary"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a width attribute" do
|
26
|
+
@image.width.should == "600"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a height attribute" do
|
30
|
+
@image.height.should == "595"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a uri attribute" do
|
34
|
+
@image.uri.should == "http://www.discogs.com/image/R-666-1222413500.jpeg"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a uri150 attribute" do
|
38
|
+
@image.uri150.should == "http://www.discogs.com/image/R-150-666-1222413500.jpeg"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Label::Release do
|
4
|
+
|
5
|
+
it "should map to release" do
|
6
|
+
Discogs::Label::Release.element_names.should == [ :release ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural releases" do
|
10
|
+
Discogs::Label::Release.plural_element_names.should == [ :releases ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for label-release information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_label_release.xml"))
|
17
|
+
@label_release = Discogs::Label::Release.new(data)
|
18
|
+
@label_release.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a ID attribute" do
|
22
|
+
@label_release.id.should == "116322"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a status attribute" do
|
26
|
+
@label_release.status.should == "Accepted"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a catno attribute" do
|
30
|
+
@label_release.catno.should == "SMB09"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have an artist attribute" do
|
34
|
+
@label_release.artist.should == "Morrior"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a title attribute" do
|
38
|
+
@label_release.title.should == "Death Metal Session"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should have a format attribute" do
|
42
|
+
@label_release.format.should == "12\""
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should have a year attribute" do
|
46
|
+
@label_release.year.should == "1991"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should have a trackinfo attribute" do
|
50
|
+
@label_release.trackinfo.should == "Side A, track 4"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Label do
|
4
|
+
|
5
|
+
it "should map to empty array" do
|
6
|
+
Discogs::Label.element_names.should == []
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map plural to empty array" do
|
10
|
+
Discogs::Label.plural_element_names.should == []
|
11
|
+
end
|
12
|
+
|
13
|
+
## See ./spec/wrapper_methods/get_label_spec.rb for extensive tests of this class.
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Release::Artist do
|
4
|
+
|
5
|
+
it "should map to artist" do
|
6
|
+
Discogs::Release::Artist.element_names.should == [ :artist ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural artists and extraartists" do
|
10
|
+
Discogs::Release::Artist.plural_element_names.should == [ :artists, :extraartists ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for release-artist information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_release_artist.xml"))
|
17
|
+
@release_artist = Discogs::Release::Artist.new(data)
|
18
|
+
@release_artist.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a name attribute" do
|
22
|
+
@release_artist.name.should == "Master's Hammer"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a role attribute" do
|
26
|
+
@release_artist.role.should == "Shrieks"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a join attribute" do
|
30
|
+
@release_artist.join.should == "Relatives"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have an anv attribute" do
|
34
|
+
@release_artist.anv.should == "wtf?"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a tracks attribute" do
|
38
|
+
@release_artist.tracks.should == "1,2,4"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Release::Label do
|
4
|
+
|
5
|
+
it "should map to label" do
|
6
|
+
Discogs::Release::Label.element_names.should == [ :label ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural labels" do
|
10
|
+
Discogs::Release::Label.plural_element_names.should == [ :labels ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for release-label information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_release_label.xml"))
|
17
|
+
@release_label = Discogs::Release::Label.new(data)
|
18
|
+
@release_label.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a name attribute" do
|
22
|
+
@release_label.name.should == "Toxic Diffusion"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a catno attribute" do
|
26
|
+
@release_label.catno.should == "clp89"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Release do
|
4
|
+
|
5
|
+
it "should map to empty array" do
|
6
|
+
Discogs::Release.element_names.should == []
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map plural to empty array" do
|
10
|
+
Discogs::Release.plural_element_names.should == []
|
11
|
+
end
|
12
|
+
|
13
|
+
## See ./spec/wrapper_methods/get_release_spec.rb for extensive tests of this class.
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Search::Result do
|
4
|
+
|
5
|
+
it "should map to result" do
|
6
|
+
Discogs::Search::Result.element_names.should == [ :result ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural exactresults and searchresults" do
|
10
|
+
Discogs::Search::Result.plural_element_names.should == [ :exactresults, :searchresults ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for search result information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_search_result.xml"))
|
17
|
+
@search_result = Discogs::Search::Result.new(data)
|
18
|
+
@search_result.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a number attribute" do
|
22
|
+
@search_result.num.should == "2"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a type attribute" do
|
26
|
+
@search_result.type.should == "artist"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a title attribute" do
|
30
|
+
@search_result.title.should == "Karin Slaughter"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a uri attribute" do
|
34
|
+
@search_result.uri.should == "http://www.discogs.com/artist/Karin+Slaughter"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have a summary attribute" do
|
38
|
+
@search_result.summary.should == "Karin Slaughter Karin Slaughter"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should have a anv attribute" do
|
42
|
+
@search_result.anv.should == "Slaughter"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Search do
|
4
|
+
|
5
|
+
it "should map to empty array" do
|
6
|
+
Discogs::Search.element_names.should == []
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map plural to empty array" do
|
10
|
+
Discogs::Search.plural_element_names.should == []
|
11
|
+
end
|
12
|
+
|
13
|
+
## See ./spec/wrapper_methods/search_spec.rb for extensive tests of this class.
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe Discogs::Release::Track do
|
4
|
+
|
5
|
+
it "should map to track" do
|
6
|
+
Discogs::Release::Track.element_names.should == [ :track ]
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should map to plural tracklist" do
|
10
|
+
Discogs::Release::Track.plural_element_names.should == [ :tracklist ]
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "when asking for track information" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
data = File.read(File.join(File.dirname(__FILE__), "..", "samples", "valid_track.xml"))
|
17
|
+
@track = Discogs::Release::Track.new(data)
|
18
|
+
@track.build!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a title attribute" do
|
22
|
+
@track.title.should == "A dark forest spreads all around"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a duration attribute" do
|
26
|
+
@track.duration.should == "7:31"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a position attribute" do
|
30
|
+
@track.position.should == "2"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have an array of artists" do
|
34
|
+
@track.artists.should be_instance_of(Array)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should have an array of extra artists" do
|
38
|
+
@track.extraartists.should be_instance_of(Array)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should have built each artist" do
|
42
|
+
@track.artists[0].should be_instance_of(Discogs::Release::Track::Artist)
|
43
|
+
|
44
|
+
@track.artists[0].name.should == "Master's Hammer"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should have built each extra artist" do
|
48
|
+
@track.extraartists[0].should be_instance_of(Discogs::Release::Track::Artist)
|
49
|
+
|
50
|
+
@track.extraartists[0].name.should == "Root"
|
51
|
+
@track.extraartists[0].role.should == "Imagery"
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|