musicbrainz 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.rspec +1 -0
- data/Gemfile +2 -15
- data/{LICENSE.txt → LICENSE} +4 -2
- data/README.md +86 -0
- data/Rakefile +6 -51
- data/lib/deprecated.rb +12 -0
- data/lib/musicbrainz.rb +15 -6
- data/lib/{models/music_brainz → musicbrainz}/artist.rb +17 -11
- data/lib/{models/music_brainz → musicbrainz}/base.rb +8 -3
- data/lib/{models/music_brainz → musicbrainz}/release.rb +6 -5
- data/lib/{models/music_brainz → musicbrainz}/release_group.rb +6 -5
- data/lib/{models/music_brainz → musicbrainz}/track.rb +4 -3
- data/lib/tools/cache.rb +45 -0
- data/lib/tools/proxy.rb +54 -0
- data/lib/version.rb +4 -0
- data/musicbrainz.gemspec +17 -81
- data/spec/requests/artist_spec.rb +44 -39
- data/spec/requests/release_group_spec.rb +32 -0
- data/spec/requests/release_spec.rb +32 -0
- data/spec/requests/track_spec.rb +21 -0
- data/spec/spec_helper.rb +7 -15
- data/spec/tools/cache_spec.rb +71 -0
- metadata +79 -139
- data/.document +0 -5
- data/README.rdoc +0 -76
- data/VERSION +0 -1
- data/lib/models/music_brainz.rb +0 -38
- data/spec/support/vcr.rb +0 -13
- data/test/helper.rb +0 -18
- data/test/test_musicbrainz_artist.rb +0 -47
- data/test/test_musicbrainz_release.rb +0 -36
- data/test/test_musicbrainz_release_group.rb +0 -36
- data/test/test_musicbrainz_track.rb +0 -25
data/lib/tools/proxy.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module MusicBrainz
|
3
|
+
module Tools
|
4
|
+
class Proxy
|
5
|
+
@@last_query_time = 0
|
6
|
+
@@query_interval = 1.5 # Min: 1.0 Safe: 1.5
|
7
|
+
@@tries_limit = 5
|
8
|
+
|
9
|
+
WEB_SERVICE_URL = 'http://musicbrainz.org/ws/2/'
|
10
|
+
USER_AGENT = "gem musicbrainz (https://github.com/magnolia-fan/musicbrainz) @ " + Socket.gethostname
|
11
|
+
|
12
|
+
def self.query_interval=(sec)
|
13
|
+
@@query_interval = sec.to_f
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.tries_limit=(num)
|
17
|
+
@@tries_limit = num.to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.load(resourse, params = {})
|
21
|
+
url = WEB_SERVICE_URL + resourse.to_s.gsub('_', '-') + '/' + (params[:id].to_s || '')
|
22
|
+
params.delete(:id) unless params[:id].nil?
|
23
|
+
url << '?' + params.map{ |k, v|
|
24
|
+
k = k.to_s.gsub('_', '-')
|
25
|
+
v = (v.is_a?(Array) ? v.map{ |_| _.to_s.gsub('_', '-') }.join('+') : v.to_s)
|
26
|
+
k + '=' + v
|
27
|
+
}.join('&') unless params.empty?
|
28
|
+
MusicBrainz::Tools::Cache.cache_contents(url) {
|
29
|
+
self.get_contents url
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.get_contents(url)
|
34
|
+
response = nil
|
35
|
+
|
36
|
+
@@tries_limit.times {
|
37
|
+
time_passed = Time.now.to_f - @@last_query_time
|
38
|
+
sleep(@@query_interval - time_passed) if time_passed < @@query_interval
|
39
|
+
|
40
|
+
begin
|
41
|
+
response = open(url, "User-Agent" => USER_AGENT)
|
42
|
+
@@last_query_time = Time.now.to_f
|
43
|
+
rescue => e
|
44
|
+
response = nil if e.io.status[0].to_i == 404
|
45
|
+
end
|
46
|
+
|
47
|
+
break unless response.nil?
|
48
|
+
}
|
49
|
+
|
50
|
+
response
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/version.rb
ADDED
data/musicbrainz.gemspec
CHANGED
@@ -1,86 +1,22 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/version', __FILE__)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Gregory Eremin"]
|
6
|
+
gem.email = ["magnolia_fan@me.com"]
|
7
|
+
gem.summary = %q{MusicBrainz Web Service wrapper with ActiveRecord-style models}
|
8
|
+
gem.homepage = "http://github.com/magnolia-fan/musicbrainz"
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
".travis.yml",
|
22
|
-
"Gemfile",
|
23
|
-
"LICENSE.txt",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"lib/models/music_brainz.rb",
|
28
|
-
"lib/models/music_brainz/artist.rb",
|
29
|
-
"lib/models/music_brainz/base.rb",
|
30
|
-
"lib/models/music_brainz/release.rb",
|
31
|
-
"lib/models/music_brainz/release_group.rb",
|
32
|
-
"lib/models/music_brainz/track.rb",
|
33
|
-
"lib/musicbrainz.rb",
|
34
|
-
"musicbrainz.gemspec",
|
35
|
-
"spec/requests/artist_spec.rb",
|
36
|
-
"spec/spec_helper.rb",
|
37
|
-
"spec/support/vcr.rb",
|
38
|
-
"test/helper.rb",
|
39
|
-
"test/test_musicbrainz_artist.rb",
|
40
|
-
"test/test_musicbrainz_release.rb",
|
41
|
-
"test/test_musicbrainz_release_group.rb",
|
42
|
-
"test/test_musicbrainz_track.rb"
|
43
|
-
]
|
44
|
-
s.homepage = %q{http://github.com/magnolia-fan/musicbrainz}
|
45
|
-
s.licenses = ["MIT"]
|
46
|
-
s.require_paths = ["lib"]
|
47
|
-
s.rubygems_version = %q{1.6.2}
|
48
|
-
s.summary = %q{MusicBrainz Web Service wrapper}
|
10
|
+
gem.files = `git ls-files`.split($\)
|
11
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
12
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
|
+
gem.name = "musicbrainz"
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.version = MusicBrainz::VERSION
|
16
|
+
gem.license = "MIT"
|
49
17
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
55
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
56
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
57
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
58
|
-
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
59
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
60
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
61
|
-
s.add_development_dependency(%q<vcr>, [">= 0"])
|
62
|
-
s.add_development_dependency(%q<webmock>, [">= 0"])
|
63
|
-
else
|
64
|
-
s.add_dependency(%q<nokogiri>, [">= 0"])
|
65
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
67
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
68
|
-
s.add_dependency(%q<rdoc>, [">= 0"])
|
69
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
70
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
71
|
-
s.add_dependency(%q<vcr>, [">= 0"])
|
72
|
-
s.add_dependency(%q<webmock>, [">= 0"])
|
73
|
-
end
|
74
|
-
else
|
75
|
-
s.add_dependency(%q<nokogiri>, [">= 0"])
|
76
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
77
|
-
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
78
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
79
|
-
s.add_dependency(%q<rdoc>, [">= 0"])
|
80
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
81
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
82
|
-
s.add_dependency(%q<vcr>, [">= 0"])
|
83
|
-
s.add_dependency(%q<webmock>, [">= 0"])
|
84
|
-
end
|
18
|
+
gem.add_dependency("nokogiri")
|
19
|
+
gem.add_development_dependency("rake")
|
20
|
+
gem.add_development_dependency("awesome_print")
|
21
|
+
gem.add_development_dependency("rspec")
|
85
22
|
end
|
86
|
-
|
@@ -1,44 +1,49 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe
|
4
|
-
it "
|
5
|
-
|
6
|
-
|
3
|
+
describe MusicBrainz::Artist do
|
4
|
+
it "gets no exception while loading artist info" do
|
5
|
+
lambda {
|
6
|
+
MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
|
7
|
+
}.should_not raise_error(Exception)
|
7
8
|
end
|
8
|
-
|
9
|
-
it "
|
9
|
+
|
10
|
+
it "gets correct instance" do
|
11
|
+
artist = MusicBrainz::Artist.find_by_name('Kasabian')
|
12
|
+
artist.should be_an_instance_of(MusicBrainz::Artist)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "searches artist by name" do
|
10
16
|
matches = MusicBrainz::Artist.search('Kasabian')
|
11
|
-
matches.should
|
12
|
-
matches.first[:name].should
|
17
|
+
matches.length.should be > 0
|
18
|
+
matches.first[:name].should == "Kasabian"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "finds name first than alias" do
|
22
|
+
matches = MusicBrainz::Artist.search('Chris Martin')
|
23
|
+
matches.length.should be > 0
|
24
|
+
matches.first[:name].should == "Chris Martin"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "gets correct result by name" do
|
28
|
+
artist = MusicBrainz::Artist.find_by_name('Kasabian')
|
29
|
+
artist.id.should == "69b39eab-6577-46a4-a9f5-817839092033"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "gets correct artist data" do
|
33
|
+
artist = MusicBrainz::Artist.find_by_name('Kasabian')
|
34
|
+
artist.id.should == "69b39eab-6577-46a4-a9f5-817839092033"
|
35
|
+
artist.type.should == "Group"
|
36
|
+
artist.name.should == "Kasabian"
|
37
|
+
artist.country.should == "GB"
|
38
|
+
artist.date_begin.should == "1999"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "gets correct artist's release groups" do
|
42
|
+
release_groups = MusicBrainz::Artist.find_by_name('Kasabian').release_groups
|
43
|
+
release_groups.length.should be >= 16
|
44
|
+
release_groups.first.id.should == "533cbc5f-ec7e-32ab-95f3-8d1f804a5176"
|
45
|
+
release_groups.first.type.should == "Single"
|
46
|
+
release_groups.first.title.should == "Club Foot"
|
47
|
+
release_groups.first.first_release_date.should == Time.utc(2004, 5, 10)
|
13
48
|
end
|
14
|
-
#
|
15
|
-
# should "get correct result by name" do
|
16
|
-
# @artist = MusicBrainz::Artist.find_by_name('Kasabian')
|
17
|
-
# assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id)
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# setup do
|
21
|
-
# @artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
# should "return valid instance" do
|
25
|
-
# assert_instance_of(MusicBrainz::Artist, @artist)
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# should "contain correct data" do
|
29
|
-
# assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id)
|
30
|
-
# assert_equal("Group", @artist.type)
|
31
|
-
# assert_equal("Kasabian", @artist.name)
|
32
|
-
# assert_equal("GB", @artist.country)
|
33
|
-
# assert_equal("1999", @artist.date_begin)
|
34
|
-
# end
|
35
|
-
#
|
36
|
-
# should "load release groups" do
|
37
|
-
# release_groups = @artist.release_groups
|
38
|
-
# assert_operator(16, :<=, release_groups.length)
|
39
|
-
# assert_equal('533cbc5f-ec7e-32ab-95f3-8d1f804a5176', release_groups.first.id)
|
40
|
-
# assert_equal('Single', release_groups.first.type)
|
41
|
-
# assert_equal('Club Foot', release_groups.first.title)
|
42
|
-
# assert_equal(Time.utc(2004, 5, 10), release_groups.first.first_release_date)
|
43
|
-
# end
|
44
49
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe MusicBrainz::ReleaseGroup do
|
4
|
+
it "gets no exception while loading release group info" do
|
5
|
+
lambda {
|
6
|
+
MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61")
|
7
|
+
}.should_not raise_error(Exception)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "gets correct instance" do
|
11
|
+
release_group = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61")
|
12
|
+
release_group.should be_an_instance_of(MusicBrainz::ReleaseGroup)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gets correct release group data" do
|
16
|
+
release_group = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61")
|
17
|
+
release_group.id.should == "6f33e0f0-cde2-38f9-9aee-2c60af8d1a61"
|
18
|
+
release_group.type.should == "Album"
|
19
|
+
release_group.title.should == "Empire"
|
20
|
+
release_group.first_release_date.should == Time.utc(2006, 8, 28)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "gets correct release group's releases" do
|
24
|
+
releases = MusicBrainz::ReleaseGroup.find("6f33e0f0-cde2-38f9-9aee-2c60af8d1a61").releases
|
25
|
+
releases.length.should be >= 5
|
26
|
+
releases.first.id.should == "2225dd4c-ae9a-403b-8ea0-9e05014c778f"
|
27
|
+
releases.first.status.should == "Official"
|
28
|
+
releases.first.title.should == "Empire"
|
29
|
+
releases.first.date.should == Time.utc(2006, 8, 28)
|
30
|
+
releases.first.country.should == "GB"
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe MusicBrainz::Release do
|
4
|
+
it "gets no exception while loading release info" do
|
5
|
+
lambda {
|
6
|
+
MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f")
|
7
|
+
}.should_not raise_error(Exception)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "gets correct instance" do
|
11
|
+
release = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f")
|
12
|
+
release.should be_an_instance_of(MusicBrainz::Release)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gets correct release data" do
|
16
|
+
release = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f")
|
17
|
+
release.id.should == "2225dd4c-ae9a-403b-8ea0-9e05014c778f"
|
18
|
+
release.title.should == "Empire"
|
19
|
+
release.status.should == "Official"
|
20
|
+
release.date.should == Time.utc(2006, 8, 28)
|
21
|
+
release.country.should == "GB"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "gets correct release tracks" do
|
25
|
+
tracks = MusicBrainz::Release.find("2225dd4c-ae9a-403b-8ea0-9e05014c778f").tracks
|
26
|
+
tracks.length.should == 11
|
27
|
+
tracks.first.position.should == 1
|
28
|
+
tracks.first.recording_id.should == "b3015bab-1540-4d4e-9f30-14872a1525f7"
|
29
|
+
tracks.first.title.should == "Empire"
|
30
|
+
tracks.first.length.should == 233013
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe MusicBrainz::Track do
|
4
|
+
it "gets no exception while loading release info" do
|
5
|
+
lambda {
|
6
|
+
MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7")
|
7
|
+
}.should_not raise_error(Exception)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "gets correct instance" do
|
11
|
+
track = MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7")
|
12
|
+
track.should be_an_instance_of(MusicBrainz::Track)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gets correct track data" do
|
16
|
+
track = MusicBrainz::Track.find("b3015bab-1540-4d4e-9f30-14872a1525f7")
|
17
|
+
track.recording_id.should == "b3015bab-1540-4d4e-9f30-14872a1525f7"
|
18
|
+
track.title.should == "Empire"
|
19
|
+
track.length.should == 233013
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,19 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require "vcr"
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "ap"
|
4
|
+
|
11
5
|
require "musicbrainz"
|
12
6
|
|
13
|
-
|
14
|
-
Dir[File.dirname(__FILE__)+"/../lib/*.rb"].each{ |f| require f }
|
15
|
-
Dir[File.dirname(__FILE__)+"/../spec/support/*.rb"].each{ |f| require f }
|
7
|
+
MusicBrainz::Tools::Cache.cache_path = "tmp/cache"
|
16
8
|
|
17
9
|
RSpec.configure do |config|
|
18
|
-
|
19
|
-
end
|
10
|
+
# Configuration is not currently necessary
|
11
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe MusicBrainz::Tools::Cache do
|
4
|
+
before(:all) do
|
5
|
+
@old_cache_path = MusicBrainz::Tools::Cache.cache_path
|
6
|
+
@tmp_cache_path = File.join(File.dirname(__FILE__), '../../tmp/cache/tools')
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:all) do
|
10
|
+
MusicBrainz::Tools::Cache.cache_path = @old_cache_path
|
11
|
+
end
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
@test_response = ::StringIO.new('<?xml version="1.0" encoding="UTF-8"?>'+
|
15
|
+
'<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#">'+
|
16
|
+
'<artist type="Group" id="69b39eab-6577-46a4-a9f5-817839092033">'+
|
17
|
+
'<name>Kasabian</name><sort-name>Kasabian</sort-name><country>GB</country>'+
|
18
|
+
'<life-span><begin>1999</begin></life-span><relation-list target-type="url">'+
|
19
|
+
'<relation type="allmusic"><target>http://allmusic.com/artist/p678134</target>'+
|
20
|
+
'</relation><relation type="wikipedia"><target>http://en.wikipedia.org/wiki/Kasabian</target>'+
|
21
|
+
'</relation><relation type="microblog"><target>http://twitter.com/kasabianhq</target>'+
|
22
|
+
'</relation><relation type="BBC Music page"><target>'+
|
23
|
+
'http://www.bbc.co.uk/music/artists/69b39eab-6577-46a4-a9f5-817839092033</target></relation>'+
|
24
|
+
'<relation type="discogs"><target>http://www.discogs.com/artist/Kasabian</target></relation>'+
|
25
|
+
'<relation type="social network"><target>http://www.facebook.com/kasabian</target></relation>'+
|
26
|
+
'<relation type="IMDb"><target>http://www.imdb.com/name/nm1868442/</target></relation>'+
|
27
|
+
'<relation type="official homepage"><target>http://www.kasabian.co.uk/</target></relation>'+
|
28
|
+
'<relation type="myspace"><target>http://www.myspace.com/kasabian</target></relation>'+
|
29
|
+
'<relation type="youtube"><target>http://www.youtube.com/kasabianvevo</target></relation>'+
|
30
|
+
'<relation type="youtube"><target>http://www.youtube.com/user/KasabianTour</target></relation>'+
|
31
|
+
'</relation-list></artist></metadata>')
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with cache enabled" do
|
35
|
+
it "calls get contents only once when requesting the resource twice" do
|
36
|
+
MusicBrainz::Tools::Cache.cache_path = @tmp_cache_path
|
37
|
+
MusicBrainz::Tools::Proxy.stub(:get_contents).and_return(@test_response)
|
38
|
+
MusicBrainz::Tools::Proxy.should_receive(:get_contents).once
|
39
|
+
mbid = "69b39eab-6577-46a4-a9f5-817839092033"
|
40
|
+
|
41
|
+
File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false
|
42
|
+
artist = MusicBrainz::Artist.find(mbid)
|
43
|
+
artist.should be_a_kind_of(MusicBrainz::Artist)
|
44
|
+
|
45
|
+
File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_true
|
46
|
+
artist = MusicBrainz::Artist.find(mbid)
|
47
|
+
artist.should be_a_kind_of(MusicBrainz::Artist)
|
48
|
+
|
49
|
+
MusicBrainz::Tools::Cache.clear_cache
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "with cache disabled" do
|
54
|
+
it "calls get contents twice when requesting the resource twice" do
|
55
|
+
MusicBrainz::Tools::Cache.cache_path = nil
|
56
|
+
MusicBrainz::Tools::Proxy.stub(:get_contents).and_return(@test_response)
|
57
|
+
MusicBrainz::Tools::Proxy.should_receive(:get_contents).twice
|
58
|
+
mbid = "69b39eab-6577-46a4-a9f5-817839092033"
|
59
|
+
|
60
|
+
File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false
|
61
|
+
artist = MusicBrainz::Artist.find(mbid)
|
62
|
+
artist.should be_a_kind_of(MusicBrainz::Artist)
|
63
|
+
|
64
|
+
File.exist?("#{@tmp_cache_path}/artist/#{mbid}?inc=url-rels").should be_false
|
65
|
+
@test_response.rewind
|
66
|
+
MusicBrainz.stub(:get_contents).and_return(@test_response)
|
67
|
+
artist = MusicBrainz::Artist.find(mbid)
|
68
|
+
artist.should be_a_kind_of(MusicBrainz::Artist)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,180 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: musicbrainz
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.5.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Gregory Eremin
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-07-04 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: nokogiri
|
18
|
-
requirement: &
|
16
|
+
requirement: &70115651814840 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
29
|
-
requirement: &
|
24
|
+
version_requirements: *70115651814840
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70115651805120 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :development
|
36
34
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
40
|
-
requirement: &
|
35
|
+
version_requirements: *70115651805120
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: awesome_print
|
38
|
+
requirement: &70115651804200 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :development
|
47
45
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rcov
|
51
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: "0"
|
57
|
-
type: :development
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: rdoc
|
62
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
|
-
requirements:
|
65
|
-
- - ">="
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: "0"
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: shoulda
|
73
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ">="
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: "0"
|
79
|
-
type: :development
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *70115651804200
|
47
|
+
- !ruby/object:Gem::Dependency
|
83
48
|
name: rspec
|
84
|
-
requirement: &
|
49
|
+
requirement: &70115651803420 !ruby/object:Gem::Requirement
|
85
50
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
90
55
|
type: :development
|
91
56
|
prerelease: false
|
92
|
-
version_requirements: *
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
none: false
|
97
|
-
requirements:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: "0"
|
101
|
-
type: :development
|
102
|
-
prerelease: false
|
103
|
-
version_requirements: *id008
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: webmock
|
106
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: "0"
|
112
|
-
type: :development
|
113
|
-
prerelease: false
|
114
|
-
version_requirements: *id009
|
115
|
-
description: MusicBrainz Web Service wrapper with ActiveRecord-style models
|
116
|
-
email: magnolia_fan@me.com
|
57
|
+
version_requirements: *70115651803420
|
58
|
+
description:
|
59
|
+
email:
|
60
|
+
- magnolia_fan@me.com
|
117
61
|
executables: []
|
118
|
-
|
119
62
|
extensions: []
|
120
|
-
|
121
|
-
|
122
|
-
-
|
123
|
-
-
|
124
|
-
files:
|
125
|
-
- .document
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .rspec
|
126
67
|
- .travis.yml
|
127
68
|
- Gemfile
|
128
|
-
- LICENSE
|
129
|
-
- README.
|
69
|
+
- LICENSE
|
70
|
+
- README.md
|
130
71
|
- Rakefile
|
131
|
-
-
|
132
|
-
- lib/models/music_brainz.rb
|
133
|
-
- lib/models/music_brainz/artist.rb
|
134
|
-
- lib/models/music_brainz/base.rb
|
135
|
-
- lib/models/music_brainz/release.rb
|
136
|
-
- lib/models/music_brainz/release_group.rb
|
137
|
-
- lib/models/music_brainz/track.rb
|
72
|
+
- lib/deprecated.rb
|
138
73
|
- lib/musicbrainz.rb
|
74
|
+
- lib/musicbrainz/artist.rb
|
75
|
+
- lib/musicbrainz/base.rb
|
76
|
+
- lib/musicbrainz/release.rb
|
77
|
+
- lib/musicbrainz/release_group.rb
|
78
|
+
- lib/musicbrainz/track.rb
|
79
|
+
- lib/tools/cache.rb
|
80
|
+
- lib/tools/proxy.rb
|
81
|
+
- lib/version.rb
|
139
82
|
- musicbrainz.gemspec
|
140
83
|
- spec/requests/artist_spec.rb
|
84
|
+
- spec/requests/release_group_spec.rb
|
85
|
+
- spec/requests/release_spec.rb
|
86
|
+
- spec/requests/track_spec.rb
|
141
87
|
- spec/spec_helper.rb
|
142
|
-
- spec/
|
143
|
-
- test/helper.rb
|
144
|
-
- test/test_musicbrainz_artist.rb
|
145
|
-
- test/test_musicbrainz_release.rb
|
146
|
-
- test/test_musicbrainz_release_group.rb
|
147
|
-
- test/test_musicbrainz_track.rb
|
148
|
-
has_rdoc: true
|
88
|
+
- spec/tools/cache_spec.rb
|
149
89
|
homepage: http://github.com/magnolia-fan/musicbrainz
|
150
|
-
licenses:
|
90
|
+
licenses:
|
151
91
|
- MIT
|
152
92
|
post_install_message:
|
153
93
|
rdoc_options: []
|
154
|
-
|
155
|
-
require_paths:
|
94
|
+
require_paths:
|
156
95
|
- lib
|
157
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
97
|
none: false
|
159
|
-
requirements:
|
160
|
-
- -
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
|
163
|
-
|
164
|
-
- 0
|
165
|
-
version: "0"
|
166
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
103
|
none: false
|
168
|
-
requirements:
|
169
|
-
- -
|
170
|
-
- !ruby/object:Gem::Version
|
171
|
-
version:
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
172
108
|
requirements: []
|
173
|
-
|
174
109
|
rubyforge_project:
|
175
|
-
rubygems_version: 1.
|
110
|
+
rubygems_version: 1.8.10
|
176
111
|
signing_key:
|
177
112
|
specification_version: 3
|
178
|
-
summary: MusicBrainz Web Service wrapper
|
179
|
-
test_files:
|
180
|
-
|
113
|
+
summary: MusicBrainz Web Service wrapper with ActiveRecord-style models
|
114
|
+
test_files:
|
115
|
+
- spec/requests/artist_spec.rb
|
116
|
+
- spec/requests/release_group_spec.rb
|
117
|
+
- spec/requests/release_spec.rb
|
118
|
+
- spec/requests/track_spec.rb
|
119
|
+
- spec/spec_helper.rb
|
120
|
+
- spec/tools/cache_spec.rb
|