album_credits 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
2
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
3
3
  require "album_credits/version"
4
4
 
5
5
  Gem::Specification.new do |s|
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency "ruby-debug"
23
22
  s.add_dependency "bassnode-discogs"
23
+ s.add_development_dependency "ruby-debug"
24
24
  end
data/bin/album_credits CHANGED
@@ -1,18 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
3
 
3
- # TEMP
4
- require 'rubygems'
5
- require 'bundler'
6
- require 'ruby-debug'
7
4
  require 'album_credits'
8
5
 
6
+ # TODO Shove this all in a CLI class or some such.
9
7
  artist = ARGV[0]
10
8
  album = ARGV[1]
11
9
  year = ARGV[2]
12
10
  ac = AlbumCredits::Finder.new
13
11
 
14
- releases = ac.find_releases(artist, album, year)
15
- raise "No releases" if releases.empty?
12
+ begin
13
+ releases = ac.find_releases(artist, album, year)
14
+ rescue Exception => e
15
+ puts e.message
16
+ exit
17
+ end
16
18
  puts "Found #{releases.size} releases"
17
19
 
18
20
  sorted_releases = releases.inject([]) do |rel_array, release|
@@ -27,6 +29,7 @@ raise "No engineering data though :/" if sorted_releases.empty?
27
29
  best_guess = sorted_releases.shift
28
30
  ac.display_release(best_guess.first, best_guess.last, :color => :green, :show_discography => true)
29
31
 
30
- sorted_releases.each do |release, engineers|
31
- ac.display_release(release, engineers)
32
- end
32
+
33
+ # sorted_releases.each do |release, engineers|
34
+ # ac.display_release(release, engineers)
35
+ # end
@@ -16,6 +16,12 @@ module AlbumCredits
16
16
  @default_color = :white
17
17
  attr_accessor :default_color
18
18
 
19
+ # Prints the text in color
20
+ #
21
+ # @param [String] the text to print
22
+ # @param [Hash] opts
23
+ # @options opts [Boolean] :bold
24
+ # @options opts [Symbol] :color (default is .default_color)
19
25
  def cp(text, opts={})
20
26
  embolden = opts[:bold] ? COLORS[:bold] : ''
21
27
  color = opts[:color] || @default_color
@@ -53,14 +59,16 @@ module AlbumCredits
53
59
  cp "Engineers:", :color => :yellow
54
60
  engineers.each do |engineer|
55
61
  next if displayed.include? engineer.name
56
- cp "#{engineer.role} #{engineer.name}", :bold => true
62
+ cp "#{engineer.role} #{engineer.name}", :bold => true, :color => :red
57
63
 
58
64
  # Print the engineer's discography
59
65
  if show_discography && !(artist = discogs.get_artist(CGI.escape(engineer.name))).nil?
60
66
  aka = artist.aliases || []
61
67
  aka << artist.namevariations || []
68
+
62
69
  cp "AKA: #{aka.flatten.uniq.sort.join(', ')}"
63
- cp "#{artist.releases.size} releases in discography"
70
+ cp "#{artist.releases.size} releases in discography", :color => :yellow
71
+
64
72
  # Don't show discog for assistants
65
73
  unless engineer.role =~ /assisted|assistant|additional/i
66
74
  artist.releases.group_by{ |disk| disk.artist }.sort_by{ |artist, albums| artist }.each do |artist, albums|
@@ -0,0 +1,11 @@
1
+ module AlbumCredits
2
+
3
+ class NoReleasesFound < StandardError
4
+
5
+ def initialize(artist, album, year=nil)
6
+ msg = "No releases found for Artist: #{artist} Album: #{album}" << " Year: #{year}" if year
7
+ super(msg)
8
+ end
9
+
10
+ end
11
+ end
@@ -13,35 +13,53 @@ module AlbumCredits
13
13
  search_result.uri.split('/').last
14
14
  end
15
15
 
