discogs 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2008-07-08
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
data/Manifest.txt ADDED
@@ -0,0 +1,27 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/discogs
6
+ lib/discogs.rb
7
+ lib/artist.rb
8
+ lib/base.rb
9
+ lib/contributor.rb
10
+ lib/format.rb
11
+ lib/image.rb
12
+ lib/label.rb
13
+ lib/release.rb
14
+ lib/search.rb
15
+ lib/track.rb
16
+ lib/util.rb
17
+ spec/artist_spec.rb
18
+ spec/base_spec.rb
19
+ spec/fixtures
20
+ spec/fixtures/artist.xml
21
+ spec/fixtures/label.xml
22
+ spec/fixtures/release.xml
23
+ spec/fixtures/search.xml
24
+ spec/label_spec.rb
25
+ spec/release_spec.rb
26
+ spec/search_spec.rb
27
+ spec/spec_helper.rb
data/README.txt ADDED
@@ -0,0 +1,97 @@
1
+ = discog
2
+
3
+ * http://discogs.rubyforge.org
4
+
5
+ == DESCRIPTION:
6
+
7
+ API Wrapper for discogs.org
8
+ http://www.discogs.com/help/api
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * API wrapper for:
13
+ - releases
14
+ - artists
15
+ - labels
16
+ - search
17
+ * with class wrappers for:
18
+ - contributors
19
+ - genres
20
+ - styles
21
+ - images
22
+ - tracks
23
+ - formats
24
+
25
+ And a bin util
26
+
27
+ == SYNOPSIS:
28
+
29
+ d = Discog::Artist.new(ARGV[0])
30
+ puts "
31
+ Artist: #{d.name}
32
+ Members: #{d.members}
33
+ Images: #{d.images}
34
+ URLs: #{d.urls}
35
+ Releases: #{d.releases.map{|r| r.title }}
36
+ "
37
+
38
+ release = Discog::Release.new('188365')
39
+ puts "
40
+ Title: #{release.title}
41
+ Labels: #{release.labels}
42
+ Format: #{release.formats}
43
+ Status: #{release.discog_status}
44
+ Genres: #{release.genres}
45
+ Styles: #{release.styles}
46
+ Country: #{release.country}
47
+ ReleaseDate: #{release.released}
48
+ Tracks #{release.tracks}
49
+ Images: #{release.images}
50
+ Extras: #{release.contributors.join(', ')}
51
+ "
52
+
53
+ label = Discog::Label.new(ARGV[0])
54
+ puts "
55
+ Name: #{label.name}
56
+ Images: #{label.images}
57
+ Contact: #{label.contact_info}
58
+ Profile: #{label.profile}
59
+ URLs: #{label.urls}
60
+ Parent: #{label.parent}
61
+ SubLabels: #{label.sublabels}
62
+ Releases: #{label.releases}
63
+ "
64
+
65
+ == REQUIREMENTS:
66
+
67
+ rubygems
68
+ hpricot
69
+
70
+ == INSTALL:
71
+
72
+ sudo gem install discogs
73
+
74
+ == LICENSE:
75
+
76
+ (The MIT License)
77
+
78
+ Copyright (c) 2008 Josh Stephenson
79
+
80
+ Permission is hereby granted, free of charge, to any person obtaining
81
+ a copy of this software and associated documentation files (the
82
+ 'Software'), to deal in the Software without restriction, including
83
+ without limitation the rights to use, copy, modify, merge, publish,
84
+ distribute, sublicense, and/or sell copies of the Software, and to
85
+ permit persons to whom the Software is furnished to do so, subject to
86
+ the following conditions:
87
+
88
+ The above copyright notice and this permission notice shall be
89
+ included in all copies or substantial portions of the Software.
90
+
91
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
92
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
93
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
94
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
95
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
96
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
97
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'rubygems'
6
+ require 'spec/rake/spectask'
7
+ require 'hoe'
8
+ require './lib/discogs.rb'
9
+
10
+ Hoe.new('discogs', Discogs::VERSION) do |p|
11
+ p.rubyforge_name = 'discogs' # if different than lowercase project name
12
+ p.developer('Josh Stephenson', 'josh@joshstephenson.net')
13
+ end
14
+
15
+ desc "Run all specs in spec directory"
16
+ Spec::Rake::SpecTask.new(:spec) do |t|
17
+ # t.rcov = true
18
+ # t.rcov_opts = ["--output=coverage"]
19
+ t.spec_opts = ["--color"]
20
+ t.spec_files = FileList['spec/*_spec.rb']
21
+ end
22
+
data/bin/discogs ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require File.dirname(__FILE__) + '/../lib/discogs.rb'
5
+ require File.dirname(__FILE__) + '/../lib/util.rb'
6
+
7
+ Discogs::Util.run!
data/lib/artist.rb ADDED
@@ -0,0 +1,47 @@
1
+ module Discogs
2
+ class Artist < Base
3
+
4
+ attr_accessor :name,
5
+ :members,
6
+ :urls,
7
+ :releases,
8
+ :images,
9
+ :realname
10
+
11
+ def name
12
+ @name ||= (parsed/'artist'/'name').first.inner_html
13
+ end
14
+
15
+ def realname
16
+ @realname ||= (parsed/'artist'/'realname').first.inner_html
17
+ end
18
+
19
+ def members
20
+ @members ||= (parsed/'artist'/'members'/'name').collect { |artist| artist.inner_html }
21
+ end
22
+
23
+ def images
24
+ @images ||= (parsed/'artist'/'images'/'image').collect do |image|
25
+ Image.new(image.attributes['url'],
26
+ image.attributes['type'],
27
+ image.attributes['uri150'],
28
+ image.attributes['width'],
29
+ image.attributes['height'])
30
+ end
31
+ end
32
+
33
+ def urls
34
+ @urls ||= (parsed/'artist'/'urls').collect { |url| (url/'url').inner_html }
35
+ end
36
+
37
+ def releases
38
+ @release ||= (parsed/'artist'/'releases'/'release').collect do |release|
39
+ Release.new(api_key, release.attributes['id'])
40
+ end
41
+ end
42
+
43
+ def to_s
44
+ name
45
+ end
46
+ end
47
+ end
data/lib/base.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'rubygems'
2
+ require 'open-uri'
3
+ require 'hpricot'
4
+ require 'zlib'
5
+ require 'cgi'
6
+ require 'yaml'
7
+
8
+ module Discogs
9
+ class Base
10
+ attr_accessor :api_key, :request_type, :request_string
11
+
12
+ DISCOGS_BASE_URL = 'http://www.discogs.com'
13
+
14
+ def initialize(request_string = nil, request_type = :artist)
15
+ @api_key = load_api_key
16
+ @request_string = request_string
17
+ @request_type = request_type.to_s
18
+ end
19
+
20
+ def parsed
21
+ @parsed ||= Hpricot.XML(fetched)
22
+ end
23
+
24
+ def fetched
25
+ @fetched ||= begin
26
+ gz = Zlib::GzipReader.new(open(request_url, 'Accept-encoding' => 'gzip, deflate'))
27
+ fetched = gz.read
28
+ gz.close
29
+ fetched
30
+ end
31
+ end
32
+
33
+ protected
34
+ def request_url
35
+ "#{DISCOGS_BASE_URL}/#{request_type}/#{CGI::escape(request_string)}?f=xml&api_key=#{api_key}"
36
+ end
37
+
38
+ def load_api_key
39
+ begin
40
+ YAML::load(open(config_file))[:api_key]
41
+ rescue Errno::ENOENT
42
+ File.open(config_file, 'w') do |file|
43
+ file.write({:api_key => "CHANGE ME"}.to_yaml)
44
+ puts "Please edit #{config_file}"
45
+ end
46
+ end
47
+ end
48
+
49
+ def home_dir
50
+ ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
51
+ end
52
+
53
+ def config_filename(rails = false)
54
+ rails ? 'discogs.yml' : '.discogs'
55
+ end
56
+
57
+ def config_file
58
+ if defined?(RAILS_ROOT)
59
+ File.join(RAILS_ROOT, 'config', config_filename)
60
+ else
61
+ File.join(home_dir, config_filename)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,13 @@
1
+ module Discogs
2
+ class Contributor
3
+ attr_accessor :name, :role
4
+ def initialize(name, role)
5
+ @name = name
6
+ @role = role
7
+ end
8
+
9
+ def to_s
10
+ name
11
+ end
12
+ end
13
+ end
data/lib/discogs.rb ADDED
@@ -0,0 +1,22 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'rubygems'
3
+ require 'open-uri'
4
+ require 'hpricot'
5
+ require 'zlib'
6
+ require 'cgi'
7
+
8
+ require 'base'
9
+ require 'artist'
10
+ require 'label'
11
+ require 'release'
12
+ require 'format'
13
+ require 'image'
14
+ require 'track'
15
+ require 'contributor'
16
+ require 'search'
17
+
18
+
19
+ module Discogs
20
+ VERSION = '1.0.0'
21
+ API_VERSION = '1.0'
22
+ end
data/lib/format.rb ADDED
@@ -0,0 +1,13 @@
1
+ module Discogs
2
+ class Format
3
+ attr_accessor :name, :qty
4
+ def initialize(name, qty)
5
+ @name = name
6
+ @qty = qty
7
+ end
8
+
9
+ def to_s
10
+ name
11
+ end
12
+ end
13
+ end
data/lib/image.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Discogs
2
+ class Image
3
+
4
+ attr_accessor :uri,
5
+ :type,
6
+ :uri150,
7
+ :width,
8
+ :height
9
+
10
+ def initialize(uri, type, uri150, width, height)
11
+ @uri = uri
12
+ @type = type
13
+ @uri150 = uri150
14
+ @width = width
15
+ @height = height
16
+ end
17
+
18
+ def to_s
19
+ uri
20
+ end
21
+ end
22
+ end
data/lib/label.rb ADDED
@@ -0,0 +1,70 @@
1
+ module Discogs
2
+ class Label < Base
3
+ attr_accessor :name, :images, :contact_info, :profile, :urls, :parent, :sublabels, :releases
4
+
5
+ def initialize(request_string)
6
+ @request_string = request_string
7
+ super(@request_string, 'label')
8
+ end
9
+
10
+ def label
11
+ @label ||= (parsed/'label')
12
+ end
13
+
14
+ def name
15
+ @name ||= (label/'name').inner_html
16
+ end
17
+
18
+ def images
19
+ @images ||= (label/'images'/'image').collect do |image|
20
+ Image.new(image.attributes['url'],
21
+ image.attributes['type'],
22
+ image.attributes['uri150'],
23
+ image.attributes['width'],
24
+ image.attributes['height'])
25
+ end
26
+ end
27
+
28
+ def contact_info
29
+ @contact_info ||= (label/'contactinfo').inner_html
30
+ end
31
+
32
+ def profile
33
+ @profile ||= (label/'profile').inner_html
34
+ end
35
+
36
+ def urls
37
+ @url ||= (label/'urls'/'url').collect { |url | url.inner_html }
38
+ end
39
+
40
+ def parent
41
+ @parent_label ||= begin
42
+ Label.new((label/'parentLabel').inner_html) unless (label/'parentLabel').empty?
43
+ rescue
44
+ end
45
+ end
46
+
47
+ def sublabels
48
+ @sub_labels ||= begin
49
+ (label/'sublabels'/'label').collect do |label|
50
+ label = label.inner_html
51
+ Label.new(label) unless label.empty?
52
+ end
53
+ rescue
54
+ end
55
+ end
56
+
57
+ def releases
58
+ @releases ||= begin
59
+ (label/'releases'/'release').collect do |release|
60
+ Release.new(release.attributes['id']) unless release.attributes['id'].empty?
61
+ end
62
+ rescue
63
+ end
64
+ end
65
+
66
+ def to_s
67
+ name
68
+ end
69
+ end
70
+ end
data/lib/release.rb ADDED
@@ -0,0 +1,92 @@
1
+ module Discogs
2
+ class Release < Base
3
+
4
+ attr_accessor :discog_id,
5
+ :title,
6
+ :label,
7
+ :format,
8
+ :discog_status,
9
+ :genres,
10
+ :styles,
11
+ :formats,
12
+ :labels,
13
+ :country,
14
+ :released,
15
+ :tracks,
16
+ :images,
17
+ :contributors
18
+
19
+ def initialize(discog_id)
20
+ @discog_id = discog_id
21
+ super
22
+ end
23
+
24
+ def discog_status
25
+ @discog_status ||= (parsed/'release').first.attributes['status']
26
+ end
27
+
28
+ def title
29
+ @title ||= (parsed/'title').first.inner_html
30
+ end
31
+
32
+ def labels
33
+ @labels ||= (parsed/'labels'/'label').collect { |label| label.attributes['name'] }
34
+ end
35
+
36
+ def genres
37
+ @genres ||= (parsed/'genres'/'genre').collect { |genre| genre.inner_html }
38
+ end
39
+
40
+ def styles
41
+ @styles ||= (parsed/'styles'/'style').collect{ |label| label.inner_html }
42
+ end
43
+
44
+ def country
45
+ @country ||= (parsed/'country').inner_html
46
+ end
47
+
48
+ def released
49
+ @released ||= (parsed/'released').inner_html
50
+ end
51
+
52
+ def formats
53
+ @formats ||= (parsed/'formats'/'format').collect do |format|
54
+ Format.new(format.attributes['name'], format.attributes['qty'])
55
+ end
56
+ end
57
+
58
+ def tracks
59
+ @tracks ||= (parsed/'tracklist'/'track').collect do |track|
60
+ Track.new((track/'position').inner_html,
61
+ (track/'title').inner_html,
62
+ (track/'duration').inner_html
63
+ )
64
+ end
65
+ end
66
+
67
+ def images
68
+ @images ||= (parsed/'images'/'image').collect do |image|
69
+ Image.new(image.attributes['url'],
70
+ image.attributes['type'],
71
+ image.attributes['uri150'],
72
+ image.attributes['width'],
73
+ image.attributes['height'])
74
+ end
75
+ end
76
+
77
+ def contributors
78
+ @contributors ||= (parsed/'extraartists'/'artist').collect do |artist|
79
+ Contributor.new((artist/'name').inner_html, (artist/'role').inner_html)
80
+ end
81
+ end
82
+
83
+ def to_s
84
+ "#{title} - #{label} - #{released} - #{format}"
85
+ end
86
+
87
+ protected
88
+ def request_url
89
+ "#{DISCOGS_BASE_URL}/release/#{discog_id}?f=xml&api_key=#{api_key}"
90
+ end
91
+ end
92
+ end
data/lib/search.rb ADDED
@@ -0,0 +1,86 @@
1
+ module Discogs
2
+ class Search < Base
3
+
4
+ attr_accessor :exactresults,
5
+ :results,
6
+ :search_type,
7
+ :exactresult_size,
8
+ :result_size
9
+
10
+ def initialize(request_string)
11
+ @request_string = request_string
12
+ @search_type = 'all' # search_type doesn't seem to make any difference as of API v 1.0
13
+ super
14
+ end
15
+
16
+ def exactresult_size
17
+ @exactresult_size ||= exactresults.size
18
+ end
19
+
20
+ def result_size
21
+ (parsed/'searchresults').first.attributes['end'].to_i
22
+ end
23
+
24
+ def exactresults
25
+ (parsed/'exactresults'/'result').collect do |result|
26
+ SearchResult.new(
27
+ result.attributes['type'],
28
+ (result/'title').inner_html,
29
+ (result/'uri').inner_html,
30
+ (result/'summary').inner_html
31
+ )
32
+ end
33
+
34
+ end
35
+
36
+ def results
37
+ (parsed/'searchresults'/'result').collect do |result|
38
+ SearchResult.new(
39
+ result.attributes['type'],
40
+ (result/'title').inner_html,
41
+ (result/'uri').inner_html,
42
+ (result/'summary').inner_html
43
+ )
44
+ end
45
+ end
46
+
47
+ def best_match
48
+ first_result = exactresults.first
49
+ if first_result.artist?
50
+ artist = Discogs::Artist.new(api_key, first_result.title)
51
+ artist.releases[0,5]
52
+ end
53
+ end
54
+
55
+ protected
56
+ def request_url
57
+ "#{base_url}/search?type=#{search_type}&q=#{request_string}&f=xml&api_key=#{api_key}"
58
+ end
59
+ end
60
+
61
+ class SearchResult
62
+ attr_accessor :type,
63
+ :title,
64
+ :uri,
65
+ :summary
66
+
67
+ def initialize(type, title, uri, summary = nil)
68
+ @type = type
69
+ @title = title
70
+ @uri = uri
71
+ @summary = summary
72
+ end
73
+
74
+ def method_missing(method, *args, &block)
75
+ type = method.to_s.match(/([a-zA-Z0-9_-]+)\?/)
76
+ # if type.size < 2 the method did not have a question mark at the end
77
+ super if type.size < 2
78
+ @type == type[1].to_s
79
+ end
80
+
81
+ def to_s
82
+ "#{title}"
83
+ end
84
+
85
+ end
86
+ end
data/lib/track.rb ADDED
@@ -0,0 +1,17 @@
1
+ module Discogs
2
+ class Track
3
+ attr_accessor :position,
4
+ :title,
5
+ :duration
6
+
7
+ def initialize(position, title, duration)
8
+ @position = position
9
+ @title = title
10
+ @duration = duration
11
+ end
12
+
13
+ def to_s
14
+ title
15
+ end
16
+ end
17
+ end
data/lib/util.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Discogs
2
+ class Util < Base
3
+ class << self
4
+ def run!
5
+ if ARGV.size < 1
6
+ usage
7
+ end
8
+ search = Discogs::Search.new(ARGV.join(' '))
9
+ puts search.best_match
10
+ end
11
+
12
+ def usage
13
+ puts "Usage:\n\tdiscogs Broken Social Scene"
14
+ exit
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Discogs::Artist do
4
+ before do
5
+ artist_file = File.join(File.dirname(__FILE__), 'fixtures', 'artist.xml')
6
+ @artist_data = File.read(artist_file)
7
+ @artist = Discogs::Artist.new('Broken Social Scene')
8
+ @artist.should_receive(:fetched).and_return(@artist_data)
9
+ end
10
+
11
+ it "returns name from xml data" do
12
+ @artist.name.should eql('Broken Social Scene')
13
+ end
14
+
15
+ it "returns members from xml data" do
16
+ @artist.members.should eql(["Amy Millan", "Andrew Whiteman", "Brendan Canning", "Charles Spearin", "David Newfeld", "Emily Haines", "Evan Cranley", "Feist", "James Shaw", "Jason Collett", "Jo-Ann Goldsmith", "John Crossingham", "Julie Penner", "Justin Peroff", "Kevin Drew", "Lisa Lobsinger", "Martin Davis Kinack", "Ohad Benchetrit", "Torquil Campbell"])
17
+ end
18
+
19
+ it "returns images from xml data" do
20
+ mock_image = mock('image')
21
+ Discogs::Image.should_receive(:new).twice.and_return(mock_image)
22
+ @artist.images.should eql([mock_image, mock_image])
23
+ end
24
+
25
+ it "returns url from xml data" do
26
+ @artist.urls.should eql(["http://www.arts-crafts.ca/bss/"])
27
+ end
28
+
29
+ it "returns releases from xml data" do
30
+ mock_release = mock('release')
31
+ Discogs::Release.should_receive(:new).at_least(59).times.and_return(mock_release)
32
+ @artist.releases.should eql([mock_release]*59)
33
+ end
34
+ end
data/spec/base_spec.rb ADDED
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Discogs::Base do
4
+ before do
5
+ artist_file = File.join(File.dirname(__FILE__), 'fixtures', 'artist.xml')
6
+ @artist_data = File.read(artist_file)
7
+ end
8
+
9
+ it "obtains xml data via open-uri and zlib" do
10
+ base = Discogs::Base.new('Broken Social Scene')
11
+ mock_reader = mock('Zlib::GzipReader')
12
+ Zlib::GzipReader.should_receive(:new).and_return(mock_reader)
13
+ mock_reader.should_receive(:read).and_return(@artist_data)
14
+ mock_reader.should_receive(:close)
15
+ base.send(:fetched)
16
+ end
17
+
18
+ it "finds the api_key from a yaml file" do
19
+ base = Discogs::Base.new
20
+ YAML.should_receive(:load).and_return({:api_key => '1234'})
21
+ base.send(:load_api_key).should eql('1234')
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ <resp stat="ok" version="1.0" requests="432"><artist><images><image height="175" type="secondary" uri="http://www.discogs.com/image/A-138844-1107963722.jpg" uri150="http://www.discogs.com/image/A-150-138844-1107963722.jpg" width="324" /><image height="176" type="secondary" uri="http://www.discogs.com/image/A-138844-1107964548.jpg" uri150="http://www.discogs.com/image/A-150-138844-1107964548.jpg" width="272" /></images><name>Broken Social Scene</name><urls><url>http://www.arts-crafts.ca/bss/</url></urls><members><name>Amy Millan</name><name>Andrew Whiteman</name><name>Brendan Canning</name><name>Charles Spearin</name><name>David Newfeld</name><name>Emily Haines</name><name>Evan Cranley</name><name>Feist</name><name>James Shaw</name><name>Jason Collett</name><name>Jo-Ann Goldsmith</name><name>John Crossingham</name><name>Julie Penner</name><name>Justin Peroff</name><name>Kevin Drew</name><name>Lisa Lobsinger</name><name>Martin Davis Kinack</name><name>Ohad Benchetrit</name><name>Torquil Campbell</name></members><releases><release id="188365" status="Accepted" type="Main"><title>Feel Good Lost</title><format>CD</format><label>Noise Factory Records</label><year>2001</year></release><release id="470665" status="Accepted" type="Main"><title>You Forgot It In People</title><format>2xLP</format><label>Arts &amp; Crafts International</label><year>2002</year></release><release id="642230" status="Accepted" type="Main"><title>You Forgot It In People</title><format>2xLP</format><label>Mercury</label><year>2002</year></release><release id="1181007" status="Accepted" type="Main"><title>Stars And Sons / KC Accidental</title><format>2x7", EP</format><label>Vertigo</label><year>2003</year></release><release id="392125" status="Accepted" type="Main"><title>You Forgot It In People</title><format>CD, Album</format><label>Arts &amp; Crafts International</label><year>2003</year></release><release id="413953" status="Accepted" type="Main"><title>You Forgot It In People</title><format>CD</format><label>Mercury</label><year>2003</year></release><release id="1122350" status="Accepted" type="Main"><title>You Forgot It In People</title><format>CD, Album, Dig</format><label>Arts &amp; Crafts International</label><year>2003</year></release><release id="396405" status="Accepted" type="Main"><title>Bee Hives</title><format>CD</format><label>Arts &amp; Crafts International</label><year>2004</year></release><release id="397486" status="Accepted" type="Main"><title>Feel Good Lost</title><format>CD</format><label>Arts &amp; Crafts International</label><year>2004</year></release><release id="532628" status="Accepted" type="Main"><title>Broken Social Scene</title><format>2xCD</format><label>Arts &amp; Crafts International</label><year>2005</year></release><release id="565072" status="Accepted" type="Main"><title>Broken Social Scene</title><format>CD, Album, Dig</format><label>Arts &amp; Crafts International</label><year>2005</year></release><release id="586824" status="Accepted" type="Main"><title>Broken Social Scene</title><format>2xLP</format><label>Arts &amp; Crafts International</label><year>2005</year></release><release id="1008238" status="Accepted" type="Main"><title>Ibi Dreams Of Pavement (A Better Day)</title><format>7", Single</format><label>City Slang</label><year>2005</year></release><release id="1202405" status="Accepted" type="Main"><title>Ibi Dreams Of Pavement (A Better Day)</title><format>CD, Single, Promo</format><label>City Slang</label><year>2005</year></release><release id="671616" status="Accepted" type="Main"><title>7/4 (Shoreline)</title><format>CD, Maxi</format><label>City Slang</label><year>2006</year></release><release id="982408" status="Accepted" type="Main"><title>7/4 (Shoreline)</title><format>7", Single</format><label>City Slang</label><year>2006</year></release><release id="620688" status="Accepted" type="Main"><title>Broken Social Scene</title><format>2xLP</format><label>City Slang</label><year>2006</year></release><release id="622246" status="Accepted" type="Main"><title>Broken Social Scene</title><format>CD, Album, Dig</format><label>City Slang, City Slang</label><year>2006</year></release><release id="628959" status="Accepted" type="Main"><title>Broken Social Scene</title><format>CD + CD, Maxi</format><label>City Slang</label><year>2006</year></release><release id="1061762" status="Accepted" type="Main"><title>Feel Good Lost</title><format>CD, Enh</format><label>Pony Canyon Inc.</label><year>2006</year></release><release id="723943" status="Accepted" type="Main"><title>Fire Eye'd Boy</title><format>7"</format><label>City Slang</label><year>2006</year></release><release id="1245300" status="Accepted" type="Main"><title>Backed Out On The...</title><format>7", Single</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="1076879" status="Accepted" type="Main"><title>Spirit If...</title><format>CD, Album, Dig</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="1080528" status="Accepted" type="Main"><title>Spirit If...</title><format>CD, Album, Ltd</format><label>City Slang</label><year>2007</year></release><release id="1107034" status="Accepted" type="Main"><title>Spirit If...</title><format>CD, Album</format><label>City Slang</label><year>2007</year></release><release id="1160734" status="Accepted" type="Main"><title>Spirit If...</title><format>2xLP, Album</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="1245302" status="Accepted" type="Main"><title>Tbtf</title><format>7", Single, Whi</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="758993" status="Accepted" type="Appearance"><title>One Evening</title><format>10"</format><label>Polydor</label><year>2004</year></release><release id="1272907" status="Accepted" type="Appearance"><title>Wicker Park</title><trackinfo>Lover's Spit</trackinfo><format>CD, Album</format><label>Lakeshore Records</label><year>2004</year></release><release id="1058967" status="Accepted" type="Appearance"><title>Arts &amp; Crafts Sampler Vol 4</title><trackinfo>TBTF, Cocaine Skin</trackinfo><format>CD, Smplr, Promo</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="1039487" status="Accepted" type="Appearance"><title>Untitled</title><trackinfo>Tbtf</trackinfo><format>CD</format><label>Spex Magazine</label><year>2007</year></release><release id="194316" status="Accepted" type="TrackAppearance"><title>Noise Factory: The Sampler</title><trackinfo>Last Place</trackinfo><format>CD</format><label>Noise Factory Records</label><year>2002</year></release><release id="597151" status="Accepted" type="TrackAppearance"><title>foehn006.</title><trackinfo>Love &amp; Mathematics</trackinfo><format>2xCD</format><label>Foehn Records</label><year>2003</year></release><release id="537695" status="Accepted" type="TrackAppearance"><title>La Route Du Rock - La Compilation 2003</title><trackinfo>Almost Crimes (Radio K...</trackinfo><format>CD</format><label>La Route Du Rock</label><year>2003</year></release><release id="646202" status="Accepted" type="TrackAppearance"><title>Playlist: Volume 17</title><trackinfo>Stars And Sons</trackinfo><format>CD</format><label>HMV</label><year>2003</year></release><release id="732780" status="Accepted" type="TrackAppearance"><title>Queer As Folk (The Third Season)</title><trackinfo>Lover's Spit</trackinfo><format>CD + CD, Enh</format><label>Tommy Boy Music</label><year>2003</year></release><release id="250315" status="Accepted" type="TrackAppearance"><title>Like What Ya Heard?</title><trackinfo>Do The 95</trackinfo><format>CD</format><label>Caroline Records</label><year>2004</year></release><release id="249204" status="Accepted" type="TrackAppearance"><title>Noise Factory: Sampler Vol. 2</title><trackinfo>Love And Mathematics</trackinfo><format>CD</format><label>Noise Factory Records</label><year>2004</year></release><release id="758993" status="Accepted" type="TrackAppearance"><title>One Evening</title><trackinfo>Lover's Spit</trackinfo><format>10"</format><label>Polydor</label><year>2004</year></release><release id="1220265" status="Accepted" type="TrackAppearance"><title>See You On The Moon - Songs For Kids Of All Ages</title><trackinfo>Puff The Magic Dragon</trackinfo><format>CD</format><label>Paper Bag Records</label><year>2004</year></release><release id="259369" status="Accepted" type="TrackAppearance"><title>SPEX CD #41</title><trackinfo>KC Accidental</trackinfo><format>CD</format><label>Spex Magazine</label><year>2004</year></release><release id="1346279" status="Accepted" type="TrackAppearance"><title>The Cornerstone Player 041</title><trackinfo>Stars And Sons (Edit)</trackinfo><format>CD, Comp, Promo + CD, Comp, Mixed, Promo + DVD</format><label>Cornerstone Promotion</label><year>2004</year></release><release id="1058985" status="Accepted" type="TrackAppearance"><title>The Unending, Undying, &amp; Often Unforgiving Pursuit Of Spring</title><trackinfo>Market Fresh</trackinfo><format>2xCD, Smplr</format><label>Caroline Records</label><year>2004</year></release><release id="1272907" status="Accepted" type="TrackAppearance"><title>Wicker Park</title><trackinfo>Lover's Spit</trackinfo><format>CD, Album</format><label>Lakeshore Records</label><year>2004</year></release><release id="1275602" status="Accepted" type="TrackAppearance"><title>New Noises Vol. 74</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD, Comp, Car</format><label>Rolling Stone (Germany)</label><year>2005</year></release><release id="1363312" status="Accepted" type="TrackAppearance"><title>Sampler Volume I</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD, Promo, Smplr</format><label>Cooperative Music</label><year>2005</year></release><release id="572438" status="Accepted" type="TrackAppearance"><title>Sounds - Now!</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD</format><label>Musikexpress</label><year>2005</year></release><release id="533198" status="Accepted" type="TrackAppearance"><title>SPEX CD #56</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD</format><label>Spex Magazine</label><year>2005</year></release><release id="556875" status="Accepted" type="TrackAppearance"><title>Visualität Und Pop</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD, Promo</format><label>Persona Non Grata, City Slang</label><year>2005</year></release><release id="769201" status="Accepted" type="TrackAppearance"><title>25 Jahre Spex</title><trackinfo>Ibi Dreams Of Pavement...</trackinfo><format>DVD</format><label>Spex Magazine</label><year>2006</year></release><release id="742092" status="Accepted" type="TrackAppearance"><title>Cooperative Music Sampler Volume 3</title><trackinfo>7/4 (Shoreline)</trackinfo><format>CD + DVD</format><label>Cooperative Music</label><year>2006</year></release><release id="622288" status="Accepted" type="TrackAppearance"><title>Fear Of Music</title><trackinfo>7/4 (Shorelines)</trackinfo><format>CD, Promo</format><label>V2 Records, Inc.</label><year>2006</year></release><release id="763616" status="Accepted" type="TrackAppearance"><title>Objectif 2006 - Vol. 2</title><trackinfo>7/4 Shoreline (Version...</trackinfo><format>CD</format><label>Les Inrockuptibles</label><year>2006</year></release><release id="1210574" status="Accepted" type="TrackAppearance"><title>Oh What A Feeling 3</title><trackinfo>Cause = Time</trackinfo><format>4xCD</format><label>EMI Music (Canada)</label><year>2006</year></release><release id="717519" status="Accepted" type="TrackAppearance"><title>Untitled</title><trackinfo>Fire Eye'd Boy</trackinfo><format>DVD</format><label>Spex Magazine</label><year>2006</year></release><release id="1058967" status="Accepted" type="TrackAppearance"><title>Arts &amp; Crafts Sampler Vol 4</title><trackinfo>TBTF, Cocaine Skin</trackinfo><format>CD, Smplr, Promo</format><label>Arts &amp; Crafts International</label><year>2007</year></release><release id="928773" status="Accepted" type="TrackAppearance"><title>Rough Trade Shops - Counter Culture 06</title><trackinfo>Fire Eye'd Boy</trackinfo><format>2xCD, Comp, Mixed</format><label>V2 Records, Inc.</label><year>2007</year></release><release id="1039487" status="Accepted" type="TrackAppearance"><title>Untitled</title><trackinfo>Tbtf</trackinfo><format>CD</format><label>Spex Magazine</label><year>2007</year></release><release id="977346" status="Accepted" type="TrackAppearance"><title>Warm &amp; Scratchy</title><trackinfo>Canada vs. America</trackinfo><format>File, MP3, 256</format><label>[adult swim]</label><year>2007</year></release></releases></artist></resp>
@@ -0,0 +1,5 @@
1
+ <resp stat="ok" version="1.0" requests="435"><label><images><image height="107" type="primary" uri="http://www.discogs.com/image/L-14492-001.jpg" uri150="http://www.discogs.com/image/L-150-14492-001.jpg" width="139" /></images><name>Noise Factory Records</name><contactinfo>Tel: 416 787 3330
2
+ Fax: 416 787 3326
3
+
4
+ info@noisefactoryrecords.com
5
+ </contactinfo><profile>Toronto based indie &amp;amp; electronic label.</profile><urls><url>http://www.noisefactoryrecords.com/</url></urls><releases><release id="194316" status="Accepted"><catno>NOISECD1011</catno><artist>Various</artist><title>Noise Factory: The Sampler</title><format>CD</format></release><release id="249204" status="Accepted"><catno>NOISECD10112</catno><artist>Various</artist><title>Noise Factory: Sampler Vol. 2</title><format>CD</format></release><release id="729928" status="Accepted"><catno>NOISECD10113</catno><artist>Various</artist><title>Noise Factory: Sampler Vol. 3</title><format>CD</format></release><release id="181634" status="Accepted"><catno>NOISECD255</catno><artist>Sparrow Orange</artist><title>The Beauty of Strangeness</title><format>CD</format></release><release id="190233" status="Accepted"><catno>NOISECD265</catno><artist>Sparrow Orange</artist><title>Hands And Knees Music</title><format>CD</format></release><release id="190214" status="Accepted"><catno>NOISECD325</catno><artist>K.C. Accidental</artist><title>Anthems For The Could've Bin Pills</title><format>CD, Album</format></release><release id="190213" status="Accepted"><catno>NOISECD326</catno><artist>K.C. Accidental</artist><title>Captured Anthems For An Empty Bathtub</title><format>CD, Album</format></release><release id="158973" status="Accepted"><catno>NOISECD361</catno><artist>Beef Terminal</artist><title>The Grey Knowledge</title><format>CD</format></release><release id="214163" status="Accepted"><catno>NOISECD362</catno><artist>Beef Terminal</artist><title>The Isolationist</title><format>CD</format></release><release id="556945" status="Accepted"><catno>NOISECD363</catno><artist>Beef Terminal</artist><title>Anger Do Not Enter</title><format>CD</format></release><release id="773657" status="Accepted"><catno>NOISECD401</catno><artist>Minisystem</artist><title>Madingley</title><format>CD</format></release><release id="215536" status="Accepted"><catno>NOISECD425</catno><artist>Various</artist><title>Beautiful Noise (The Apocalypse)</title><format>CD</format></release><release id="188365" status="Accepted"><catno>NOISECD526</catno><artist>Broken Social Scene</artist><title>Feel Good Lost</title><format>CD</format></release><release id="189535" status="Accepted"><catno>NOISECD551</catno><artist>Beef Terminal</artist><title>20 GOTO 10</title><format>CD</format></release><release id="189550" status="Accepted"><catno>NOISECD624</catno><artist>Tinkertoy</artist><title>Transatlantic Love Machine</title><format>CD</format></release><release id="328877" status="Accepted"><catno>NOISECD625</catno><artist>Tinkertoy</artist><title>Electric Wilderness</title><format>CD</format></release><release id="292600" status="Accepted"><catno>NOISECD720</catno><artist>Robin Judge</artist><title>Pattern</title><format>CD</format></release><release id="453376" status="Accepted"><catno>NOISECD752</catno><artist>Hexes &amp; Ohs</artist><title>Goodbye Friend, Hello Lover</title><format>CD</format></release><release id="158560" status="Accepted"><catno>NOISECD826</catno><artist>Naw</artist><title>The Resound of a Foggy Autumn Dawn</title><format>CD</format></release><release id="335666" status="Accepted"><catno>NOISECD862</catno><artist>Naw</artist><title>Green Nights Orange Days</title><format>CD</format></release><release id="1025905" status="Accepted"><catno>NOISECD863</catno><artist>Naw</artist><title>City Saturate</title><format>CD, Album</format></release><release id="1235671" status="Accepted"><catno>none</catno><artist>Neon Tetra</artist><title>Home</title><format>File, Album, MP3</format></release></releases></label></resp>
@@ -0,0 +1 @@
1
+ <resp stat="ok" version="1.0" requests="320"><release id="188365" status="Accepted"><images><image height="300" type="secondary" uri="http://www.discogs.com/image/R-188365-1132696112.jpeg" uri150="http://www.discogs.com/image/R-150-188365-1132696112.jpeg" width="300" /></images><artists><artist><name>Broken Social Scene</name></artist></artists><title>Feel Good Lost</title><labels><label catno="NOISECD526" name="Noise Factory Records" /></labels><extraartists><artist><name>Noah Mintz</name><role>Mastered By</role></artist><artist><name>Charles Spearin</name><role>Mixed By</role></artist><artist><name>Ohad Benchetrit</name><role>Mixed By</role></artist><artist><name>Brendan Canning</name><role>Producer</role></artist><artist><name>Kevin Drew</name><role>Producer</role></artist><artist><name>Kevin Drew</name><role>Recorded By</role></artist></extraartists><formats><format name="CD" qty="1" /></formats><genres><genre>Rock</genre></genres><styles><style>Indie Rock</style><style>Experimental</style></styles><country>Canada</country><released>2001</released><tracklist><track><position>1</position><title>I Slept With Bonhomme At The CBC</title><duration>5:26</duration></track><track><position>2</position><title>Guilty Cubicles</title><duration>3:04</duration></track><track><position>3</position><title>Love And Mathematics</title><duration>5:44</duration></track><track><position>4</position><title>Passport Radio</title><extraartists><artist><name>Feist</name><role>Vocals</role></artist></extraartists><duration>5:45</duration></track><track><position>5</position><title>Alive In 85</title><duration>5:14</duration></track><track><position>6</position><title>Prison Province</title><duration>1:42</duration></track><track><position>7</position><title>Blues For Uncle Gibb</title><duration>6:59</duration></track><track><position>8</position><title>Stomach Song</title><duration>4:29</duration></track><track><position>9</position><title>Mossbraker</title><duration>5:33</duration></track><track><position>10</position><title>Feel Good Lost</title><duration>1:51</duration></track><track><position>11</position><title>Last Place</title><duration>8:26</duration></track><track><position>12</position><title>Cranley's Gonna Make It</title><duration>5:24</duration></track></tracklist></release></resp>
@@ -0,0 +1,6 @@
1
+ <resp requests="455" stat="ok" version="1.0"><exactresults><result num="1" type="artist"><title>Macha</title><uri>http://www.discogs.com/artist/Macha</uri></result><result num="2" type="artist"><title>Macha (2)</title><uri>http://www.discogs.com/artist/Macha+(2)</uri></result><result num="3" type="artist"><title>Macha (3)</title><uri>http://www.discogs.com/artist/Macha+(3)</uri></result></exactresults><searchresults end="20" numResults="49" start="1"><result num="1" type="artist"><title>Macha</title><uri>http://www.discogs.com/artist/Macha</uri><summary>Macha </summary></result><result num="2" type="artist"><title>La Macha</title><uri>http://www.discogs.com/artist/La+Macha</uri><summary>La Macha </summary></result><result num="3" type="artist"><title>Manoel Macha</title><uri>http://www.discogs.com/artist/Manoel+Macha</uri><summary>Manoel Macha </summary></result><result num="4" type="artist"><title>Macha Kouznetsova</title><uri>http://www.discogs.com/artist/Macha+Kouznetsova</uri><summary>Macha Kouznetsova </summary></result><result num="5" type="artist"><title>Macha (2)</title><uri>http://www.discogs.com/artist/Macha+(2)</uri><summary>Macha (2) </summary></result><result num="6" type="artist"><title>Macha Iitaka</title><uri>http://www.discogs.com/artist/Macha+Iitaka</uri><summary>Macha Iitaka </summary></result><result num="7" type="artist"><title>Macha (3)</title><uri>http://www.discogs.com/artist/Macha+(3)</uri><summary>Macha (3) </summary></result><result num="8" type="release"><title>Macha (3) - Macha</title><uri>http://www.discogs.com/release/1119487</uri><summary>Macha (3) Macha Jetset Records TWA17CD CD Album US 1998 Folk, World, &amp; Country Rock Post Rock ... Master Mixed By 9 Joshua McKay Mixed By 9 Kai Riedl Mixed By 9 Macha (3) Mixed By 1 to 8, 10, 11 Mark Nevers</summary></result><result num="9" type="artist"><title>La Macha (2)</title><uri>http://www.discogs.com/artist/La+Macha+(2)</uri><summary>La Macha (2) </summary></result><result num="10" type="artist"><title>Karel Hynek Mácha</title><uri>http://www.discogs.com/artist/Karel+Hynek+M%C3%A1cha</uri><summary>Karel Hynek Mácha </summary></result><result num="11" type="release"><title>Macha - Calanza</title><uri>http://www.discogs.com/release/565215</uri><summary>Macha Calanza Meet Records MEET 241 Vinyl 12" Italy 1989 Electronic Techno Maurino &amp; Charlie</summary></result><result num="12" type="release"><title>Macha (3) &amp; Bedhead - Macha Loved Bedhead - Bedhead Loved Macha</title><uri>http://www.discogs.com/release/1114030</uri><summary>Macha (3) &amp; Bedhead Macha Loved Bedhead - Bedhead Loved Macha Jetset Records TWA27CD CD EP US 25 ... , Bedhead Says. From Them To Us, Macha Says." Recorded in the homes of the Kadanes, Macha and Chris Bishop</summary></result><result num="13" type="release"><title>Macha (3) - Forget Tomorrow</title><uri>http://www.discogs.com/release/1121128</uri><summary>Macha (3) Forget Tomorrow Jetset Records TWA57CD CD Album US 2003 Rock Post Rock Indie Rock</summary></result><result num="14" type="release"><title>Rita, The
2
+
3
+ /
4
+
5
+
6
+ Goat - Macha Magall / The Night I Crushed Your Face</title><uri>http://www.discogs.com/release/997491</uri><summary>Rita, The / Goat Macha Magall / The Night I Crushed Your Face Deadline Recordings none CDr Limited ... Edition US 2007 Electronic Noise Rita, The Macha Magall Goat The Night I Crushed Your Face</summary></result><result num="15" type="release"><title>Atom Smasher - Honka Fonka</title><uri>http://www.discogs.com/release/196106</uri><summary> Honka Fonka Macha B Ascentia</summary></result><result num="16" type="release"><title>Pier Bucci - Familia Remix EP 2</title><uri>http://www.discogs.com/release/804193</uri><summary> Rebels Music Ltd. Published by Freibank Distributed by Amato Hay Consuelo (Original Edit) Macha (2 ... ) Vocals Instinct Hay Consuelo (Samim Remix) Samim Winiger Remix, Producer [Additional] Samim Macha (2</summary></result><result num="17" type="release"><title>Medeski Martin &amp; Wood - Bubblehouse</title><uri>http://www.discogs.com/release/159957</uri><summary> DJ Logic Remix Macha Spy Kiss (10:00 PM Whr. R. Your Chldrn Mix) We™ Remix </summary></result><result num="18" type="release"><title>Spear Of Longinus - Domni Satnasi</title><uri>http://www.discogs.com/release/382503</uri><summary> Black Metal Masts Of Macha (Queen Of War) The Nomad Heretik I Am War What Is It, Aton? My Side Itches</summary></result><result num="19" type="release"><title>Spear Of Longinus - Domni Satnasi</title><uri>http://www.discogs.com/release/727494</uri><summary> Originally released as Domni Satnasi LP (Burznazg, 1997) Masts Of Macha (Queen Of War) The Nomad Heretik I Am</summary></result><result num="20" type="release"><title>Pier Bucci - Hay Consuelo</title><uri>http://www.discogs.com/release/1053208</uri><summary> Bucci Producer, Written-By Macha (2) Vocals Under exclusive license from Crosstown Rebel Music Ltd</summary></result></searchresults></resp>
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Discogs::Label do
4
+ before do
5
+ label_file = File.join(File.dirname(__FILE__), 'fixtures', 'label.xml')
6
+ @label_data = File.read(label_file)
7
+ @label = Discogs::Label.new('Noise Factory Records')
8
+ @label.should_receive(:fetched).and_return(@label_data)
9
+ end
10
+
11
+ it "returns name from xml" do
12
+ @label.name.should eql('Noise Factory Records')
13
+ end
14
+
15
+ it "returns images from xml" do
16
+ mock_image = mock('Image')
17
+ Discogs::Image.should_receive(:new).and_return(mock_image)
18
+ @label.images.should eql([mock_image])
19
+ end
20
+
21
+ it "returns contact_info from xml" do
22
+ @label.contact_info.should eql("Tel: 416 787 3330\nFax: 416 787 3326\n\ninfo@noisefactoryrecords.com\n")
23
+ end
24
+
25
+ it "returns profile from xml" do
26
+ @label.profile.should eql('Toronto based indie &amp;amp; electronic label.')
27
+ end
28
+
29
+ it "returns urls from xml" do
30
+ @label.urls.should eql(["http://www.noisefactoryrecords.com/"])
31
+ end
32
+
33
+ it "returns parent from xml" do
34
+ label = Discogs::Label.should_not_receive(:new)
35
+ @label.parent.should be_nil
36
+ end
37
+
38
+ it "returns sublabels from xml" do
39
+ label = Discogs::Label.should_not_receive(:new)
40
+ @label.sublabels.should be_empty
41
+ end
42
+
43
+ it "returns releases from xml" do
44
+ mock_release = mock('Release')
45
+ Discogs::Release.should_receive(:new).at_least(22).times.and_return(mock_release)
46
+ @label.releases.should eql([mock_release]*22)
47
+ end
48
+
49
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Discogs::Artist do
4
+ before do
5
+ @release = Discogs::Release.new('188365')
6
+ end
7
+
8
+ describe "getters" do
9
+ before do
10
+ release_file = File.join(File.dirname(__FILE__), 'fixtures', 'release.xml')
11
+ @release_data = File.read(release_file)
12
+ @release.should_receive(:fetched).and_return(@release_data)
13
+ end
14
+
15
+ it "returns discog_status from xml" do
16
+ @release.discog_status.should eql('Accepted')
17
+ end
18
+
19
+ it "returns title from xml" do
20
+ @release.title.should eql('Feel Good Lost')
21
+ end
22
+
23
+ it "returns labels from xml" do
24
+ @release.labels.should eql(["Noise Factory Records"])
25
+ end
26
+
27
+ it "returns genres from xml" do
28
+ @release.genres.should eql(['Rock'])
29
+ end
30
+
31
+ it "returns styles from xml" do
32
+ @release.styles.should eql(['Indie Rock', 'Experimental'])
33
+ end
34
+
35
+ it "returns country from xml" do
36
+ @release.country.should eql('Canada')
37
+ end
38
+
39
+ it "returns release date from xml" do
40
+ @release.released.should eql('2001')
41
+ end
42
+
43
+ it "returns formats from xml" do
44
+ mock_format = mock('Format')
45
+ Discogs::Format.should_receive(:new).and_return(mock_format)
46
+ @release.formats.should eql([mock_format])
47
+ end
48
+
49
+ it "returns tracks from xml" do
50
+ mock_track = mock('Track')
51
+ Discogs::Track.should_receive(:new).at_least(12).times.and_return(mock_track)
52
+ @release.tracks.should eql([mock_track]*12)
53
+ end
54
+
55
+ it "returns images from xml" do
56
+ mock_image = mock('Image')
57
+ Discogs::Image.should_receive(:new).and_return(mock_image)
58
+ @release.images.should eql([mock_image])
59
+ end
60
+
61
+ it "returns contributors from xml" do
62
+ mock_contributor = mock('Contributor')
63
+ Discogs::Contributor.should_receive(:new).at_least(7).times.and_return(mock_contributor)
64
+ @release.contributors.should eql([mock_contributor]*7)
65
+ end
66
+ end
67
+
68
+ it "constructs a url for release request" do
69
+ @release.api_key = 'foo'
70
+ @release.discog_id = '1234'
71
+ @release.send(:request_url).should eql('http://www.discogs.com/release/1234?f=xml&api_key=foo')
72
+ end
73
+
74
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Discogs::Search do
4
+ before do
5
+ search_file = File.join(File.dirname(__FILE__), 'fixtures', 'search.xml')
6
+ @search_data = File.read(search_file)
7
+ @search = Discogs::Search.new('macha')
8
+ @search.should_receive(:fetched).and_return(@search_data)
9
+ end
10
+
11
+ it "returns exact results " do
12
+ mock_result = mock('SearchResult')
13
+ Discogs::SearchResult.should_receive(:new).at_least(3).times.and_return(mock_result)
14
+ @search.exactresults.should eql([mock_result]*3)
15
+ end
16
+
17
+ it "returns fuzzy results" do
18
+ mock_result = mock('SearchResult')
19
+ Discogs::SearchResult.should_receive(:new).at_least(20).times.and_return(mock_result)
20
+ @search.results.should eql([mock_result]*20)
21
+ end
22
+
23
+ it "returns exact result size" do
24
+ @search.exactresult_size.should eql(3)
25
+ end
26
+
27
+ it "returns fuzzy result size" do
28
+ @search.result_size.should eql(20)
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
4
+ require 'base'
5
+ require 'artist'
6
+ require 'label'
7
+ require 'release'
8
+ require 'format'
9
+ require 'image'
10
+ require 'track'
11
+ require 'contributor'
12
+ require 'search'
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: discogs
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Josh Stephenson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-07-13 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.7.0
24
+ version:
25
+ description: API Wrapper for discogs.org http://www.discogs.com/help/api
26
+ email:
27
+ - josh@joshstephenson.net
28
+ executables:
29
+ - discogs
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - README.txt
36
+ files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - Rakefile
41
+ - bin/discogs
42
+ - lib/discogs.rb
43
+ - lib/artist.rb
44
+ - lib/base.rb
45
+ - lib/contributor.rb
46
+ - lib/format.rb
47
+ - lib/image.rb
48
+ - lib/label.rb
49
+ - lib/release.rb
50
+ - lib/search.rb
51
+ - lib/track.rb
52
+ - lib/util.rb
53
+ - spec/artist_spec.rb
54
+ - spec/base_spec.rb
55
+ - spec/fixtures
56
+ - spec/fixtures/artist.xml
57
+ - spec/fixtures/label.xml
58
+ - spec/fixtures/release.xml
59
+ - spec/fixtures/search.xml
60
+ - spec/label_spec.rb
61
+ - spec/release_spec.rb
62
+ - spec/search_spec.rb
63
+ - spec/spec_helper.rb
64
+ has_rdoc: true
65
+ homepage: http://discogs.rubyforge.org
66
+ post_install_message:
67
+ rdoc_options:
68
+ - --main
69
+ - README.txt
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ requirements: []
85
+
86
+ rubyforge_project: discogs
87
+ rubygems_version: 1.2.0
88
+ signing_key:
89
+ specification_version: 2
90
+ summary: API Wrapper for discogs.org http://www.discogs.com/help/api
91
+ test_files: []
92
+