discogs 1.0.0 → 1.1.0
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/History.txt +9 -0
 - data/README.txt +41 -38
 - data/Rakefile +2 -2
 - data/lib/artist.rb +16 -5
 - data/lib/base.rb +19 -8
 - data/lib/contributor.rb +2 -2
 - data/lib/discogs.rb +2 -1
 - data/lib/format.rb +1 -1
 - data/lib/image.rb +1 -1
 - data/lib/label.rb +14 -2
 - data/lib/release.rb +14 -2
 - data/lib/search.rb +11 -6
 - data/lib/track.rb +1 -1
 - data/spec/artist_spec.rb +10 -0
 - data/spec/search_spec.rb +8 -0
 - metadata +2 -2
 
    
        data/History.txt
    CHANGED
    
    | 
         @@ -1,3 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            === 1.1.0 / 2008-09-03
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Fixes by Andreas Roedl <andreas.roedl@googlemail.com>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              * Images works as expected. Returns the main URI.
         
     | 
| 
      
 6 
     | 
    
         
            +
              * Fixed Artist.releases.
         
     | 
| 
      
 7 
     | 
    
         
            +
              * Fixed Artist.urls. Now we get an array of URLs. We're also chomping line feeds.
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Minor documentation fixes.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       1 
10 
     | 
    
         
             
            === 1.0.0 / 2008-07-08
         
     | 
| 
       2 
11 
     | 
    
         | 
| 
       3 
12 
     | 
    
         
             
            * 1 major enhancement
         
     | 
    
        data/README.txt
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            =  
     | 
| 
      
 1 
     | 
    
         
            +
            = discogs
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            * http://discogs.rubyforge.org
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -26,46 +26,49 @@ And a bin util 
     | 
|
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
            == SYNOPSIS:
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
            The first time discogs tries to make an api call, it will look for a YAML file '~/.discogs' or 'RAILS_ROOT/config/discogs.yml'.
         
     | 
| 
      
 30 
     | 
    
         
            +
            If it doesn't exist, it will be created, and will need editing.  Paste your discogs api key in place of 'CHANGE ME'.
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            	artist = Discog::Artist.new('Broken Social Scene')
         
     | 
| 
      
 33 
     | 
    
         
            +
            	puts "
         
     | 
| 
      
 34 
     | 
    
         
            +
            	Artist:     #{artist.name}
         
     | 
| 
      
 35 
     | 
    
         
            +
            	Members:    #{artist.members}
         
     | 
| 
      
 36 
     | 
    
         
            +
            	Images:     #{artist.images}
         
     | 
| 
      
 37 
     | 
    
         
            +
            	URLs:       #{artist.urls}
         
     | 
| 
      
 38 
     | 
    
         
            +
            	Releases:   #{artist.releases.map{|r| r.title }}
         
     | 
| 
      
 39 
     | 
    
         
            +
            	"
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            	release = Discog::Release.new('188365')
         
     | 
| 
      
 42 
     | 
    
         
            +
            	puts "
         
     | 
| 
      
 43 
     | 
    
         
            +
            	Title:        #{release.title}
         
     | 
| 
      
 44 
     | 
    
         
            +
            	Labels:       #{release.labels}
         
     | 
| 
      
 45 
     | 
    
         
            +
            	Format:       #{release.formats}
         
     | 
| 
      
 46 
     | 
    
         
            +
            	Status:       #{release.discog_status}
         
     | 
| 
      
 47 
     | 
    
         
            +
            	Genres:       #{release.genres}
         
     | 
| 
      
 48 
     | 
    
         
            +
            	Styles:       #{release.styles}
         
     | 
| 
      
 49 
     | 
    
         
            +
            	Country:      #{release.country}
         
     | 
| 
      
 50 
     | 
    
         
            +
            	ReleaseDate:  #{release.released}
         
     | 
| 
      
 51 
     | 
    
         
            +
            	Tracks        #{release.tracks}
         
     | 
| 
      
 52 
     | 
    
         
            +
            	Images:       #{release.images}
         
     | 
| 
      
 53 
     | 
    
         
            +
            	Extras:       #{release.contributors.join(', ')}
         
     | 
| 
      
 54 
     | 
    
         
            +
            	"
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            	label = Discog::Label.new(ARGV[0])
         
     | 
| 
      
 57 
     | 
    
         
            +
            	puts "
         
     | 
| 
      
 58 
     | 
    
         
            +
            	Name:         #{label.name}
         
     | 
