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/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
@@ -0,0 +1,6 @@
1
+ module MBWS
2
+ module Relations
3
+ class TrackRelations < RelationsBase
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ module MBWS
2
+ class Url
3
+ attr_accessor :type,:url
4
+
5
+ def initialize(hash)
6
+ @type = hash["type"]
7
+ @url = hash["target"]
8
+ end
9
+ end
10
+ module Relations
11
+ class UrlRelations < RelationsBase
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module MBWS
2
+ module VERSION
3
+ MAJOR = '0'
4
+ MINOR = '0'
5
+ TINY = '1'
6
+ BETA = Time.now.to_i.to_s
7
+ end
8
+
9
+ Version = [VERSION::MAJOR, VERSION::MINOR, VERSION::TINY, VERSION::BETA].compact * '.'
10
+ end
@@ -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
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'mbws'
4
+
5
+ class Test::Unit::TestCase
6
+ include MBWS
7
+ end
@@ -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