diff --git a/.document b/.document deleted file mode 100644 index 3d618dd..0000000 --- a/.document +++ /dev/null @@ -1,5 +0,0 @@ -lib/**/*.rb -bin/* -- -features/**/*.feature -LICENSE.txt diff --git a/.gitignore b/.gitignore index b975f46..c84fa33 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,5 @@ doc .yardoc .bundle pkg -.DS_Store tmp -Gemfile.lock \ No newline at end of file +Gemfile.lock diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..4e1e0d2 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color diff --git a/Gemfile b/Gemfile index e995094..e45e65f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,2 @@ -source "http://rubygems.org" +source :rubygems gemspec - -gem 'simplecov', :require => false, :group => :test - diff --git a/LICENSE.txt b/LICENSE similarity index 89% rename from LICENSE.txt rename to LICENSE index dc2693f..bdb0e55 100644 --- a/LICENSE.txt +++ b/LICENSE @@ -1,4 +1,6 @@ -Copyright (c) 2011 magnolia-fan +Copyright (c) 2012 Gregory Eremin + +MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -17,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a576510 --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +## MusicBrainz Web Service wrapper [![Travis CI](https://secure.travis-ci.org/magnolia-fan/musicbrainz.png)](http://travis-ci.org/magnolia-fan/musicbrainz) + +### Installation +```bash +gem install musicbrainz +``` +### Usage +```ruby +require 'musicbrainz' + +# Search for artists +@suggestions = MusicBrainz::Artist.search('Jet') + +# Find artist by name or mbid +@foo_fighters = MusicBrainz::Artist.find_by_name('Foo Fighters') +@kasabian = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') + +# Use them like ActiveRecord models +@empire_tracks = @kasabian.release_groups[8].releases.first.tracks + +# Setting a cache path enables caching of requests +MusicBrainz::Tools::Cache.cache_path = "tmp/cache" + +# Configuring request interval +MusicBrainz::Tools::Proxy.query_interval = 1.2 # seconds +``` + +### Api + +MusicBrainz::Artist +```ruby +@artists = MusicBrainz::Artist.search(query) +@artist = MusicBrainz::Artist.find_by_name(name) +@artist = MusicBrainz::Artist.find(mbid) +@artist.id +@artist.type +@artist.name +@artist.country +@artist.date_begin +@artist.date_end +@artist.release_groups +``` + +MusicBrainz::ReleaseGroup +```ruby +@release_group = MusicBrainz::ReleaseGroup.find(mbid) +@release_group.id +@release_group.type +@release_group.title +@release_group.first_release_date +@release_group.releases +``` + +MusicBrainz::Release +```ruby +@release = MusicBrainz::Release.find(mbid) +@release.id +@release.title +@release.status +@release.date +@release.country +@release.tracks +``` + +MusicBrainz::Track +```ruby +@track = MusicBrainz::Track.find(mbid) +@track.position +@track.recording_id +@track.title +@track.length +``` + +### Contributing + +* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet +* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it +* Fork the project +* Start a feature/bugfix branch +* Commit and push until you are happy with your contribution +* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally. +* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it. + +### Copyright + +Copyright (c) 2011 Gregory Eremin. See [LICENSE](https://raw.github.com/magnolia-fan/musicbrainz/master/LICENSE) for further details. diff --git a/README.rdoc b/README.rdoc deleted file mode 100644 index 7e33ce5..0000000 --- a/README.rdoc +++ /dev/null @@ -1,80 +0,0 @@ -= MusicBrainz Web Service wrapper {}[http://travis-ci.org/magnolia-fan/musicbrainz] - -=== Installation - - gem install musicbrainz - -=== Usage - - require 'musicbrainz' - - # Search for artists - @suggestions = MusicBrainz::Artist.search('Jet') - - # Find artist by name or mbid - @foo_fighters = MusicBrainz::Artist.find_by_name('Foo Fighters') - @kasabian = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') - - # Use them like ActiveRecord models - @empire_tracks = @kasabian.release_groups[8].releases.first.tracks - - # Setting a cache path enables caching of requests - MusicBrainz.cache_path = File.join(File.dirname(__FILE__), '../../tmp/test/musicbrainz') - -=== Api - -MusicBrainz::Artist - - @artists = MusicBrainz::Artist.search(query) - @artist = MusicBrainz::Artist.find_by_name(name) - @artist = MusicBrainz::Artist.find(mbid) - @artist.id - @artist.type - @artist.name - @artist.country - @artist.date_begin - @artist.date_end - @artist.release_groups - -MusicBrainz::ReleaseGroup - - @release_group = MusicBrainz::ReleaseGroup.find(mbid) - @release_group.id - @release_group.type - @release_group.title - @release_group.first_release_date - @release_group.releases - -MusicBrainz::Release - - @release = MusicBrainz::Release.find(mbid) - @release.id - @release.title - @release.status - @release.date - @release.country - @release.tracks - -MusicBrainz::Track - - @track = MusicBrainz::Track.find(mbid) - @track.position - @track.recording_id - @track.title - @track.length - - -=== Contributing - -* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet -* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it -* Fork the project -* Start a feature/bugfix branch -* Commit and push until you are happy with your contribution -* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally. -* to get a coverage report for your Test Unit and RSpec tests use the rake tasks: test_coverage, rspec_coverage -* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it. - -=== Copyright - -Copyright (c) 2011 Gregory Eremin. See LICENSE.txt for further details. diff --git a/Rakefile b/Rakefile index 67f24d9..50f8079 100644 --- a/Rakefile +++ b/Rakefile @@ -1,62 +1,8 @@ -# encoding: utf-8 +#!/usr/bin/env rake +require "bundler/gem_tasks" +require "rspec/core/rake_task" -require 'rubygems' -require 'bundler' -begin - Bundler.setup(:default, :development) -rescue Bundler::BundlerError => e - $stderr.puts e.message - $stderr.puts "Run `bundle install` to install missing gems" - exit e.status_code -end -require 'rake' +RSpec::Core::RakeTask.new("spec") -require 'jeweler' -Jeweler::Tasks.new do |gem| - # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options - gem.name = "musicbrainz" - gem.homepage = "http://github.com/magnolia-fan/musicbrainz" - gem.license = "MIT" - gem.summary = %Q{MusicBrainz Web Service wrapper} - gem.description = %Q{MusicBrainz Web Service wrapper with ActiveRecord-style models} - gem.email = "magnolia_fan@me.com" - gem.authors = ["Gregory Eremin"] - # dependencies defined in Gemfile -end -Jeweler::RubygemsDotOrgTasks.new - -require 'rake/testtask' -Rake::TestTask.new(:test) do |test| - test.libs << 'lib' << 'test' - test.pattern = 'test/**/test_*.rb' - test.verbose = true -end - -require 'rspec/core/rake_task' -RSpec::Core::RakeTask.new(:spec) do |test| - test.verbose = true -end - -desc "Run Test Unit with code coverage" -task :test_coverage do - ENV['COVERAGE'] = 'true' - Rake::Task["test"].execute -end - -desc "Run RSpec with code coverage" -task :rspec_coverage do - ENV['COVERAGE'] = 'true' - Rake::Task["spec"].execute -end - -task :default => :test - -require 'rdoc/task' -RDoc::Task.new do |rdoc| - version = File.exist?('VERSION') ? File.read('VERSION') : "" - - rdoc.rdoc_dir = 'rdoc' - rdoc.title = "musicbrainz #{version}" - rdoc.rdoc_files.include('README*') - rdoc.rdoc_files.include('lib/**/*.rb') -end +task :default => :spec +task :test => :spec diff --git a/VERSION b/VERSION deleted file mode 100644 index 2411653..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.5.2 \ No newline at end of file diff --git a/lib/deprecated.rb b/lib/deprecated.rb new file mode 100644 index 0000000..28aa1ea --- /dev/null +++ b/lib/deprecated.rb @@ -0,0 +1,12 @@ +# -*- encoding: utf-8 -*- +module MusicBrainz + def self.query_interval=(sec) + MusicBrainz::Tools::Proxy.query_interval = sec + puts "WARNING! MusicBrainz.query_interval is deprecated. Use MusicBrainz::Tools::Proxy.query_interval" + end + + def self.cache_path=(path) + MusicBrainz::Tools::Cache.cache_path = path + puts "WARNING! MusicBrainz.cache_path is deprecated. Use MusicBrainz::Tools::Cache.cache_path" + end +end diff --git a/lib/models/music_brainz.rb b/lib/models/music_brainz.rb deleted file mode 100644 index a7a1ad1..0000000 --- a/lib/models/music_brainz.rb +++ /dev/null @@ -1,78 +0,0 @@ -module MusicBrainz - @@last_query_time = 0 - @@query_interval = 1.5 # Min: 1.0 Safe: 1.5 - @@cache_path = nil - - WEB_SERVICE_URL = 'http://musicbrainz.org/ws/2/' - USER_AGENT = "gem musicbrainz (https://github.com/magnolia-fan/musicbrainz) @ " + Socket.gethostname - - def self.query_interval= sec - @@query_interval = sec.to_f - end - - def self.cache_path= path - @@cache_path = path - end - - def self.load resourse, params = {} - url = WEB_SERVICE_URL + resourse.to_s.gsub('_', '-') + '/' + (params[:id].to_s || '') - params.delete(:id) unless params[:id].nil? - url << '?' + params.map{ |k, v| - k.to_s.gsub('_', '-') + '=' + (v.is_a?(Array) ? v.map{ |_| _.to_s.gsub('_', '-') }.join('+') : v.to_s) - }.join('&') unless params.empty? - self.cache_contents(url) do - self.get_contents url - end - end - - def self.clear_cache - FileUtils.rm_r(@@cache_path) if @@cache_path && File.exist?(@@cache_path) - end - -private - - def self.cache_contents url - response = nil - url_parts = url.split('/') - file_name = url_parts.pop - directory = url_parts.pop - file_path = @@cache_path ? "#{@@cache_path}/#{directory}/#{file_name}" : nil - - if file_path && File.exist?(file_path) - response = File.open(file_path).gets - else - response = yield - - unless response.nil? || file_path.nil? - FileUtils.mkdir_p file_path.split('/')[0..-2].join('/') - file = File.new(file_path, 'w') - file.puts(response.gets.force_encoding('UTF-8')) - file.chmod(0755) - file.close - response.rewind - end - end - - response - end - - def self.get_contents url - response = nil - - 5.times do - time_passed = Time.now.to_f - @@last_query_time - sleep @@query_interval - time_passed if time_passed < @@query_interval - - begin - response = open(url, "User-Agent" => USER_AGENT) - @@last_query_time = Time.now.to_f - rescue => e - response = nil if e.io.status[0].to_i == 404 - end - - break unless response.nil? - end - - response - end -end \ No newline at end of file diff --git a/lib/musicbrainz.rb b/lib/musicbrainz.rb index f6ce6a9..7d87ac7 100644 --- a/lib/musicbrainz.rb +++ b/lib/musicbrainz.rb @@ -1,11 +1,20 @@ +# -*- encoding: utf-8 -*- require "open-uri" require "socket" require "nokogiri" require "cgi" -require "models/music_brainz" -require "models/music_brainz/base" -require "models/music_brainz/artist" -require "models/music_brainz/release_group" -require "models/music_brainz/release" -require "models/music_brainz/track" +require "version" + +module MusicBrainz + autoload :Base, "musicbrainz/base" + autoload :Artist, "musicbrainz/artist" + autoload :ReleaseGroup, "musicbrainz/release_group" + autoload :Release, "musicbrainz/release" + autoload :Track, "musicbrainz/track" + + module Tools + autoload :Cache, "tools/cache" + autoload :Proxy, "tools/proxy" + end +end diff --git a/lib/models/music_brainz/artist.rb b/lib/musicbrainz/artist.rb similarity index 89% rename from lib/models/music_brainz/artist.rb rename to lib/musicbrainz/artist.rb index fe1aa03..716a585 100644 --- a/lib/models/music_brainz/artist.rb +++ b/lib/musicbrainz/artist.rb @@ -1,26 +1,26 @@ -# encoding: UTF-8 +# -*- encoding: utf-8 -*- module MusicBrainz class Artist < MusicBrainz::Base attr_accessor :id, :type, :name, :country, :date_begin, :date_end, :urls @release_groups - + def release_groups if @release_groups.nil? and not self.id.nil? @release_groups = [] - Nokogiri::XML(MusicBrainz.load(:release_group, :artist => self.id)).css('release-group').each do |rg| + Nokogiri::XML(self.class.load(:release_group, :artist => self.id)).css('release-group').each do |rg| @release_groups << MusicBrainz::ReleaseGroup.parse_xml(rg) end end @release_groups.sort{ |a, b| a.first_release_date <=> b.first_release_date } end - + def self.find mbid - res = MusicBrainz.load :artist, :id => mbid, :inc => [:url_rels] + res = self.load :artist, :id => mbid, :inc => [:url_rels] return nil if res.nil? @artist = self.parse_xml(Nokogiri::XML(res)) end - + def self.parse_xml xml @artist = MusicBrainz::Artist.new @artist.id = self.safe_get_attr(xml, 'artist', 'id') @@ -35,21 +35,21 @@ module MusicBrainz end @artist end - + def self.discography mbid artist = self.find(mbid) artist.release_groups.each {|rg| rg.releases.each {|r| r.tracks } } artist end - + def self.find_by_name name matches = self.search name matches.length.zero? ? nil : self.find(matches.first[:mbid]) end - + def self.search name artists = [] - xml = Nokogiri::XML(MusicBrainz.load(:artist, :query => CGI.escape(name).gsub(/\!/, '\!') + '~', :limit => 50)) + xml = Nokogiri::XML(self.load(:artist, :query => CGI.escape(name).gsub(/\!/, '\!') + '~', :limit => 50)) xml.css('artist-list > artist').each do |a| artist = { :name => a.first_element_child.text.gsub(/[`’]/, "'"), diff --git a/lib/models/music_brainz/base.rb b/lib/musicbrainz/base.rb similarity index 58% rename from lib/models/music_brainz/base.rb rename to lib/musicbrainz/base.rb index b7e10bf..78b8e21 100644 --- a/lib/models/music_brainz/base.rb +++ b/lib/musicbrainz/base.rb @@ -1,12 +1,17 @@ +# -*- encoding: utf-8 -*- module MusicBrainz class Base - def self.safe_get_attr xml, path, name + def self.safe_get_attr(xml, path, name) node = path.nil? ? xml : (xml.css(path).first unless xml.css(path).empty?) node.attr(name) unless node.nil? or node.attr(name).nil? end - - def self.safe_get_value xml, path + + def self.safe_get_value(xml, path) xml.css(path).first.text unless xml.css(path).empty? end + + def self.load(*args) + MusicBrainz::Tools::Proxy.load(*args) + end end end diff --git a/lib/models/music_brainz/release.rb b/lib/musicbrainz/release.rb similarity index 79% rename from lib/models/music_brainz/release.rb rename to lib/musicbrainz/release.rb index 0cc9ba4..ef3b381 100644 --- a/lib/models/music_brainz/release.rb +++ b/lib/musicbrainz/release.rb @@ -1,23 +1,24 @@ +# -*- encoding: utf-8 -*- module MusicBrainz class Release < MusicBrainz::Base attr_accessor :id, :title, :status, :format, :date, :country @tracks - + def tracks if @tracks.nil? and not self.id.nil? @tracks = [] - Nokogiri::XML(MusicBrainz.load(:release, :id => self.id, :inc => [:recordings, :media], :limit => 100)).css('medium-list > medium > track-list > track').each do |r| + Nokogiri::XML(self.class.load(:release, :id => self.id, :inc => [:recordings, :media], :limit => 100)).css('medium-list > medium > track-list > track').each do |r| @tracks << MusicBrainz::Track.parse_xml(r) end end @tracks.sort{ |a, b| a.position <=> b.position } end - + def self.find mbid - xml = Nokogiri::XML(MusicBrainz.load(:release, :id => mbid, :inc => [:media])).css('release').first + xml = Nokogiri::XML(self.load(:release, :id => mbid, :inc => [:media])).css('release').first self.parse_xml(xml) unless xml.nil? end - + def self.parse_xml xml @release = MusicBrainz::Release.new @release.id = self.safe_get_attr(xml, nil, 'id') diff --git a/lib/models/music_brainz/release_group.rb b/lib/musicbrainz/release_group.rb similarity index 82% rename from lib/models/music_brainz/release_group.rb rename to lib/musicbrainz/release_group.rb index 5e1cff4..3341581 100644 --- a/lib/models/music_brainz/release_group.rb +++ b/lib/musicbrainz/release_group.rb @@ -1,23 +1,24 @@ +# -*- encoding: utf-8 -*- module MusicBrainz class ReleaseGroup < MusicBrainz::Base attr_accessor :id, :type, :title, :disambiguation, :first_release_date @releases - + def releases if @releases.nil? and not self.id.nil? @releases = [] - Nokogiri::XML(MusicBrainz.load(:release, :release_group => self.id, :inc => [:media], :limit => 100)).css('release').each do |r| + Nokogiri::XML(self.class.load(:release, :release_group => self.id, :inc => [:media], :limit => 100)).css('release').each do |r| @releases << MusicBrainz::Release.parse_xml(r) end end @releases.sort{ |a, b| a.date <=> b.date } end - + def self.find mbid - xml = Nokogiri::XML(MusicBrainz.load(:release_group, :id => mbid)).css('release-group').first + xml = Nokogiri::XML(self.load(:release_group, :id => mbid)).css('release-group').first self.parse_xml(xml) unless xml.nil? end - + def self.parse_xml xml @release_group = MusicBrainz::ReleaseGroup.new @release_group.id = self.safe_get_attr(xml, nil, 'id') diff --git a/lib/models/music_brainz/track.rb b/lib/musicbrainz/track.rb similarity index 87% rename from lib/models/music_brainz/track.rb rename to lib/musicbrainz/track.rb index 44957d6..c67a401 100644 --- a/lib/models/music_brainz/track.rb +++ b/lib/musicbrainz/track.rb @@ -1,12 +1,13 @@ +# -*- encoding: utf-8 -*- module MusicBrainz class Track < MusicBrainz::Base attr_accessor :position, :recording_id, :title, :length - + def self.find mbid - xml = Nokogiri::XML(MusicBrainz.load(:recording, :id => mbid)) + xml = Nokogiri::XML(self.load(:recording, :id => mbid)) self.parse_xml(xml) unless xml.nil? end - + def self.parse_xml xml @track = MusicBrainz::Track.new @track.position = self.safe_get_value(xml, 'position').to_i diff --git a/lib/tools/cache.rb b/lib/tools/cache.rb new file mode 100644 index 0000000..ddb051c --- /dev/null +++ b/lib/tools/cache.rb @@ -0,0 +1,45 @@ +# -*- encoding: utf-8 -*- +module MusicBrainz + module Tools + class Cache + @@cache_path = nil + + def self.cache_path=(path) + @@cache_path = path + end + + def self.cache_path + @@cache_path + end + + def self.clear_cache + FileUtils.rm_r(@@cache_path) if @@cache_path && File.exist?(@@cache_path) + end + + def self.cache_contents(url) + response = nil + url_parts = url.split('/') + file_name = url_parts.pop + directory = url_parts.pop + file_path = @@cache_path ? "#{@@cache_path}/#{directory}/#{file_name}" : nil + + if file_path && File.exist?(file_path) + response = File.open(file_path).gets + else + response = yield + + unless response.nil? or file_path.nil? + FileUtils.mkdir_p file_path.split('/')[0..-2].join('/') + file = File.new(file_path, 'w') + file.puts(response.gets) # .force_encoding('UTF-8') + file.chmod(0755) + file.close + response.rewind + end + end + + response + end + end + end +end diff --git a/lib/tools/proxy.rb b/lib/tools/proxy.rb new file mode 100644 index 0000000..4b23d05 --- /dev/null +++ b/lib/tools/proxy.rb @@ -0,0 +1,54 @@ +# -*- encoding: utf-8 -*- +module MusicBrainz + module Tools + class Proxy + @@last_query_time = 0 + @@query_interval = 1.5 # Min: 1.0 Safe: 1.5 + @@tries_limit = 5 + + WEB_SERVICE_URL = 'http://musicbrainz.org/ws/2/' + USER_AGENT = "gem musicbrainz (https://github.com/magnolia-fan/musicbrainz) @ " + Socket.gethostname + + def self.query_interval=(sec) + @@query_interval = sec.to_f + end + + def self.tries_limit=(num) + @@tries_limit = num.to_i + end + + def self.load(resourse, params = {}) + url = WEB_SERVICE_URL + resourse.to_s.gsub('_', '-') + '/' + (params[:id].to_s || '') + params.delete(:id) unless params[:id].nil? + url << '?' + params.map{ |k, v| + k = k.to_s.gsub('_', '-') + v = (v.is_a?(Array) ? v.map{ |_| _.to_s.gsub('_', '-') }.join('+') : v.to_s) + k + '=' + v + }.join('&') unless params.empty? + MusicBrainz::Tools::Cache.cache_contents(url) { + self.get_contents url + } + end + + def self.get_contents(url) + response = nil + + @@tries_limit.times { + time_passed = Time.now.to_f - @@last_query_time + sleep(@@query_interval - time_passed) if time_passed < @@query_interval + + begin + response = open(url, "User-Agent" => USER_AGENT) + @@last_query_time = Time.now.to_f + rescue => e + response = nil if e.io.status[0].to_i == 404 + end + + break unless response.nil? + } + + response + end + end + end +end diff --git a/lib/version.rb b/lib/version.rb new file mode 100644 index 0000000..d85ea67 --- /dev/null +++ b/lib/version.rb @@ -0,0 +1,4 @@ +# -*- encoding: utf-8 -*- +module MusicBrainz + VERSION = "0.6.0-rc1" +end diff --git a/musicbrainz.gemspec b/musicbrainz.gemspec index 2214b69..694d96f 100644 --- a/musicbrainz.gemspec +++ b/musicbrainz.gemspec @@ -1,83 +1,22 @@ -# Generated by jeweler -# DO NOT EDIT THIS FILE DIRECTLY -# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec' # -*- encoding: utf-8 -*- +require File.expand_path('../lib/version', __FILE__) -Gem::Specification.new do |s| - s.name = %q{musicbrainz} - s.version = "0.5.2" +Gem::Specification.new do |gem| + gem.authors = ["Gregory Eremin"] + gem.email = ["magnolia_fan@me.com"] + gem.summary = %q{MusicBrainz Web Service wrapper with ActiveRecord-style models} + gem.homepage = "http://github.com/magnolia-fan/musicbrainz" - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.authors = ["Gregory Eremin"] - s.date = %q{2011-11-15} - s.description = %q{MusicBrainz Web Service wrapper with ActiveRecord-style models} - s.email = %q{magnolia_fan@me.com} - s.extra_rdoc_files = [ - "LICENSE.txt", - "README.rdoc" - ] - s.files = [ - ".document", - ".travis.yml", - "Gemfile", - "LICENSE.txt", - "README.rdoc", - "Rakefile", - "VERSION", - "lib/models/music_brainz.rb", - "lib/models/music_brainz/artist.rb", - "lib/models/music_brainz/base.rb", - "lib/models/music_brainz/release.rb", - "lib/models/music_brainz/release_group.rb", - "lib/models/music_brainz/track.rb", - "lib/musicbrainz.rb", - "musicbrainz.gemspec", - "spec/requests/artist_spec.rb", - "spec/spec_helper.rb", - "spec/support/vcr.rb", - "test/helper.rb", - "test/test_musicbrainz_artist.rb", - "test/test_musicbrainz_release.rb", - "test/test_musicbrainz_release_group.rb", - "test/test_musicbrainz_track.rb" - ] - s.homepage = %q{http://github.com/magnolia-fan/musicbrainz} - s.licenses = ["MIT"] - s.require_paths = ["lib"] - s.rubygems_version = %q{1.6.2} - s.summary = %q{MusicBrainz Web Service wrapper} + gem.files = `git ls-files`.split($\) + gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) } + gem.test_files = gem.files.grep(%r{^(test|spec|features)/}) + gem.name = "musicbrainz" + gem.require_paths = ["lib"] + gem.version = MusicBrainz::VERSION + gem.license = "MIT" - if s.respond_to? :specification_version then - s.specification_version = 3 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 1.6.4"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, [">= 0"]) - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 1.6.4"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end - else - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 1.6.4"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, [">= 0"]) - end + gem.add_dependency("nokogiri") + gem.add_development_dependency("rake") + gem.add_development_dependency("awesome_print") + gem.add_development_dependency("rspec") end - diff --git a/spec/models/music_brainz_spec.rb b/spec/models/music_brainz_spec.rb deleted file mode 100644 index 931f170..0000000 --- a/spec/models/music_brainz_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require 'spec_helper' - -describe MusicBrainz do - - describe '.cache_contents', :vcr do - let(:cache_path) { File.join(File.dirname(__FILE__), '../../tmp/rspec_test/musicbrainz') } - let(:response) { ::StringIO.new('KasabianKasabianGB1999http://allmusic.com/artist/p678134http://en.wikipedia.org/wiki/Kasabianhttp://twitter.com/kasabianhqhttp://www.bbc.co.uk/music/artists/69b39eab-6577-46a4-a9f5-817839092033http://www.discogs.com/artist/Kasabianhttp://www.facebook.com/kasabianhttp://www.imdb.com/name/nm1868442/http://www.kasabian.co.uk/http://www.myspace.com/kasabianhttp://www.youtube.com/kasabianvevohttp://www.youtube.com/user/KasabianTour') } - - before(:each) do - MusicBrainz.clear_cache - end - - after(:each) do - MusicBrainz.clear_cache - end - - context 'with cache enabled' do - it 'calls get contents only once when requesting the resource twice' do - MusicBrainz.cache_path = cache_path - MusicBrainz.stub(:get_contents).and_return(response) - MusicBrainz.should_receive(:get_contents).once - mbid = '69b39eab-6577-46a4-a9f5-817839092033' - File.exist?("#{cache_path}/artist/#{mbid}?inc=url-rels").should be_false - artist = MusicBrainz::Artist.find(mbid) - artist.should be_a_kind_of(MusicBrainz::Artist) - - File.exist?("#{cache_path}/artist/#{mbid}?inc=url-rels").should be_true - artist = MusicBrainz::Artist.find(mbid) - artist.should be_a_kind_of(MusicBrainz::Artist) - end - end - - context 'with cache disabled' do - it 'calls get contents twice when requesting the resource twice' do - MusicBrainz.cache_path = nil - MusicBrainz.stub(:get_contents).and_return(response) - MusicBrainz.should_receive(:get_contents).twice - mbid = '69b39eab-6577-46a4-a9f5-817839092033' - File.exist?("#{cache_path}/artist/#{mbid}?inc=url-rels").should be_false - artist = MusicBrainz::Artist.find(mbid) - artist.should be_a_kind_of(MusicBrainz::Artist) - - File.exist?("#{cache_path}/artist/#{mbid}?inc=url-rels").should be_false - response.rewind - MusicBrainz.stub(:get_contents).and_return(response) - artist = MusicBrainz::Artist.find(mbid) - artist.should be_a_kind_of(MusicBrainz::Artist) - end - end - end -end diff --git a/spec/requests/artist_spec.rb b/spec/requests/artist_spec.rb index 55dcbfb..75d6951 100644 --- a/spec/requests/artist_spec.rb +++ b/spec/requests/artist_spec.rb @@ -1,44 +1,49 @@ -require 'spec_helper' +require "spec_helper" -describe "artist" do - it "return valid instance", :vcr do - artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') - artist.should be_a_kind_of(MusicBrainz::Artist) +describe MusicBrainz::Artist do + it "gets no exception while loading artist info" do + lambda { + MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') + }.should_not raise_error(Exception) end - - it "search by name", :vcr do + + it "gets correct instance" do + artist = MusicBrainz::Artist.find_by_name('Kasabian') + artist.should be_an_instance_of(MusicBrainz::Artist) + end + + it "searches artist by name" do matches = MusicBrainz::Artist.search('Kasabian') - matches.should have_at_least(1).item - matches.first[:name].should eql('Kasabian') + matches.length.should be > 0 + matches.first[:name].should == "Kasabian" + end + + it "finds name first than alias" do + matches = MusicBrainz::Artist.search('Chris Martin') + matches.length.should be > 0 + matches.first[:name].should == "Chris Martin" + end + + it "gets correct result by name" do + artist = MusicBrainz::Artist.find_by_name('Kasabian') + artist.id.should == "69b39eab-6577-46a4-a9f5-817839092033" + end + + it "gets correct artist data" do + artist = MusicBrainz::Artist.find_by_name('Kasabian') + artist.id.should == "69b39eab-6577-46a4-a9f5-817839092033" + artist.type.should == "Group" + artist.name.should == "Kasabian" + artist.country.should == "GB" + artist.date_begin.should == "1999" + end + + it "gets correct artist's release groups" do + release_groups = MusicBrainz::Artist.find_by_name('Kasabian').release_groups + release_groups.length.should be >= 16 + release_groups.first.id.should == "533cbc5f-ec7e-32ab-95f3-8d1f804a5176" + release_groups.first.type.should == "Single" + release_groups.first.title.should == "Club Foot" + release_groups.first.first_release_date.should == Time.utc(2004, 5, 10) end - # - # should "get correct result by name" do - # @artist = MusicBrainz::Artist.find_by_name('Kasabian') - # assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id) - # end - # - # setup do - # @artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') - # end - # - # should "return valid instance" do - # assert_instance_of(MusicBrainz::Artist, @artist) - # end - # - # should "contain correct data" do - # assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id) - # assert_equal("Group", @artist.type) - # assert_equal("Kasabian", @artist.name) - # assert_equal("GB", @artist.country) - # assert_equal("1999", @artist.date_begin) - # end - # - # should "load release groups" do - # release_groups = @artist.release_groups - # assert_operator(16, :<=, release_groups.length) - # assert_equal('533cbc5f-ec7e-32ab-95f3-8d1f804a5176', release_groups.first.id) - # assert_equal('Single', release_groups.first.type) - # assert_equal('Club Foot', release_groups.first.title) - # assert_equal(Time.utc(2004, 5, 10), release_groups.first.first_release_date) - # end end diff --git a/spec/requests/release_group_spec.rb b/spec/requests/release_group_spec.rb new file mode 100644 index 0000000..f9e3839 --- /dev/null +++ b/spec/requests/release_group_spec.rb @@ -0,0 +1,32 @@ +require "spec_helper" + +describe MusicBrainz::ReleaseGroup do + it "gets no exception while loading release group info" do + lambda { + MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61") + }.should_not raise_error(Exception) + end + + it "gets correct instance" do + release_group = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61") + release_group.should be_an_instance_of(MusicBrainz::ReleaseGroup) + end + + it "gets correct release group data" do + release_group = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61") + release_group.id.should == "6f33e0f0-cde2-38f9-9aee-2c60af8d1a61" + release_group.type.should == "Album" + release_group.title.should == "Empire" + release_group.first_release_date.should == Time.utc(2006, 8, 28) + end + + it "gets correct release group's releases" do + releases = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61").releases + releases.length.should be >= 5 + releases.first.id.should == "2225dd4c-ae9a-403b-8ea0-9e05014c778f" + releases.first.status.should == "Official" + releases.first.title.should == "Empire" + releases.first.date.should == Time.utc(2006, 8, 28) + releases.first.country.should == "GB" + end +end diff --git a/spec/requests/release_spec.rb b/spec/requests/release_spec.rb new file mode 100644 index 0000000..c1d92bf --- /dev/null +++ b/spec/requests/release_spec.rb @@ -0,0 +1,32 @@ +require "spec_helper" + +describe MusicBrainz::Release do + it "gets no exception while loading release info" do + lambda { + MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f") + }.should_not raise_error(Exception) + end + + it "gets correct instance" do + release = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f") + release.should be_an_instance_of(MusicBrainz::Release) + end + + it "gets correct release data" do + release = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f") + release.id.should == "2225dd4c-ae9a-403b-8ea0-9e05014c778f" + release.title.should == "Empire" + release.status.should == "Official" + release.date.should == Time.utc(2006, 8, 28) + release.country.should == "GB" + end + + it "gets correct release tracks" do + tracks = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f").tracks + tracks.length.should == 11 + tracks.first.position.should == 1 + tracks.first.recording_id.should == "b3015bab-1540-4d4e-9f30-14872a1525f7" + tracks.first.title.should == "Empire" + tracks.first.length.should == 233013 + end +end diff --git a/spec/requests/track_spec.rb b/spec/requests/track_spec.rb new file mode 100644 index 0000000..4eb758f --- /dev/null +++ b/spec/requests/track_spec.rb @@ -0,0 +1,21 @@ +require "spec_helper" + +describe MusicBrainz::Track do + it "gets no exception while loading release info" do + lambda { + MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7") + }.should_not raise_error(Exception) + end + + it "gets correct instance" do + track = MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7") + track.should be_an_instance_of(MusicBrainz::Track) + end + + it "gets correct track data" do + track = MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7") + track.recording_id.should == "b3015bab-1540-4d4e-9f30-14872a1525f7" + track.title.should == "Empire" + track.length.should == 233013 + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c644267..16fa79a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,29 +1,11 @@ -require 'simplecov' +require "rubygems" +require "bundler/setup" +require "ap" -if ENV["COVERAGE"] - SimpleCov.start do - add_filter '/gems/' - add_filter '/test/' - add_filter '/spec/' - end -end - -require 'rubygems' -require 'bundler' -begin - Bundler.setup(:default, :development) -rescue Bundler::BundlerError => e - $stderr.puts e.message - $stderr.puts "Run `bundle install` to install missing gems" - exit e.status_code -end -require "vcr" require "musicbrainz" -# HTTPI.log = false -Dir[File.dirname(__FILE__)+"/../lib/*.rb"].each{ |f| require f } -Dir[File.dirname(__FILE__)+"/../spec/support/*.rb"].each{ |f| require f } +MusicBrainz::Tools::Cache.cache_path = "tmp/cache" RSpec.configure do |config| - config.mock_with :rspec -end \ No newline at end of file + # Configuration is not currently necessary +end diff --git a/spec/support/vcr.rb b/spec/support/vcr.rb deleted file mode 100644 index 06f5fbd..0000000 --- a/spec/support/vcr.rb +++ /dev/null @@ -1,13 +0,0 @@ -VCR.config do |c| - c.cassette_library_dir = File.join(File.dirname(__FILE__), '..', '..', 'tmp', 'vcr') - c.stub_with :webmock - c.default_cassette_options = { :record => :new_episodes } -end - -RSpec.configure do |c| - c.treat_symbols_as_metadata_keys_with_true_values = true - c.around(:each, :vcr) do |example| - name = example.metadata[:full_description].gsub(/\s/, '_') - VCR.use_cassette(name) { example.call } - end -end \ No newline at end of file diff --git a/spec/tools/cache_spec.rb b/spec/tools/cache_spec.rb new file mode 100644 index 0000000..bdef085 --- /dev/null +++ b/spec/tools/cache_spec.rb @@ -0,0 +1,71 @@ +require "spec_helper" + +describe MusicBrainz::Tools::Cache do + before(:all) do + @old_cache_path = MusicBrainz::Tools::Cache.cache_path + @tmp_cache_path = File.join(File.dirname(__FILE__), '../../tmp/cache/tools') + end + + after(:all) do + MusicBrainz::Tools::Cache.cache_path = @old_cache_path + end + + before(:each) do + @test_response = ::StringIO.new(''+ + ''+ + ''+ + 'KasabianKasabianGB'+ + '1999'+ + 'http://allmusic.com/artist/p678134'+ + 'http://en.wikipedia.org/wiki/Kasabian'+ + 'http://twitter.com/kasabianhq'+ + ''+ + 'http://www.bbc.co.uk/music/artists/69b39eab-6577-46a4-a9f5-817839092033'+ + 'http://www.discogs.com/artist/Kasabian'+ + 'http://www.facebook.com/kasabian'+ + 'http://www.imdb.com/name/nm1868442/'+ + 'http://www.kasabian.co.uk/'+ + 'http://www.myspace.com/kasabian'+ + 'http://www.youtube.com/kasabianvevo'+ + 'http://www.youtube.com/user/KasabianTour'+ + '') + end + + context "with cache enabled" do + it "calls get contents only once when requesting the resource twice" do + MusicBrainz::Tools::Cache.cache_path = @tmp_cache_path + MusicBrainz::Tools::Proxy.stub(:get_contents).and_return(@test_response) + MusicBrainz::Tools::Proxy.should_receive(:get_contents).once + mbid = "69b39eab-6577-46a4-a9f5-817839092033" + + File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false + artist = MusicBrainz::Artist.find(mbid) + artist.should be_a_kind_of(MusicBrainz::Artist) + + File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_true + artist = MusicBrainz::Artist.find(mbid) + artist.should be_a_kind_of(MusicBrainz::Artist) + + MusicBrainz::Tools::Cache.clear_cache + end + end + + context "with cache disabled" do + it "calls get contents twice when requesting the resource twice" do + MusicBrainz::Tools::Cache.cache_path = nil + MusicBrainz::Tools::Proxy.stub(:get_contents).and_return(@test_response) + MusicBrainz::Tools::Proxy.should_receive(:get_contents).twice + mbid = "69b39eab-6577-46a4-a9f5-817839092033" + + File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false + artist = MusicBrainz::Artist.find(mbid) + artist.should be_a_kind_of(MusicBrainz::Artist) + + File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false + @test_response.rewind + MusicBrainz.stub(:get_contents).and_return(@test_response) + artist = MusicBrainz::Artist.find(mbid) + artist.should be_a_kind_of(MusicBrainz::Artist) + end + end +end diff --git a/test/helper.rb b/test/helper.rb deleted file mode 100644 index 77ccbeb..0000000 --- a/test/helper.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'simplecov' - -if ENV["COVERAGE"] - SimpleCov.start do - add_filter '/gems/' - add_filter '/test/' - add_filter '/spec/' - end -end - -require 'rubygems' -require 'bundler' -begin - Bundler.setup(:default, :test) -rescue Bundler::BundlerError => e - $stderr.puts e.message - $stderr.puts "Run `bundle install` to install missing gems" - exit e.status_code -end -require 'test/unit' -require 'shoulda' - -$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) -$LOAD_PATH.unshift(File.dirname(__FILE__)) -require 'musicbrainz' - -MusicBrainz.cache_path = File.join(File.dirname(__FILE__), '../tmp/test/musicbrainz') - -class Test::Unit::TestCase -end diff --git a/test/test_musicbrainz_artist.rb b/test/test_musicbrainz_artist.rb deleted file mode 100644 index 6977c88..0000000 --- a/test/test_musicbrainz_artist.rb +++ /dev/null @@ -1,53 +0,0 @@ -require 'helper' - -class TestMusicbrainzArtist < Test::Unit::TestCase - context "artist" do - should "load artist xml" do - assert_nothing_raised(Exception) do - MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') - end - end - - should "search by name" do - matches = MusicBrainz::Artist.search('Kasabian') - assert_operator(0, :<, matches.length) - assert_equal("Kasabian", matches.first[:name]) - end - - should "find name first than alias" do - matches = MusicBrainz::Artist.search('Chris Martin') - assert_operator(0, :<, matches.length) - assert_equal("Chris Martin", matches.first[:name]) - end - - should "get correct result by name" do - @artist = MusicBrainz::Artist.find_by_name('Kasabian') - assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id) - end - - setup do - @artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') - end - - should "return valid instance" do - assert_instance_of(MusicBrainz::Artist, @artist) - end - - should "contain correct data" do - assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id) - assert_equal("Group", @artist.type) - assert_equal("Kasabian", @artist.name) - assert_equal("GB", @artist.country) - assert_equal("1999", @artist.date_begin) - end - - should "load release groups" do - release_groups = @artist.release_groups - assert_operator(16, :<=, release_groups.length) - assert_equal('533cbc5f-ec7e-32ab-95f3-8d1f804a5176', release_groups.first.id) - assert_equal('Single', release_groups.first.type) - assert_equal('Club Foot', release_groups.first.title) - assert_equal(Time.utc(2004, 5, 10), release_groups.first.first_release_date) - end - end -end diff --git a/test/test_musicbrainz_release.rb b/test/test_musicbrainz_release.rb deleted file mode 100644 index 5e5495a..0000000 --- a/test/test_musicbrainz_release.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'helper' - -class TestMusicbrainzRelease < Test::Unit::TestCase - context "release" do - should "load xml" do - assert_nothing_raised(Exception) do - MusicBrainz::Release.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f') - end - end - - setup do - @release = MusicBrainz::Release.find('2225dd4c-ae9a-403b-8ea0-9e05014c778f') - end - - should "return valid instance" do - assert_instance_of(MusicBrainz::Release, @release) - end - - should "contain correct data" do - assert_equal("2225dd4c-ae9a-403b-8ea0-9e05014c778f", @release.id) - assert_equal("Empire", @release.title) - assert_equal("Official", @release.status) - assert_equal(Time.utc(2006, 8, 28), @release.date) - assert_equal("GB", @release.country) - end - - should "load tracks" do - tracks = @release.tracks - assert_equal(11, tracks.length) - assert_equal(1, tracks.first.position) - assert_equal('b3015bab-1540-4d4e-9f30-14872a1525f7', tracks.first.recording_id) - assert_equal('Empire', tracks.first.title) - assert_equal(233013, tracks.first.length) - end - end -end diff --git a/test/test_musicbrainz_release_group.rb b/test/test_musicbrainz_release_group.rb deleted file mode 100644 index c592595..0000000 --- a/test/test_musicbrainz_release_group.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'helper' - -class TestMusicbrainzReleaseGroup < Test::Unit::TestCase - context "release group" do - should "load xml" do - assert_nothing_raised(Exception) do - MusicBrainz::ReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61') - end - end - - setup do - @release_group = MusicBrainz::ReleaseGroup.find('6f33e0f0-cde2-38f9-9aee-2c60af8d1a61') - end - - should "return valid instance" do - assert_instance_of(MusicBrainz::ReleaseGroup, @release_group) - end - - should "contain correct data" do - assert_equal("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61", @release_group.id) - assert_equal("Album", @release_group.type) - assert_equal("Empire", @release_group.title) - assert_equal(Time.utc(2006, 8, 28), @release_group.first_release_date) - end - - should "load releases" do - releases = @release_group.releases - assert_operator(5, :<=, releases.length) - assert_equal('2225dd4c-ae9a-403b-8ea0-9e05014c778f', releases.first.id) - assert_equal('Official', releases.first.status) - assert_equal('Empire', releases.first.title) - assert_equal(Time.utc(2006, 8, 28), releases.first.date) - assert_equal('GB', releases.first.country) - end - end -end diff --git a/test/test_musicbrainz_track.rb b/test/test_musicbrainz_track.rb deleted file mode 100644 index d1ecd50..0000000 --- a/test/test_musicbrainz_track.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'helper' - -class TestMusicbrainzTrack < Test::Unit::TestCase - context "track" do - should "load xml" do - assert_nothing_raised(Exception) do - MusicBrainz::Track.find('b3015bab-1540-4d4e-9f30-14872a1525f7') - end - end - - setup do - @track = MusicBrainz::Track.find('b3015bab-1540-4d4e-9f30-14872a1525f7') - end - - should "return valid instance" do - assert_instance_of(MusicBrainz::Track, @track) - end - - should "contain correct data" do - assert_equal("b3015bab-1540-4d4e-9f30-14872a1525f7", @track.recording_id) - assert_equal("Empire", @track.title) - assert_equal(233013, @track.length) - end - end -end