16
+ # @param [String] the main string to search for
17
+ # @param [Hash,Optional] params
18
+ # @option params [String] :format CD, HDCD, vinyl, etc.
19
+ # @option params [String] :artist
20
+ # @option params [Fixnum] :year
21
+ def search(target, params={})
22
+ sections = []
23
+ params.each_pair do |key, val|
24
+ sections << "#{key}:#{val}" if val
25
+ end
26
+
27
+ search_string = "#{target} AND " << sections.join(" AND ")
28
+ debug "Searching for #{CGI.escape(search_string)}"
29
+
30
+ begin
31
+ discogs.search(CGI.escape(search_string), :type => 'releases')
32
+ rescue Discogs::UnknownResource => e
33
+ debug "Nothing found for #{search_string}"
34
+ end
35
+ end
36
+
16
37
  def find_releases(artist, album, year=nil)
38
+
17
39
  releases = []
40
+
18
41
  [nil, 'CD', 'HDCD', 'vinyl'].each do |format|
19
- format = " AND format:#{format}" if format
20
- query = CGI.escape("#{album} AND artist:#{artist}#{format}")
21
- begin
22
- possibilities = discogs.search(query, :type => 'releases')
23
- rescue Discogs::UnknownResource => e
24
- puts "Not found: #{e}"
25
- next
26
- end
27
- if possibilities.searchresults.size > 0
42
+
43
+ possibilities = search(album, :artist => artist, :year => year, :format => format)
44
+
45
+ if possibilities && possibilities.searchresults.size > 0
28
46
  possibilities.searchresults.each do |found_album|
29
- # puts "trying #{found_album.inspect}"
30
47
  release = discogs.get_release(parse_discogs_id(found_album))
31
48
  # Make sure the album is actually what we think it is and that it
32
49
  # is in an Accepted state (as per Discogs).
33
50
  if release.title =~ /#{album}/i && release.status == 'Accepted'
34
51
  releases << release
52
+ else
53
+ debug "unacceptable: #{release.title} #{release.status}"
35
54
  end
36
55
  end
37
56
  else
38
- # puts "no results for #{query}"
57
+ debug "no results for #{artist} #{album} #{year} #{format}"
39
58
  end
40
- end
41
59
 
42
- # Could put this later but still trying to figure out if we want to narrow
43
- # by year if it removes all potential results.
44
- releases.reject!{ |r| r.released.to_s.split('-').first.to_s != year } if year
60
+
61
+ raise AlbumCredits::NoReleasesFound.new(artist, album, year) if releases.empty?
62
+ end
45
63
 
46
64
  # Sometimes Discogs returns duplicate releases so
47
65
  # filter out any duplicates based on id.
@@ -69,5 +87,13 @@ module AlbumCredits
69
87
  discogs.get_artist(CGI.escape(artist)) rescue []
70
88
  end
71
89
 
90
+ private
91
+ def debug(txt)
92
+ puts txt if debug?
93
+ end
94
+
95
+ def debug?
96
+ ENV['DEBUG'].to_i == 1
97
+ end
72
98
  end
73
99
  end
@@ -1,3 +1,3 @@
1
1
  module AlbumCredits
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/album_credits.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'cgi'
3
3
  require 'discogs'
4
+ require 'album_credits/exceptions'
4
5
  require 'album_credits/core_ext'
5
6
  require 'album_credits/display'
6
7
  require 'album_credits/finder'
7
8
 
8
- module AlbumCredits
9
- end
9
+ begin; require 'ruby-debug'; rescue LoadError; end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: album_credits
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - bassnode
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-12 00:00:00 -07:00
18
+ date: 2011-04-17 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: ruby-debug
22
+ name: bassnode-discogs
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
@@ -33,7 +33,7 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: bassnode-discogs
36
+ name: ruby-debug
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
@@ -44,7 +44,7 @@ dependencies:
44
44
  segments:
45
45
  - 0
46
46
  version: "0"
47
- type: :runtime
47
+ type: :development
48
48
  version_requirements: *id002
49
49
  description: Searches databases for a given artist + album combination and returns recording engineering information.
50
50
  email:
@@ -66,6 +66,7 @@ files:
66
66
  - lib/album_credits.rb
67
67
  - lib/album_credits/core_ext.rb
68
68
  - lib/album_credits/display.rb
69
+ - lib/album_credits/exceptions.rb
69
70
  - lib/album_credits/finder.rb
70
71
  - lib/album_credits/version.rb
71
72
  has_rdoc: true