musicbrainz-ruby 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.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
|