| 
      
 59 
     | 
    
         
            +
            	Images:       #{label.images}
         
     | 
| 
      
 60 
     | 
    
         
            +
            	Contact:      #{label.contact_info}
         
     | 
| 
      
 61 
     | 
    
         
            +
            	Profile:      #{label.profile}
         
     | 
| 
      
 62 
     | 
    
         
            +
            	URLs:         #{label.urls}
         
     | 
| 
      
 63 
     | 
    
         
            +
            	Parent:       #{label.parent}
         
     | 
| 
      
 64 
     | 
    
         
            +
            	SubLabels:    #{label.sublabels}
         
     | 
| 
      
 65 
     | 
    
         
            +
            	Releases:     #{label.releases}
         
     | 
| 
      
 66 
     | 
    
         
            +
            	"
         
     | 
| 
       64 
67 
     | 
    
         | 
| 
       65 
68 
     | 
    
         
             
            == REQUIREMENTS:
         
     | 
| 
       66 
69 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
            rubygems
         
     | 
| 
       68 
     | 
    
         
            -
            hpricot
         
     | 
| 
      
 70 
     | 
    
         
            +
            - rubygems
         
     | 
| 
      
 71 
     | 
    
         
            +
            - hpricot
         
     | 
| 
       69 
72 
     | 
    
         | 
| 
       70 
73 
     | 
    
         
             
            == INSTALL:
         
     | 
| 
       71 
74 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -14,8 +14,8 @@ end 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
            desc "Run all specs in spec directory"
         
     | 
| 
       16 
16 
     | 
    
         
             
            Spec::Rake::SpecTask.new(:spec) do |t|
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
              t.rcov = true
         
     | 
| 
      
 18 
     | 
    
         
            +
              t.rcov_opts = ["--output=coverage"]
         
     | 
| 
       19 
19 
     | 
    
         
             
              t.spec_opts = ["--color"]
         
     | 
| 
       20 
20 
     | 
    
         
             
              t.spec_files = FileList['spec/*_spec.rb']
         
     | 
| 
       21 
21 
     | 
    
         
             
            end
         
     | 
    
        data/lib/artist.rb
    CHANGED
    
    | 
         @@ -8,21 +8,28 @@ module Discogs 
     | 
|
| 
       8 
8 
     | 
    
         
             
                              :images,
         
     | 
| 
       9 
9 
     | 
    
         
             
                              :realname
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       11 
12 
     | 
    
         
             
                def name
         
     | 
| 
       12 
13 
     | 
    
         
             
                  @name ||= (parsed/'artist'/'name').first.inner_html
         
     | 
| 
       13 
14 
     | 
    
         
             
                end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       15 
17 
     | 
    
         
             
                def realname
         
     | 
| 
       16 
     | 
    
         
            -
                  @realname ||=  
     | 
| 
      
 18 
     | 
    
         
            +
                  @realname ||= begin
         
     | 
| 
      
 19 
     | 
    
         
            +
                    realname = (parsed/'artist'/'realname').first
         
     | 
| 
      
 20 
     | 
    
         
            +
                    realname.nil? ? '' : realname.inner_html
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
       17 
22 
     | 
    
         
             
                end
         
     | 
| 
       18 
23 
     | 
    
         | 
| 
      
 24 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       19 
25 
     | 
    
         
             
                def members
         
     | 
| 
       20 
26 
     | 
    
         
             
                  @members ||= (parsed/'artist'/'members'/'name').collect { |artist| artist.inner_html }
         
     | 
| 
       21 
27 
     | 
    
         
             
                end
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
      
 29 
     | 
    
         
            +
                # an array images
         
     | 
| 
       23 
30 
     | 
    
         
             
                def images
         
     | 
| 
       24 
31 
     | 
    
         
             
                  @images ||= (parsed/'artist'/'images'/'image').collect do |image|
         
     | 
