musicbrainz-ruby 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.rspec +3 -0
- data/Gemfile +3 -0
- data/README.markdown +9 -10
- data/Rakefile +10 -0
- data/lib/musicbrainz.rb +3 -81
- data/lib/musicbrainz/client.rb +97 -0
- data/lib/musicbrainz/request.rb +29 -0
- data/lib/musicbrainz/version.rb +3 -0
- data/musicbrainz-ruby.gemspec +24 -0
- data/spec/fixtures/artist_bad_request.txt +2 -0
- data/spec/fixtures/artist_by_id_diplo.xml +1 -0
- data/spec/fixtures/artist_search_diplo.xml +1 -0
- data/spec/fixtures/rating_auth_required.html +14 -0
- data/spec/fixtures/rating_by_id.xml +1 -0
- data/spec/musicbrainz/client_spec.rb +81 -0
- data/spec/musicbrainz/request_spec.rb +8 -0
- data/spec/spec_helper.rb +33 -0
- metadata +79 -94
data/.rspec
ADDED
data/Gemfile
ADDED
data/README.markdown
CHANGED
@@ -3,9 +3,10 @@ MusicBrainz-ruby
|
|
3
3
|
|
4
4
|
O hai, I [HTTParty][1]'d with ur [web service][2]. No offence, RBrainz gem.
|
5
5
|
|
6
|
-
This gem
|
6
|
+
This gem currently only supports the lookup, browse and search GET requests.
|
7
|
+
Data submission coming soon.
|
7
8
|
|
8
|
-
Returns [Mashes][3] of the metadata tag.
|
9
|
+
Returns [Mashes][3] of the metadata tag from MusicBrainz's XML responses.
|
9
10
|
|
10
11
|
[1]: https://github.com/jnunemaker/httparty
|
11
12
|
[2]: http://wiki.musicbrainz.org/XMLWebService
|
@@ -18,17 +19,15 @@ Install
|
|
18
19
|
|
19
20
|
Examples
|
20
21
|
--------
|
21
|
-
|
22
|
+
|
22
23
|
require 'musicbrainz'
|
23
24
|
brainz = MusicBrainz::Client.new('username', 'password')
|
24
|
-
|
25
|
+
|
25
26
|
# Find an artist by id, include artist relations
|
26
|
-
brainz.artist('45d15468-2918-4da4-870b-d6b880504f77', :inc => 'artist-rels')
|
27
|
-
# Search for artists with the
|
28
|
-
brainz.artist(
|
29
|
-
|
30
|
-
brainz.post('tag', :id => '45d15468-2918-4da4-870b-d6b880504f77', :entity => 'artist', :tags => 'post-everything')
|
31
|
-
|
27
|
+
brainz.artist(:mbid => '45d15468-2918-4da4-870b-d6b880504f77', :inc => 'artist-rels')
|
28
|
+
# Search for artists with the query 'Diplo'
|
29
|
+
brainz.artist(:query => 'Diplo')
|
30
|
+
|
32
31
|
MIT License
|
33
32
|
===========
|
34
33
|
|
data/Rakefile
ADDED
data/lib/musicbrainz.rb
CHANGED
@@ -1,81 +1,3 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
require 'httparty'
|
5
|
-
|
6
|
-
gem 'hashie', '~> 1.0'
|
7
|
-
require 'hashie'
|
8
|
-
|
9
|
-
module MusicBrainz
|
10
|
-
class Client
|
11
|
-
include HTTParty
|
12
|
-
include Hashie
|
13
|
-
|
14
|
-
base_uri 'musicbrainz.org/ws/1'
|
15
|
-
|
16
|
-
# Provide your username and password if you need to make authenticated calls
|
17
|
-
def initialize(username = nil, password = nil)
|
18
|
-
self.class.digest_auth username, password
|
19
|
-
end
|
20
|
-
|
21
|
-
def artist(musicbrainz_id = nil, params = {})
|
22
|
-
request("/artist/#{musicbrainz_id}", params)
|
23
|
-
end
|
24
|
-
|
25
|
-
def release_group(musicbrainz_id = nil, params = {})
|
26
|
-
request("/release-group/#{musicbrainz_id}", params)
|
27
|
-
end
|
28
|
-
|
29
|
-
def release(musicbrainz_id = nil, params = {})
|
30
|
-
request("/release/#{musicbrainz_id}", params)
|
31
|
-
end
|
32
|
-
|
33
|
-
def track(musicbrainz_id = nil, params = {})
|
34
|
-
request("/track/#{musicbrainz_id}", params)
|
35
|
-
end
|
36
|
-
|
37
|
-
def label(musicbrainz_id = nil, params = {})
|
38
|
-
request("/label/#{musicbrainz_id}", params)
|
39
|
-
end
|
40
|
-
|
41
|
-
def rating(params = {})
|
42
|
-
request('/rating/', params)
|
43
|
-
end
|
44
|
-
|
45
|
-
def tag(params = {})
|
46
|
-
request('/tag/', params)
|
47
|
-
end
|
48
|
-
|
49
|
-
def collection(params = {})
|
50
|
-
request('/collection/', params)
|
51
|
-
end
|
52
|
-
|
53
|
-
# provide a resource you want to post to, and the appropriate parameters
|
54
|
-
def post(resource, params = {})
|
55
|
-
response = self.class.post("/#{resource}/", :body => params)
|
56
|
-
if response.response.is_a? Net::HTTPOK
|
57
|
-
return true
|
58
|
-
else
|
59
|
-
raise response.response.message
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def request(path, params)
|
65
|
-
options = {:query => {:type => 'xml'}}
|
66
|
-
options[:query].merge!(params)
|
67
|
-
|
68
|
-
response = self.class.get(path, options)
|
69
|
-
|
70
|
-
if response.response.is_a? Net::HTTPBadRequest
|
71
|
-
raise ArgumentError, response.parsed_response
|
72
|
-
end
|
73
|
-
|
74
|
-
if response.response.is_a? Net::HTTPUnauthorized
|
75
|
-
raise response.response.message
|
76
|
-
end
|
77
|
-
|
78
|
-
Mash.new(response).metadata
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
1
|
+
require 'musicbrainz/version'
|
2
|
+
require 'musicbrainz/request'
|
3
|
+
require 'musicbrainz/client'
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'hashie'
|
3
|
+
|
4
|
+
module MusicBrainz
|
5
|
+
class Client
|
6
|
+
include HTTParty
|
7
|
+
include Hashie
|
8
|
+
|
9
|
+
DEFAULT_USER_AGENT = "musicbrainz-ruby gem #{MusicBrainz::VERSION}"
|
10
|
+
|
11
|
+
base_uri 'musicbrainz.org/ws/2'
|
12
|
+
|
13
|
+
# Provide your username and password to make authenticated calls
|
14
|
+
def initialize(options = {})
|
15
|
+
if options[:username] and options[:password]
|
16
|
+
self.class.digest_auth options[:username], options[:password]
|
17
|
+
end
|
18
|
+
if options[:'User-Agent']
|
19
|
+
self.class.headers 'User-Agent' => options[:'User-Agent']
|
20
|
+
else
|
21
|
+
self.class.headers 'User-Agent' => DEFAULT_USER_AGENT
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def artist(params = {})
|
26
|
+
request('artist', params)
|
27
|
+
end
|
28
|
+
|
29
|
+
def label(params = {})
|
30
|
+
request('label', params)
|
31
|
+
end
|
32
|
+
|
33
|
+
def recording(params = {})
|
34
|
+
request('recording', params)
|
35
|
+
end
|
36
|
+
|
37
|
+
def release_group(params = {})
|
38
|
+
request('release-group', params)
|
39
|
+
end
|
40
|
+
|
41
|
+
def work(params = {})
|
42
|
+
request('work', params)
|
43
|
+
end
|
44
|
+
|
45
|
+
def release(params = {})
|
46
|
+
request('release', params)
|
47
|
+
end
|
48
|
+
|
49
|
+
def recording(params = {})
|
50
|
+
request('recording', params)
|
51
|
+
end
|
52
|
+
|
53
|
+
def rating(params = {})
|
54
|
+
request('rating', params)
|
55
|
+
end
|
56
|
+
|
57
|
+
def tag(params = {})
|
58
|
+
request('tag', params)
|
59
|
+
end
|
60
|
+
|
61
|
+
def collection(params = {})
|
62
|
+
request('collection', params)
|
63
|
+
end
|
64
|
+
|
65
|
+
def discid(params = {})
|
66
|
+
request('discid', params)
|
67
|
+
end
|
68
|
+
|
69
|
+
def puid(params = {})
|
70
|
+
request('puid', params)
|
71
|
+
end
|
72
|
+
|
73
|
+
def isrc(params = {})
|
74
|
+
request('isrc', params)
|
75
|
+
end
|
76
|
+
|
77
|
+
def iswc(params = {})
|
78
|
+
request('iswc', params)
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def request(resource, params)
|
83
|
+
request = Request.new(resource, params)
|
84
|
+
response = self.class.get(request.path, request.options)
|
85
|
+
|
86
|
+
if response.response.is_a? Net::HTTPBadRequest
|
87
|
+
raise ArgumentError, response.parsed_response
|
88
|
+
end
|
89
|
+
|
90
|
+
if response.response.is_a? Net::HTTPUnauthorized
|
91
|
+
raise response.response.message
|
92
|
+
end
|
93
|
+
|
94
|
+
Mash.new(response).metadata
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module MusicBrainz
|
2
|
+
class Request
|
3
|
+
|
4
|
+
UNIQUE_IDENTIFIERS = %q{discid puid isrc iswc}
|
5
|
+
|
6
|
+
def initialize(resource, params)
|
7
|
+
@resource = resource
|
8
|
+
@params = params
|
9
|
+
@id = nil
|
10
|
+
|
11
|
+
if UNIQUE_IDENTIFIERS.include?(resource)
|
12
|
+
@id = params.delete(resource.to_sym)
|
13
|
+
elsif params.has_key?(:mbid)
|
14
|
+
@id = params.delete(:mbid)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def path
|
19
|
+
path = "/#{@resource}/#{@id}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def options
|
23
|
+
options = {}
|
24
|
+
options[:query] = @params unless @params.empty?
|
25
|
+
options
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'musicbrainz/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{musicbrainz-ruby}
|
7
|
+
s.version = MusicBrainz::VERSION
|
8
|
+
|
9
|
+
s.authors = ['Robin Tweedie']
|
10
|
+
s.date = %q{2011-02-02}
|
11
|
+
s.email = %q{robin@songkick.com}
|
12
|
+
s.summary = %q{Simple Ruby wrapper for MusicBrainz XML Web Service}
|
13
|
+
s.description = %q{Simple Ruby wrapper for MusicBrainz XML Web Service}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_runtime_dependency(%q<httparty>, ["~> 0.8.0"])
|
21
|
+
s.add_runtime_dependency(%q<hashie>, ["~> 1.1.0"])
|
22
|
+
s.add_development_dependency(%q<rspec>, [">= 2.4"])
|
23
|
+
s.add_development_dependency(%q<fakeweb>, [">= 1.3"])
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#"><artist id="a56bd8f9-8ef8-4d63-89a4-794ed1360dd2" type="Person"><name>Diplo</name><sort-name>Diplo</sort-name><life-span begin="1978-11-10"/></artist></metadata>
|
@@ -0,0 +1 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><metadata xmlns="http://musicbrainz.org/ns/mmd-1.0#" xmlns:ext="http://musicbrainz.org/ns/ext-1.0#"><artist-list offset="0" count="11"><artist type="Person" id="a56bd8f9-8ef8-4d63-89a4-794ed1360dd2" ext:score="100"><name>Diplo</name><sort-name>Diplo</sort-name><life-span begin="1978-11-10"/></artist><artist type="Group" id="e190ee5c-ddb9-402f-9f7b-809ed299b810" ext:score="50"><name>Diplo & Dr Evil</name><sort-name>Diplo & Dr Evil</sort-name></artist><artist type="Group" id="76abfb6b-5103-43ae-8304-0347a6f16097" ext:score="50"><name>Diplo & Tripledouble</name><sort-name>Diplo & Tripledouble</sort-name></artist><artist type="Group" id="f43d5e3c-e423-44ea-b4e3-a8508c88b874" ext:score="50"><name>Diplo & Santogold</name><sort-name>Diplo & Santogold</sort-name><life-span begin="2008"/></artist><artist type="Group" id="ed09875a-3bb0-44f2-8b51-24e7dc8cec49" ext:score="50"><name>Diplo & Laidback Luke</name><sort-name>Diplo & Laidback Luke</sort-name></artist><artist type="Unknown" id="961f11d7-bbee-4369-b49c-82b63cb8c325" ext:score="50"><name>Tiësto & Diplo</name><sort-name>Tiësto & Diplo</sort-name></artist><artist type="Unknown" id="9c9bc7d4-a4e2-4673-b074-921efe7ca0e2" ext:score="50"><name>Diplo & $mall ¢hange</name><sort-name>Diplo & $mall ¢hange</sort-name></artist><artist type="Group" id="d3eb024d-ea69-4d80-8cff-98095b9340b9" ext:score="50"><name>Diplo & Lil Jon</name><sort-name>Diplo & Lil Jon</sort-name></artist><artist type="Group" id="efb1ea9c-b886-4f95-9be6-3681ae13ed29" ext:score="50"><name>Tiesto vs. Diplo</name><sort-name>Tiesto vs. Diplo</sort-name></artist><artist type="Group" id="7b3201e2-c217-4df5-a92f-00c24a6fa063" ext:score="43"><name>Diplo & Martina Topley-Bird</name><sort-name>Diplo & Topley-Bird, Martina</sort-name></artist><artist type="Group" id="19f253de-109b-4086-98bf-65987edca55c" ext:score="17"><name>Hollertronix</name><sort-name>Hollertronix</sort-name></artist></artist-list></metadata>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
2
|
+
<HTML><HEAD>
|
3
|
+
<TITLE>401 Authorization Required</TITLE>
|
4
|
+
</HEAD><BODY>
|
5
|
+
<H1>Authorization Required</H1>
|
6
|
+
This server could not verify that you
|
7
|
+
are authorized to access the document
|
8
|
+
requested. Either you supplied the wrong
|
9
|
+
credentials (e.g., bad password), or your
|
10
|
+
browser doesn't understand how to supply
|
11
|
+
the credentials required.<P>
|
12
|
+
<HR>
|
13
|
+
<ADDRESS>Apache/1.3.33 Server at musicbrainz.org Port 80</ADDRESS>
|
14
|
+
</BODY></HTML>
|
@@ -0,0 +1 @@
|
|
1
|
+
<metadata><user-rating>5</user-rating></metadata>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MusicBrainz::Client do
|
4
|
+
let(:client){ MusicBrainz::Client.new }
|
5
|
+
subject { client }
|
6
|
+
|
7
|
+
it 'provides access to the core resources' do
|
8
|
+
resources = [:artist, :label, :recording, :release, :release_group, :work]
|
9
|
+
should respond_to(*resources).with(1).argument
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'provides access to the non-core resources' do
|
13
|
+
should respond_to(:rating, :tag, :collection).with(1).argument
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'provides access to the unique identifier lookups' do
|
17
|
+
should respond_to(:discid, :puid, :isrc, :iswc).with(1).argument
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'specifies a User-Agent in the headers' do
|
21
|
+
expected = /musicbrainz-ruby gem/
|
22
|
+
subject.class.default_options[:headers]['User-Agent'].should =~ expected
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when a User-Agent is provided' do
|
26
|
+
let(:user_agent) { 'Herp Derp v1.2.3' }
|
27
|
+
let(:client) { MusicBrainz::Client.new(:'User-Agent' => user_agent) }
|
28
|
+
|
29
|
+
it 'specifies the provided User-Agent in the headers' do
|
30
|
+
subject.class.default_options[:headers]['User-Agent'].should == user_agent
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when making a bad request' do
|
35
|
+
subject { client.artist } # request has no parameters
|
36
|
+
|
37
|
+
it 'raises an error' do
|
38
|
+
lambda {subject}.should raise_error(ArgumentError, /Must specify a least one parameter/)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when requesting resources requiring authentication' do
|
43
|
+
let(:mbid) { '4bd31567-70a8-4007-9ac6-3c68c7fc3d45' }
|
44
|
+
subject { client.rating(:id => mbid, :entity => 'artist') }
|
45
|
+
|
46
|
+
context 'and the resource is requested without authentication' do
|
47
|
+
it 'raises an error' do
|
48
|
+
lambda {subject}.should raise_error(RuntimeError, /Authorization Required/)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'and the resource is requested with authentication' do
|
53
|
+
let(:client) do
|
54
|
+
MusicBrainz::Client.new(:username => 'user', :password => 'password')
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns the resource' do
|
58
|
+
subject.user_rating.should == "5"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when searching for a resource' do
|
64
|
+
subject { client.artist(:query => 'Diplo') }
|
65
|
+
|
66
|
+
it 'returns a list of resources' do
|
67
|
+
subject.artist_list.artist.should be_kind_of(Array)
|
68
|
+
subject.artist_list.artist.size.should == 11
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'when fetching a resource by MusicBrainz id' do
|
73
|
+
subject { client.artist(:mbid => 'a56bd8f9-8ef8-4d63-89a4-794ed1360dd2') }
|
74
|
+
|
75
|
+
it 'returns a single resource' do
|
76
|
+
subject.artist.should be_kind_of(Hashie::Mash)
|
77
|
+
subject.artist.name.should == 'Diplo'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
gem 'fakeweb', '~> 1.3.0'
|
4
|
+
require 'fakeweb'
|
5
|
+
|
6
|
+
dir = File.expand_path(File.dirname(__FILE__))
|
7
|
+
require File.join(dir, '..', 'lib', 'musicbrainz')
|
8
|
+
|
9
|
+
FakeWeb.allow_net_connect = false
|
10
|
+
|
11
|
+
base = MusicBrainz::Client.base_uri
|
12
|
+
{:artist_search_diplo => base + '/artist/?query=Diplo',
|
13
|
+
:artist_by_id_diplo => base + '/artist/a56bd8f9-8ef8-4d63-89a4-794ed1360dd2'
|
14
|
+
}.each do |fixture, url|
|
15
|
+
path = File.join(dir, 'fixtures', "#{fixture}.xml")
|
16
|
+
body = File.read(path) if File.file?(path)
|
17
|
+
content_type = 'text/xml; charset=utf-8'
|
18
|
+
FakeWeb.register_uri(:get, url, :body => body, :content_type => content_type)
|
19
|
+
FakeWeb.register_uri(:head, url, :content_type => content_type)
|
20
|
+
end
|
21
|
+
|
22
|
+
bad_request = 'http://musicbrainz.org/ws/2/artist/'
|
23
|
+
body = File.read(File.join dir, 'fixtures', "artist_bad_request.txt")
|
24
|
+
FakeWeb.register_uri(:get, bad_request, :body => body, :status => ['400', 'Bad Request'])
|
25
|
+
FakeWeb.register_uri(:head, bad_request, :status => ['400', 'Bad Request'])
|
26
|
+
|
27
|
+
rating_request = 'http://musicbrainz.org/ws/2/rating/?id=4bd31567-70a8-4007-9ac6-3c68c7fc3d45&entity=artist'
|
28
|
+
error_body = File.read(File.join dir, 'fixtures', "rating_auth_required.html")
|
29
|
+
rating_body = File.read(File.join dir, 'fixtures', "rating_by_id.xml")
|
30
|
+
FakeWeb.register_uri(:get, rating_request, [{:body => error_body, :status => ["401", "Authorization Required"]},
|
31
|
+
{:body => rating_body, :content_type => 'text/xml; charset=utf-8'}])
|
32
|
+
FakeWeb.register_uri(:head, rating_request, [{:status => ["401", "Authorization Required"]},
|
33
|
+
{:content_type => 'text/xml; charset=utf-8'}])
|
metadata
CHANGED
@@ -1,129 +1,114 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: musicbrainz-ruby
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 2
|
10
|
-
version: 0.3.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Robin Tweedie
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-02-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: httparty
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70317351955220 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 7
|
33
|
-
- 3
|
34
|
-
version: 0.7.3
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.0
|
35
22
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: hashie
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: *70317351955220
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hashie
|
27
|
+
requirement: &70317351954660 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
29
|
+
requirements:
|
43
30
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 0
|
49
|
-
version: "1.0"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.0
|
50
33
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: rspec
|
54
34
|
prerelease: false
|
55
|
-
|
35
|
+
version_requirements: *70317351954660
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70317351954140 !ruby/object:Gem::Requirement
|
56
39
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
segments:
|
62
|
-
- 2
|
63
|
-
- 4
|
64
|
-
version: "2.4"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.4'
|
65
44
|
type: :development
|
66
|
-
version_requirements: *id003
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: fakeweb
|
69
45
|
prerelease: false
|
70
|
-
|
46
|
+
version_requirements: *70317351954140
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: fakeweb
|
49
|
+
requirement: &70317351953380 !ruby/object:Gem::Requirement
|
71
50
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
segments:
|
77
|
-
- 1
|
78
|
-
- 3
|
79
|
-
version: "1.3"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
80
55
|
type: :development
|
81
|
-
|
82
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70317351953380
|
58
|
+
description: Simple Ruby wrapper for MusicBrainz XML Web Service
|
83
59
|
email: robin@songkick.com
|
84
60
|
executables: []
|
85
|
-
|
86
61
|
extensions: []
|
87
|
-
|
88
|
-
|
89
|
-
-
|
90
|
-
|
62
|
+
extra_rdoc_files: []
|
63
|
+
files:
|
64
|
+
- .gitignore
|
65
|
+
- .rspec
|
66
|
+
- Gemfile
|
91
67
|
- README.markdown
|
68
|
+
- Rakefile
|
92
69
|
- lib/musicbrainz.rb
|
93
|
-
|
94
|
-
|
70
|
+
- lib/musicbrainz/client.rb
|
71
|
+
- lib/musicbrainz/request.rb
|
72
|
+
- lib/musicbrainz/version.rb
|
73
|
+
- musicbrainz-ruby.gemspec
|
74
|
+
- spec/fixtures/artist_bad_request.txt
|
75
|
+
- spec/fixtures/artist_by_id_diplo.xml
|
76
|
+
- spec/fixtures/artist_search_diplo.xml
|
77
|
+
- spec/fixtures/rating_auth_required.html
|
78
|
+
- spec/fixtures/rating_by_id.xml
|
79
|
+
- spec/musicbrainz/client_spec.rb
|
80
|
+
- spec/musicbrainz/request_spec.rb
|
81
|
+
- spec/spec_helper.rb
|
82
|
+
homepage:
|
95
83
|
licenses: []
|
96
|
-
|
97
84
|
post_install_message:
|
98
|
-
rdoc_options:
|
99
|
-
|
100
|
-
- README.markdown
|
101
|
-
require_paths:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
102
87
|
- lib
|
103
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
89
|
none: false
|
105
|
-
requirements:
|
106
|
-
- -
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
|
109
|
-
|
110
|
-
- 0
|
111
|
-
version: "0"
|
112
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
95
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
121
100
|
requirements: []
|
122
|
-
|
123
101
|
rubyforge_project:
|
124
|
-
rubygems_version: 1.
|
102
|
+
rubygems_version: 1.8.10
|
125
103
|
signing_key:
|
126
104
|
specification_version: 3
|
127
105
|
summary: Simple Ruby wrapper for MusicBrainz XML Web Service
|
128
|
-
test_files:
|
129
|
-
|
106
|
+
test_files:
|
107
|
+
- spec/fixtures/artist_bad_request.txt
|
108
|
+
- spec/fixtures/artist_by_id_diplo.xml
|
109
|
+
- spec/fixtures/artist_search_diplo.xml
|
110
|
+
- spec/fixtures/rating_auth_required.html
|
111
|
+
- spec/fixtures/rating_by_id.xml
|
112
|
+
- spec/musicbrainz/client_spec.rb
|
113
|
+
- spec/musicbrainz/request_spec.rb
|
114
|
+
- spec/spec_helper.rb
|