bts-mbws 0.0.1
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/COPYING +339 -0
- data/INSTALL +3 -0
- data/README +44 -0
- data/Rakefile +33 -0
- data/bin/console +3 -0
- data/bin/setup.rb +3 -0
- data/lib/mbws.rb +19 -0
- data/lib/mbws/artist.rb +84 -0
- data/lib/mbws/artist_relations.rb +6 -0
- data/lib/mbws/base.rb +7 -0
- data/lib/mbws/exceptions.rb +25 -0
- data/lib/mbws/label.rb +35 -0
- data/lib/mbws/label_relations.rb +6 -0
- data/lib/mbws/parsing.rb +43 -0
- data/lib/mbws/relations.rb +43 -0
- data/lib/mbws/release.rb +78 -0
- data/lib/mbws/release_relations.rb +6 -0
- data/lib/mbws/request.rb +45 -0
- data/lib/mbws/resource.rb +117 -0
- data/lib/mbws/track.rb +57 -0
- data/lib/mbws/track_relations.rb +6 -0
- data/lib/mbws/url_relations.rb +14 -0
- data/lib/mbws/version.rb +10 -0
- data/test/artist_test.rb +114 -0
- data/test/label_test.rb +32 -0
- data/test/release_test.rb +55 -0
- data/test/request_test.rb +12 -0
- data/test/test_helper.rb +7 -0
- data/test/track_test.rb +26 -0
- data/test/url_relations_test.rb +19 -0
- metadata +105 -0
data/lib/mbws/track.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module MBWS
|
2
|
+
class Track < Resource
|
3
|
+
|
4
|
+
attr_accessor :title,:sequence,:duration,:language,:script
|
5
|
+
|
6
|
+
def initialize(hash, options = {})
|
7
|
+
@release = nil
|
8
|
+
@artist = nil
|
9
|
+
@puids = nil
|
10
|
+
|
11
|
+
super
|
12
|
+
|
13
|
+
@title = hash["title"]
|
14
|
+
@duration = hash["duration"]
|
15
|
+
end
|
16
|
+
|
17
|
+
# This assumes that there is only one release attached to the
|
18
|
+
# track. The standard allows for multiple releases but I'm not
|
19
|
+
# sure if any track actually have multiple release.
|
20
|
+
def release
|
21
|
+
return @release if @release
|
22
|
+
xml = Request.get("track/#{@mid}",:inc => "releases")
|
23
|
+
parse_releases(xml["track"][0])
|
24
|
+
end
|
25
|
+
|
26
|
+
def artist
|
27
|
+
return @artist if @artist
|
28
|
+
track_xml = Request.get("track/#{self.mid}",:inc => "artist")
|
29
|
+
parse_artist(track_xml["track"][0])
|
30
|
+
end
|
31
|
+
|
32
|
+
def puids
|
33
|
+
return @puids if @puids
|
34
|
+
track_xml = Request.get("track/#{self.mid}",:inc => "puids")
|
35
|
+
parse_puids(track_xml["track"][0])
|
36
|
+
@puids
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def parse_releases(xml)
|
41
|
+
# We do a find instead of creating a new one because including
|
42
|
+
# a release doesn't include the asin but I think it would be better
|
43
|
+
# to make Release#asin a method and have it grab the asin if it needs
|
44
|
+
# it
|
45
|
+
# FIXME
|
46
|
+
@release = Release.find(xml["release-list"]["release"][0]["id"])
|
47
|
+
@sequence = xml["release-list"]["release"][0]["track-list"]["offset"].to_i + 1
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_puids(xml)
|
51
|
+
@puids = []
|
52
|
+
xml["puid-list"]["puid"].each do |p|
|
53
|
+
@puids.push(p["id"])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/mbws/version.rb
ADDED
data/test/artist_test.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBArtistTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_find_by_id
|
7
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
8
|
+
assert_equal a.mid,"c0b2500e-0cef-4130-869d-732b23ed9df5"
|
9
|
+
assert_equal "Tori Amos",a.name
|
10
|
+
assert_equal "Amos, Tori",a.sort_name
|
11
|
+
assert_equal "Person",a.type
|
12
|
+
assert_equal "1963-08-22",a.begin
|
13
|
+
assert_equal nil,a.end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_find_by_id_with_includes
|
17
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5",
|
18
|
+
:inc => %W(url-rels track-rels release-rels artist-rels aliases),
|
19
|
+
:limit => 1)
|
20
|
+
|
21
|
+
assert_equal a.mid,"c0b2500e-0cef-4130-869d-732b23ed9df5"
|
22
|
+
assert a.instance_variable_get("@url_rels")
|
23
|
+
assert a.instance_variable_get("@track_rels")
|
24
|
+
assert a.instance_variable_get("@artist_rels")
|
25
|
+
assert a.instance_variable_get("@release_rels")
|
26
|
+
assert a.instance_variable_get("@aliases")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_find_by_name
|
30
|
+
a = MBWS::Artist.find(:name => "Jaw")
|
31
|
+
a.each do |artist|
|
32
|
+
assert_match(/Jaw/i,artist.name)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_disambiguation
|
37
|
+
a = MBWS::Artist.find("74a627ea-539d-4f27-b6c2-d85de82c759c")
|
38
|
+
assert_not_equal nil,a.disambiguation
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_url_relations
|
42
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
43
|
+
@url_relations = a.url_rels
|
44
|
+
assert_not_nil @url_relations
|
45
|
+
assert_not_equal 0,@url_relations.size
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_artist_relations
|
49
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
50
|
+
@artist_relations = a.artist_rels
|
51
|
+
assert_not_nil @artist_relations
|
52
|
+
assert_not_equal 0,@artist_relations.size
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_release_relations
|
56
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
57
|
+
@release_relations = a.release_rels
|
58
|
+
assert_not_nil @release_relations
|
59
|
+
assert_not_equal 0,@release_relations.size
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_track_relations
|
63
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
64
|
+
@track_relations = a.track_rels
|
65
|
+
assert_not_nil @track_relations
|
66
|
+
assert_not_equal 0,@track_relations.size
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_aliases
|
70
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
71
|
+
@aliases = a.aliases
|
72
|
+
assert_not_nil @aliases
|
73
|
+
assert_not_equal 0,@aliases.size
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_releases
|
77
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
78
|
+
releases = a.releases()
|
79
|
+
releases.each do |r|
|
80
|
+
#assert_equal "Tori Amos",r.artist_name
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_sa_releases
|
85
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
86
|
+
releases = a.sa_releases(:status => :Official)
|
87
|
+
releases.each do |r|
|
88
|
+
assert_equal "Official",r.status
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_va_releases
|
93
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
94
|
+
releases = a.va_releases(:status => :Official)
|
95
|
+
releases.each do |r|
|
96
|
+
assert_equal "Official",r.status
|
97
|
+
end
|
98
|
+
end
|
99
|
+
def test_all_sa_releases
|
100
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
101
|
+
releases = a.all_sa_releases
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_invalid_mbid
|
105
|
+
invalid_mids = ["c0b2500e-0cef-4130-869d",
|
106
|
+
"c0b2500e-0cef-4130-869d-732b23ed9df5-fake"]
|
107
|
+
|
108
|
+
invalid_mids.each do |mid|
|
109
|
+
assert_raises(InvalidUUID) {
|
110
|
+
MBWS::Artist.find(mid)
|
111
|
+
}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
data/test/label_test.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBLabelTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_find_by_id
|
7
|
+
l = MBWS::Label.find("5073df0c-0661-4277-820e-20ae13afba9c")
|
8
|
+
assert_equal "5073df0c-0661-4277-820e-20ae13afba9c",l.mid
|
9
|
+
assert_equal "Plan-it-X",l.name
|
10
|
+
assert_equal "Production",l.type
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_begin_label_code
|
14
|
+
l = MBWS::Label.find("022fe361-596c-43a0-8e22-bad712bb9548")
|
15
|
+
assert_equal "542",l.label_code
|
16
|
+
assert_equal "1972",l.begin
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_find_by_query
|
20
|
+
ls = MBWS::Label.find(:name => "Plan-it-X")
|
21
|
+
assert_equal "5073df0c-0661-4277-820e-20ae13afba9c",ls[0].mid
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_find_by_id_with_include
|
25
|
+
l = MBWS::Label.find("5073df0c-0661-4277-820e-20ae13afba9c",
|
26
|
+
:inc => %W(aliases artist-rels label-rels release-rels track-rels url-rels))
|
27
|
+
assert l.aliases
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_relations_after_find
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBReleaseTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_find_by_id
|
7
|
+
a = MBWS::Release.find("02232360-337e-4a3f-ad20-6cdd4c34288c")
|
8
|
+
assert_equal "02232360-337e-4a3f-ad20-6cdd4c34288c",a.mid
|
9
|
+
assert_equal "Album",a.type
|
10
|
+
assert_equal "Official",a.status
|
11
|
+
assert a.asin
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_find_by_id_with_includes
|
15
|
+
a = MBWS::Release.find("02232360-337e-4a3f-ad20-6cdd4c34288c",
|
16
|
+
:inc => %W(artist discs counts release-events tracks artist-rels))
|
17
|
+
assert_equal "02232360-337e-4a3f-ad20-6cdd4c34288c",a.mid
|
18
|
+
# Artist
|
19
|
+
assert_equal "Tori Amos",a.artist.name
|
20
|
+
assert_equal "c0b2500e-0cef-4130-869d-732b23ed9df5",a.artist.mid
|
21
|
+
# Counts
|
22
|
+
# TODO
|
23
|
+
# Release Events
|
24
|
+
assert a.release_events.size > 2
|
25
|
+
assert a.release_events[0]["date"]
|
26
|
+
assert a.release_events[0]["country"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_find_by_title
|
30
|
+
a = MBWS::Release.find(:title => "Jaw")
|
31
|
+
a.each do |artist|
|
32
|
+
assert_match(/Jaw/i,artist.title)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_find_by_discid
|
37
|
+
a = MBWS::Release.find(:discid => "ipi2T32n0nneDSAYLV85Q9JZqvU-")
|
38
|
+
assert_equal a[0].mid, "56db4963-266b-4c39-8515-57ee7a11f0d1"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_by_artist
|
42
|
+
a = MBWS::Release.find(:artistid => "c0b2500e-0cef-4130-869d-732b23ed9df5")
|
43
|
+
a.each do |album|
|
44
|
+
assert album.status
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_discs
|
49
|
+
a = MBWS::Release.find("02232360-337e-4a3f-ad20-6cdd4c34288c")
|
50
|
+
@discs = a.discs
|
51
|
+
assert_not_nil @discs
|
52
|
+
assert_not_equal 0,@discs.size
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBRequestTest < Test::Unit::TestCase
|
5
|
+
def test_limiter
|
6
|
+
assert_nothing_raised do
|
7
|
+
30.times do
|
8
|
+
Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/test/test_helper.rb
ADDED
data/test/track_test.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBReleaseTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_find_by_id
|
7
|
+
t = MBWS::Track.find("f797c9de-fa13-46b4-8032-4e7dcb4a2e29")
|
8
|
+
assert_equal "f797c9de-fa13-46b4-8032-4e7dcb4a2e29",t.mid
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_includes
|
12
|
+
t = MBWS::Track.find("f797c9de-fa13-46b4-8032-4e7dcb4a2e29",
|
13
|
+
:inc => %W(releases artist puids artist-rels label-rels release-rels track-rels url-rels))
|
14
|
+
assert_equal "f797c9de-fa13-46b4-8032-4e7dcb4a2e29",t.mid
|
15
|
+
assert t.instance_variable_get("@release")
|
16
|
+
assert t.instance_variable_get("@artist")
|
17
|
+
assert t.instance_variable_get("@puids")
|
18
|
+
assert_not_equal 0,t.puids.size
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_release
|
22
|
+
t = MBWS::Track.find("f797c9de-fa13-46b4-8032-4e7dcb4a2e29")
|
23
|
+
assert t.release
|
24
|
+
assert t.release.asin
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'mbws'
|
4
|
+
class MBUrlRelationsTest < Test::Unit::TestCase
|
5
|
+
def test_artist
|
6
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5",:inc => "url-rels")
|
7
|
+
a.url_rels.each do |r|
|
8
|
+
assert r[:url]
|
9
|
+
assert r[:type]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_relations_by_type
|
14
|
+
a = MBWS::Artist.find("c0b2500e-0cef-4130-869d-732b23ed9df5",:inc => "url-rels")
|
15
|
+
a.url_rels.relations_by_type("Discography").each do |r|
|
16
|
+
assert_equal "Discography",r[:type]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bts-mbws
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bobby Potter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-05-16 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: xml-simple
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: Client library for MusicBrainz's XML API
|
26
|
+
email: bobby.potter@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
|
+
- COPYING
|
34
|
+
- INSTALL
|
35
|
+
files:
|
36
|
+
- Rakefile
|
37
|
+
- README
|
38
|
+
- COPYING
|
39
|
+
- INSTALL
|
40
|
+
- lib/mbws/artist.rb
|
41
|
+
- lib/mbws/artist_relations.rb
|
42
|
+
- lib/mbws/base.rb
|
43
|
+
- lib/mbws/exceptions.rb
|
44
|
+
- lib/mbws/label.rb
|
45
|
+
- lib/mbws/label_relations.rb
|
46
|
+
- lib/mbws/parsing.rb
|
47
|
+
- lib/mbws/relations.rb
|
48
|
+
- lib/mbws/release.rb
|
49
|
+
- lib/mbws/release_relations.rb
|
50
|
+
- lib/mbws/request.rb
|
51
|
+
- lib/mbws/resource.rb
|
52
|
+
- lib/mbws/track.rb
|
53
|
+
- lib/mbws/track_relations.rb
|
54
|
+
- lib/mbws/url_relations.rb
|
55
|
+
- lib/mbws/version.rb
|
56
|
+
- lib/mbws.rb
|
57
|
+
- bin/console
|
58
|
+
- bin/setup.rb
|
59
|
+
- test/artist_test.rb
|
60
|
+
- test/label_test.rb
|
61
|
+
- test/release_test.rb
|
62
|
+
- test/request_test.rb
|
63
|
+
- test/test_helper.rb
|
64
|
+
- test/track_test.rb
|
65
|
+
- test/url_relations_test.rb
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://mbws.rubyforge.org
|
68
|
+
licenses:
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options:
|
71
|
+
- --title
|
72
|
+
- MBWS -- Support for MusicBrainz's XML api
|
73
|
+
- --main
|
74
|
+
- README
|
75
|
+
- --line-numbers
|
76
|
+
- --inline-source
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
version:
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "0"
|
90
|
+
version:
|
91
|
+
requirements: []
|
92
|
+
|
93
|
+
rubyforge_project: mbws
|
94
|
+
rubygems_version: 1.3.5
|
95
|
+
signing_key:
|
96
|
+
specification_version: 2
|
97
|
+
summary: Client library for MusicBrainz's XML API
|
98
|
+
test_files:
|
99
|
+
- test/artist_test.rb
|
100
|
+
- test/label_test.rb
|
101
|
+
- test/release_test.rb
|
102
|
+
- test/request_test.rb
|
103
|
+
- test/test_helper.rb
|
104
|
+
- test/track_test.rb
|
105
|
+
- test/url_relations_test.rb
|