| 
       25 
     | 
    
         
            -
                    Image.new(image.attributes[' 
     | 
| 
      
 32 
     | 
    
         
            +
                    Image.new(image.attributes['uri'], 
         
     | 
| 
       26 
33 
     | 
    
         
             
                              image.attributes['type'],
         
     | 
| 
       27 
34 
     | 
    
         
             
                              image.attributes['uri150'],
         
     | 
| 
       28 
35 
     | 
    
         
             
                              image.attributes['width'],
         
     | 
| 
         @@ -30,17 +37,21 @@ module Discogs 
     | 
|
| 
       30 
37 
     | 
    
         
             
                  end
         
     | 
| 
       31 
38 
     | 
    
         
             
                end
         
     | 
| 
       32 
39 
     | 
    
         | 
| 
      
 40 
     | 
    
         
            +
                # an array of urls
         
     | 
| 
       33 
41 
     | 
    
         
             
                def urls
         
     | 
| 
       34 
     | 
    
         
            -
                  @urls ||= (parsed/'artist'/'urls').collect { |url|  
     | 
| 
      
 42 
     | 
    
         
            +
                  @urls ||= (parsed/'artist'/'urls'/'url').collect { |url| url.inner_html.chomp }
         
     | 
| 
       35 
43 
     | 
    
         
             
                end
         
     | 
| 
       36 
44 
     | 
    
         | 
| 
      
 45 
     | 
    
         
            +
                # for each release on the artist
         
     | 
| 
      
 46 
     | 
    
         
            +
                # this will make a new API request
         
     | 
| 
      
 47 
     | 
    
         
            +
                # for each release.  Be careful!!!
         
     | 
| 
       37 
48 
     | 
    
         
             
                def releases
         
     | 
| 
       38 
49 
     | 
    
         
             
                  @release ||= (parsed/'artist'/'releases'/'release').collect do |release| 
         
     | 
| 
       39 
     | 
    
         
            -
                    Release.new( 
     | 
| 
      
 50 
     | 
    
         
            +
                    Release.new(release.attributes['id']) 
         
     | 
| 
       40 
51 
     | 
    
         
             
                  end
         
     | 
| 
       41 
52 
     | 
    
         
             
                end
         
     | 
| 
       42 
53 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                def to_s
         
     | 
| 
      
 54 
     | 
    
         
            +
                def to_s #:nodoc:
         
     | 
| 
       44 
55 
     | 
    
         
             
                  name
         
     | 
| 
       45 
56 
     | 
    
         
             
                end
         
     | 
| 
       46 
57 
     | 
    
         
             
              end
         
     | 
    
        data/lib/base.rb
    CHANGED
    
    | 
         @@ -17,49 +17,60 @@ module Discogs 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  @request_type = request_type.to_s
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                # Hpricot parsed XML
         
     | 
| 
       20 
21 
     | 
    
         
             
                def parsed
         
     | 
| 
       21 
22 
     | 
    
         
             
                  @parsed ||= Hpricot.XML(fetched)
         
     | 
| 
       22 
23 
     | 
    
         
             
                end
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                def fetched
         
     | 
| 
      
 25 
     | 
    
         
            +
                def fetched #:nodoc:
         
     | 
| 
       25 
26 
     | 
    
         
             
                  @fetched ||= begin
         
     | 
| 
      
 27 
     | 
    
         
            +
                    begin
         
     | 
| 
       26 
28 
     | 
    
         
             
                    gz = Zlib::GzipReader.new(open(request_url, 'Accept-encoding' => 'gzip, deflate'))
         
     | 
| 
       27 
29 
     | 
    
         
             
                    fetched = gz.read
         
     | 
| 
       28 
30 
     | 
    
         
             
                    gz.close
         
     | 
| 
      
 31 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 32 
     | 
    
         
            +
                      fetched = open(request_url).read
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
       29 
34 
     | 
    
         
             
                    fetched
         
     | 
| 
       30 
35 
     | 
    
         
             
                  end
         
     | 
| 
       31 
36 
     | 
    
         
             
                end
         
     | 
| 
       32 
37 
     | 
    
         | 
| 
       33 
38 
     | 
    
         
             
                protected
         
     | 
| 
       34 
     | 
    
         
            -
                  def request_url
         
     | 
| 
      
 39 
     | 
    
         
            +
                  def request_url #:nodoc:
         
     | 
| 
       35 
40 
     | 
    
         
             
                    "#{DISCOGS_BASE_URL}/#{request_type}/#{CGI::escape(request_string)}?f=xml&api_key=#{api_key}"
         
     | 
| 
       36 
41 
     | 
    
         
             
                  end
         
     | 
| 
       37 
42 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                   
     | 
| 
      
 43 
     | 
    
         
            +
                  # try to load api key from yaml file
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # If it doesn't exist, then create it
         
     | 
| 
      
 45 
     | 
    
         
            +
                  def load_api_key #:nodoc:
         
     | 
| 
       39 
46 
     | 
    
         
             
                    begin
         
     | 
| 
       40 
47 
     | 
    
         
             
                      YAML::load(open(config_file))[:api_key]
         
     | 
| 
       41 
48 
     | 
    
         
             
                    rescue Errno::ENOENT
         
     | 
| 
       42 
49 
     | 
    
         
             
                      File.open(config_file, 'w') do |file|
         
     | 
| 
       43 
50 
     | 
    
         
             
                        file.write({:api_key => "CHANGE ME"}.to_yaml)
         
     | 
| 
       44 
     | 
    
         
            -
                        puts "Please edit #{config_file}"
         
     | 
| 
       45 
51 
     | 
    
         
             
                      end
         
     | 
| 
      
 52 
     | 
    
         
            +
                      logger.warn "DISCOGS:: Please edit #{config_file}"
         
     | 
| 
       46 
53 
     | 
    
         
             
                    end
         
     | 
| 
       47 
54 
     | 
    
         
             
                  end
         
     | 
| 
       48 
55 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                  def home_dir
         
     | 
| 
      
 56 
     | 
    
         
            +
                  def home_dir #:nodoc:
         
     | 
| 
       50 
57 
     | 
    
         
             
                    ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
         
     | 
| 
       51 
58 
     | 
    
         
             
                  end
         
     | 
| 
       52 
59 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                  def config_filename(rails = false)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  def config_filename(rails = false) #:nodoc:
         
     | 
| 
       54 
61 
     | 
    
         
             
                    rails ? 'discogs.yml' : '.discogs'
         
     | 
| 
       55 
62 
     | 
    
         
             
                  end
         
     | 
| 
       56 
63 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                  def config_file
         
     | 
| 
      
 64 
     | 
    
         
            +
                  def config_file #:nodoc:
         
     | 
| 
       58 
65 
     | 
    
         
             
                    if defined?(RAILS_ROOT)
         
     | 
| 
       59 
     | 
    
         
            -
                      File.join(RAILS_ROOT, 'config', config_filename)
         
     | 
| 
      
 66 
     | 
    
         
            +
                      File.join(RAILS_ROOT, 'config', config_filename(true))
         
     | 
| 
       60 
67 
     | 
    
         
             
                    else
         
     | 
| 
       61 
68 
     | 
    
         
             
                      File.join(home_dir, config_filename)
         
     | 
| 
       62 
69 
     | 
    
         
             
                    end
         
     | 
| 
       63 
70 
     | 
    
         
             
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  def logger #:nodoc:
         
     | 
| 
      
 73 
     | 
    
         
            +
                    @logger ||= (ActiveRecord::Base.logger || Logger.new)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
       64 
75 
     | 
    
         
             
              end
         
     | 
| 
       65 
76 
     | 
    
         
             
            end
         
     | 
    
        data/lib/contributor.rb
    CHANGED
    
    
    
        data/lib/discogs.rb
    CHANGED
    
    | 
         @@ -5,6 +5,7 @@ require 'hpricot' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'zlib'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'cgi'
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
            # discgs gem libraries
         
     | 
| 
       8 
9 
     | 
    
         
             
            require 'base'
         
     | 
| 
       9 
10 
     | 
    
         
             
            require 'artist'
         
     | 
| 
       10 
11 
     | 
    
         
             
            require 'label'
         
     | 
| 
         @@ -17,6 +18,6 @@ require 'search' 
     | 
|
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
            module Discogs
         
     | 
| 
       20 
     | 
    
         
            -
              VERSION = '1. 
     | 
| 
      
 21 
     | 
    
         
            +
              VERSION = '1.1.0'
         
     | 
| 
       21 
22 
     | 
    
         
             
              API_VERSION = '1.0'
         
     | 
| 
       22 
23 
     | 
    
         
             
            end
         
     | 
    
        data/lib/format.rb
    CHANGED
    
    
    
        data/lib/image.rb
    CHANGED
    
    
    
        data/lib/label.rb
    CHANGED
    
    | 
         @@ -4,17 +4,20 @@ module Discogs 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                def initialize(request_string)
         
     | 
| 
       6 
6 
     | 
    
         
             
                  @request_string = request_string
         
     | 
| 
       7 
     | 
    
         
            -
                  super(@request_string,  
     | 
| 
      
 7 
     | 
    
         
            +
                  super(@request_string, :label)
         
     | 
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
      
 10 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       10 
11 
     | 
    
         
             
                def label
         
     | 
| 
       11 
12 
     | 
    
         
             
                  @label ||= (parsed/'label')
         
     | 
| 
       12 
13 
     | 
    
         
             
                end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       14 
16 
     | 
    
         
             
                def name
         
     | 
| 
       15 
17 
     | 
    
         
             
                  @name ||= (label/'name').inner_html
         
     | 
| 
       16 
18 
     | 
    
         
             
                end
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                # An array of image objects
         
     | 
| 
       18 
21 
     | 
    
         
             
                def images
         
     | 
| 
       19 
22 
     | 
    
         
             
                  @images ||= (label/'images'/'image').collect do |image| 
         
     | 
| 
       20 
23 
     | 
    
         
             
                    Image.new(image.attributes['url'], 
         
     | 
| 
         @@ -25,18 +28,23 @@ module Discogs 
     | 
|
| 
       25 
28 
     | 
    
         
             
                  end
         
     | 
| 
       26 
29 
     | 
    
         
             
                end
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       28 
32 
     | 
    
         
             
                def contact_info
         
     | 
| 
       29 
33 
     | 
    
         
             
                  @contact_info ||= (label/'contactinfo').inner_html
         
     | 
| 
       30 
34 
     | 
    
         
             
                end
         
     | 
| 
       31 
35 
     | 
    
         | 
| 
      
 36 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       32 
37 
     | 
    
         
             
                def profile
         
     | 
| 
       33 
38 
     | 
    
         
             
                  @profile ||= (label/'profile').inner_html
         
     | 
| 
       34 
39 
     | 
    
         
             
                end
         
     | 
| 
       35 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
      
 42 
     | 
    
         
            +
                # An array of strings
         
     | 
| 
       36 
43 
     | 
    
         
             
                def urls
         
     | 
| 
       37 
44 
     | 
    
         
             
                  @url ||= (label/'urls'/'url').collect { |url | url.inner_html }
         
     | 
| 
       38 
45 
     | 
    
         
             
                end
         
     | 
| 
       39 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
                # parent label if applicable
         
     | 
| 
       40 
48 
     | 
    
         
             
                def parent
         
     | 
| 
       41 
49 
     | 
    
         
             
                  @parent_label ||= begin
         
     | 
| 
       42 
50 
     | 
    
         
             
                    Label.new((label/'parentLabel').inner_html) unless (label/'parentLabel').empty?
         
     | 
| 
         @@ -44,6 +52,7 @@ module Discogs 
     | 
|
| 
       44 
52 
     | 
    
         
             
                  end
         
     | 
| 
       45 
53 
     | 
    
         
             
                end
         
     | 
| 
       46 
54 
     | 
    
         | 
| 
      
 55 
     | 
    
         
            +
                # sublabels if applicable
         
     | 
| 
       47 
56 
     | 
    
         
             
                def sublabels
         
     | 
| 
       48 
57 
     | 
    
         
             
                  @sub_labels ||= begin
         
     | 
| 
       49 
58 
     | 
    
         
             
                    (label/'sublabels'/'label').collect do |label| 
         
     | 
| 
         @@ -54,6 +63,9 @@ module Discogs 
     | 
|
| 
       54 
63 
     | 
    
         
             
                  end
         
     | 
| 
       55 
64 
     | 
    
         
             
                end
         
     | 
| 
       56 
65 
     | 
    
         | 
| 
      
 66 
     | 
    
         
            +
                # Be careful, this creates a Release object for each release.
         
     | 
| 
      
 67 
     | 
    
         
            +
                # Data is lazy loaded, so an API call will be created as soon
         
     | 
| 
      
 68 
     | 
    
         
            +
                # as you access the attributes
         
     | 
| 
       57 
69 
     | 
    
         
             
                def releases
         
     | 
| 
       58 
70 
     | 
    
         
             
                  @releases ||= begin
         
     | 
| 
       59 
71 
     | 
    
         
             
                    (label/'releases'/'release').collect do |release| 
         
     | 
| 
         @@ -63,7 +75,7 @@ module Discogs 
     | 
|
| 
       63 
75 
     | 
    
         
             
                  end
         
     | 
| 
       64 
76 
     | 
    
         
             
                end
         
     | 
| 
       65 
77 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                def to_s
         
     | 
| 
      
 78 
     | 
    
         
            +
                def to_s #:nodoc:
         
     | 
| 
       67 
79 
     | 
    
         
             
                  name
         
     | 
| 
       68 
80 
     | 
    
         
             
                end
         
     | 
| 
       69 
81 
     | 
    
         
             
              end
         
     | 
    
        data/lib/release.rb
    CHANGED
    
    | 
         @@ -21,40 +21,50 @@ module Discogs 
     | 
|
| 
       21 
21 
     | 
    
         
             
                  super
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
      
 24 
     | 
    
         
            +
                # status as determined by discogs
         
     | 
| 
      
 25 
     | 
    
         
            +
                # 'Approved', etc..
         
     | 
| 
       24 
26 
     | 
    
         
             
                def discog_status
         
     | 
| 
       25 
27 
     | 
    
         
             
                  @discog_status ||= (parsed/'release').first.attributes['status']
         
     | 
| 
       26 
28 
     | 
    
         
             
                end
         
     | 
| 
       27 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       28 
31 
     | 
    
         
             
                def title
         
     | 
| 
       29 
32 
     | 
    
         
             
                  @title ||= (parsed/'title').first.inner_html
         
     | 
| 
       30 
33 
     | 
    
         
             
                end
         
     | 
| 
       31 
34 
     | 
    
         | 
| 
      
 35 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       32 
36 
     | 
    
         
             
                def labels
         
     | 
| 
       33 
37 
     | 
    
         
             
                  @labels ||= (parsed/'labels'/'label').collect { |label| label.attributes['name'] }
         
     | 
| 
       34 
38 
     | 
    
         
             
                end
         
     | 
| 
       35 
39 
     | 
    
         | 
| 
      
 40 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       36 
41 
     | 
    
         
             
                def genres
         
     | 
| 
       37 
42 
     | 
    
         
             
                  @genres ||= (parsed/'genres'/'genre').collect { |genre| genre.inner_html }
         
     | 
| 
       38 
43 
     | 
    
         
             
                end
         
     | 
| 
       39 
44 
     | 
    
         | 
| 
      
 45 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       40 
46 
     | 
    
         
             
                def styles
         
     | 
| 
       41 
47 
     | 
    
         
             
                  @styles ||= (parsed/'styles'/'style').collect{ |label| label.inner_html }
         
     | 
| 
       42 
48 
     | 
    
         
             
                end
         
     | 
| 
       43 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       44 
51 
     | 
    
         
             
                def country
         
     | 
| 
       45 
52 
     | 
    
         
             
                  @country ||= (parsed/'country').inner_html
         
     | 
| 
       46 
53 
     | 
    
         
             
                end
         
     | 
| 
       47 
54 
     | 
    
         | 
| 
      
 55 
     | 
    
         
            +
                # Discogs Data
         
     | 
| 
       48 
56 
     | 
    
         
             
                def released
         
     | 
| 
       49 
57 
     | 
    
         
             
                  @released ||= (parsed/'released').inner_html
         
     | 
| 
       50 
58 
     | 
    
         
             
                end
         
     | 
| 
       51 
59 
     | 
    
         | 
| 
      
 60 
     | 
    
         
            +
                # An array of Format objects
         
     | 
| 
       52 
61 
     | 
    
         
             
                def formats
         
     | 
| 
       53 
62 
     | 
    
         
             
                  @formats ||= (parsed/'formats'/'format').collect do |format| 
         
     | 
| 
       54 
63 
     | 
    
         
             
                    Format.new(format.attributes['name'], format.attributes['qty'])
         
     | 
| 
       55 
64 
     | 
    
         
             
                  end
         
     | 
| 
       56 
65 
     | 
    
         
             
                end
         
     | 
| 
       57 
66 
     | 
    
         | 
| 
      
 67 
     | 
    
         
            +
                # An array of Track objects
         
     | 
| 
       58 
68 
     | 
    
         
             
                def tracks
         
     | 
| 
       59 
69 
     | 
    
         
             
                  @tracks ||= (parsed/'tracklist'/'track').collect do |track|
         
     | 
| 
       60 
70 
     | 
    
         
             
                    Track.new((track/'position').inner_html,
         
     | 
| 
         @@ -64,6 +74,7 @@ module Discogs 
     | 
|
| 
       64 
74 
     | 
    
         
             
                  end
         
     | 
| 
       65 
75 
     | 
    
         
             
                end
         
     | 
| 
       66 
76 
     | 
    
         | 
| 
      
 77 
     | 
    
         
            +
                # An array of Image objects
         
     | 
| 
       67 
78 
     | 
    
         
             
                def images
         
     | 
| 
       68 
79 
     | 
    
         
             
                  @images ||= (parsed/'images'/'image').collect do |image|
         
     | 
| 
       69 
80 
     | 
    
         
             
                    Image.new(image.attributes['url'], 
         
     | 
| 
         @@ -74,18 +85,19 @@ module Discogs 
     | 
|
| 
       74 
85 
     | 
    
         
             
                  end
         
     | 
| 
       75 
86 
     | 
    
         
             
                end
         
     | 
| 
       76 
87 
     | 
    
         | 
| 
      
 88 
     | 
    
         
            +
                # An array of Contributor objects
         
     | 
| 
       77 
89 
     | 
    
         
             
                def contributors
         
     | 
| 
       78 
90 
     | 
    
         
             
                  @contributors ||= (parsed/'extraartists'/'artist').collect do |artist| 
         
     | 
| 
       79 
91 
     | 
    
         
             
                    Contributor.new((artist/'name').inner_html, (artist/'role').inner_html)
         
     | 
| 
       80 
92 
     | 
    
         
             
                  end
         
     | 
| 
       81 
93 
     | 
    
         
             
                end
         
     | 
| 
       82 
94 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                def to_s
         
     | 
| 
      
 95 
     | 
    
         
            +
                def to_s #:nodoc:
         
     | 
| 
       84 
96 
     | 
    
         
             
                  "#{title} - #{label} - #{released} - #{format}"
         
     | 
| 
       85 
97 
     | 
    
         
             
                end
         
     | 
| 
       86 
98 
     | 
    
         | 
| 
       87 
99 
     | 
    
         
             
                protected
         
     | 
| 
       88 
     | 
    
         
            -
                  def request_url
         
     | 
| 
      
 100 
     | 
    
         
            +
                  def request_url #:nodoc:
         
     | 
| 
       89 
101 
     | 
    
         
             
                    "#{DISCOGS_BASE_URL}/release/#{discog_id}?f=xml&api_key=#{api_key}"
         
     | 
| 
       90 
102 
     | 
    
         
             
                  end
         
     | 
| 
       91 
103 
     | 
    
         
             
              end
         
     | 
    
        data/lib/search.rb
    CHANGED
    
    | 
         @@ -13,14 +13,17 @@ module Discogs 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  super
         
     | 
| 
       14 
14 
     | 
    
         
             
                end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
                # size of exact search phrase matches
         
     | 
| 
       16 
17 
     | 
    
         
             
                def exactresult_size
         
     | 
| 
       17 
18 
     | 
    
         
             
                  @exactresult_size ||= exactresults.size
         
     | 
| 
       18 
19 
     | 
    
         
             
                end
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                # size of fuzzy matches
         
     | 
| 
       20 
22 
     | 
    
         
             
                def result_size
         
     | 
| 
       21 
     | 
    
         
            -
                  (parsed/'searchresults').first.attributes['end'].to_i
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @result_size ||= (parsed/'searchresults').first.attributes['end'].to_i
         
     | 
| 
       22 
24 
     | 
    
         
             
                end
         
     | 
| 
       23 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                # results that match the search phrase exactly
         
     | 
| 
       24 
27 
     | 
    
         
             
                def exactresults
         
     | 
| 
       25 
28 
     | 
    
         
             
                  (parsed/'exactresults'/'result').collect do |result|
         
     | 
| 
       26 
29 
     | 
    
         
             
                    SearchResult.new(
         
     | 
| 
         @@ -30,9 +33,9 @@ module Discogs 
     | 
|
| 
       30 
33 
     | 
    
         
             
                      (result/'summary').inner_html
         
     | 
| 
       31 
34 
     | 
    
         
             
                    )
         
     | 
| 
       32 
35 
     | 
    
         
             
                  end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
36 
     | 
    
         
             
                end
         
     | 
| 
       35 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
                # fuzzy results
         
     | 
| 
       36 
39 
     | 
    
         
             
                def results
         
     | 
| 
       37 
40 
     | 
    
         
             
                  (parsed/'searchresults'/'result').collect do |result|
         
     | 
| 
       38 
41 
     | 
    
         
             
                    SearchResult.new(
         
     | 
| 
         @@ -44,6 +47,8 @@ module Discogs 
     | 
|
| 
       44 
47 
     | 
    
         
             
                  end
         
     | 
| 
       45 
48 
     | 
    
         
             
                end
         
     | 
| 
       46 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                # use the exact results to get more data using another
         
     | 
| 
      
 51 
     | 
    
         
            +
                # api call based on the result type
         
     | 
| 
       47 
52 
     | 
    
         
             
                def best_match
         
     | 
| 
       48 
53 
     | 
    
         
             
                  first_result = exactresults.first
         
     | 
| 
       49 
54 
     | 
    
         
             
                  if first_result.artist?
         
     | 
| 
         @@ -53,8 +58,8 @@ module Discogs 
     | 
|
| 
       53 
58 
     | 
    
         
             
                end
         
     | 
| 
       54 
59 
     | 
    
         | 
| 
       55 
60 
     | 
    
         
             
                protected
         
     | 
| 
       56 
     | 
    
         
            -
                  def request_url
         
     | 
| 
       57 
     | 
    
         
            -
                    "#{ 
     | 
| 
      
 61 
     | 
    
         
            +
                  def request_url #:nodoc:
         
     | 
| 
      
 62 
     | 
    
         
            +
                    "#{DISCOGS_BASE_URL}/search?type=#{search_type}&q=#{CGI::escape(request_string)}&f=xml&api_key=#{api_key}"
         
     | 
| 
       58 
63 
     | 
    
         
             
                  end
         
     | 
| 
       59 
64 
     | 
    
         
             
              end
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
         @@ -71,14 +76,14 @@ module Discogs 
     | 
|
| 
       71 
76 
     | 
    
         
             
                  @summary = summary
         
     | 
| 
       72 
77 
     | 
    
         
             
                end
         
     | 
| 
       73 
78 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                def method_missing(method, *args, &block)
         
     | 
| 
      
 79 
     | 
    
         
            +
                def method_missing(method, *args, &block) #:nodoc:
         
     | 
| 
       75 
80 
     | 
    
         
             
                  type = method.to_s.match(/([a-zA-Z0-9_-]+)\?/)
         
     | 
| 
       76 
81 
     | 
    
         
             
                  # if type.size < 2 the method did not have a question mark at the end
         
     | 
| 
       77 
82 
     | 
    
         
             
                  super if type.size < 2
         
     | 
| 
       78 
83 
     | 
    
         
             
                  @type == type[1].to_s
         
     | 
| 
       79 
84 
     | 
    
         
             
                end
         
     | 
| 
       80 
85 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                def to_s
         
     | 
| 
      
 86 
     | 
    
         
            +
                def to_s #:nodoc:
         
     | 
| 
       82 
87 
     | 
    
         
             
                  "#{title}"
         
     | 
| 
       83 
88 
     | 
    
         
             
                end
         
     | 
| 
       84 
89 
     | 
    
         | 
    
        data/lib/track.rb
    CHANGED
    
    
    
        data/spec/artist_spec.rb
    CHANGED
    
    | 
         @@ -32,3 +32,13 @@ describe Discogs::Artist do 
     | 
|
| 
       32 
32 
     | 
    
         
             
                @artist.releases.should eql([mock_release]*59)
         
     | 
| 
       33 
33 
     | 
    
         
             
              end
         
     | 
| 
       34 
34 
     | 
    
         
             
            end
         
     | 
| 
      
 35 
     | 
    
         
            +
            describe Discogs::Artist do
         
     | 
| 
      
 36 
     | 
    
         
            +
              describe "network connections" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                it "does not make more connections than it needs" do
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @artist = Discogs::Artist.new('Broken Social Scene')
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @artist.name
         
     | 
| 
      
 40 
     | 
    
         
            +
                  sleep 2
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @artist.realname
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/search_spec.rb
    CHANGED
    
    | 
         @@ -27,4 +27,12 @@ describe Discogs::Search do 
     | 
|
| 
       27 
27 
     | 
    
         
             
              it "returns fuzzy result size" do
         
     | 
| 
       28 
28 
     | 
    
         
             
                @search.result_size.should eql(20)
         
     | 
| 
       29 
29 
     | 
    
         
             
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            # this is not mocked.  use for real-deal testing
         
     | 
| 
      
 32 
     | 
    
         
            +
            #  describe "advanced searching" do
         
     | 
| 
      
 33 
     | 
    
         
            +
            #    it "returns some junk" do
         
     | 
| 
      
 34 
     | 
    
         
            +
            #      search = discogs::search.new('broken social scene')
         
     | 
| 
      
 35 
     | 
    
         
            +
            #      puts search.exactresults
         
     | 
| 
      
 36 
     | 
    
         
            +
            #    end
         
     | 
| 
      
 37 
     | 
    
         
            +
            #  end
         
     | 
| 
       30 
38 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: discogs
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Josh Stephenson
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date: 2008- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2008-09-04 00:00:00 -06:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     |