rbrainz 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/LICENSE +25 -0
  2. data/README +11 -0
  3. data/Rakefile +110 -0
  4. data/TODO +24 -0
  5. data/doc/README.rdoc +68 -0
  6. data/examples/getartist.rb +54 -0
  7. data/lib/rbrainz.rb +11 -0
  8. data/lib/rbrainz/data/countrynames.rb +259 -0
  9. data/lib/rbrainz/data/languagenames.rb +404 -0
  10. data/lib/rbrainz/data/scriptnames.rb +64 -0
  11. data/lib/rbrainz/model.rb +48 -0
  12. data/lib/rbrainz/model/alias.rb +23 -0
  13. data/lib/rbrainz/model/artist.rb +54 -0
  14. data/lib/rbrainz/model/disc.rb +30 -0
  15. data/lib/rbrainz/model/entity.rb +72 -0
  16. data/lib/rbrainz/model/incomplete_date.rb +76 -0
  17. data/lib/rbrainz/model/label.rb +55 -0
  18. data/lib/rbrainz/model/mbid.rb +82 -0
  19. data/lib/rbrainz/model/release.rb +50 -0
  20. data/lib/rbrainz/model/release_event.rb +34 -0
  21. data/lib/rbrainz/model/track.rb +27 -0
  22. data/lib/rbrainz/webservice.rb +6 -0
  23. data/lib/rbrainz/webservice/filter.rb +132 -0
  24. data/lib/rbrainz/webservice/includes.rb +150 -0
  25. data/lib/rbrainz/webservice/mbxml.rb +404 -0
  26. data/lib/rbrainz/webservice/query.rb +61 -0
  27. data/lib/rbrainz/webservice/webservice.rb +69 -0
  28. data/test/lib/test_entity.rb +58 -0
  29. data/test/lib/testing_helper.rb +13 -0
  30. data/test/test-data/README +13 -0
  31. data/test/test-data/invalid/artist/basic_1.xml +12 -0
  32. data/test/test-data/invalid/artist/basic_2.xml +12 -0
  33. data/test/test-data/invalid/artist/empty_1.xml +0 -0
  34. data/test/test-data/invalid/artist/empty_2.xml +3 -0
  35. data/test/test-data/invalid/artist/empty_3.xml +7 -0
  36. data/test/test-data/invalid/artist/search_result_1.xml +11 -0
  37. data/test/test-data/valid/artist/Tchaikovsky-1.xml +90 -0
  38. data/test/test-data/valid/artist/Tori_Amos_1.xml +8 -0
  39. data/test/test-data/valid/artist/Tori_Amos_2.xml +53 -0
  40. data/test/test-data/valid/artist/Tori_Amos_3.xml +25 -0
  41. data/test/test-data/valid/artist/Tori_Amos_4.xml +14 -0
  42. data/test/test-data/valid/artist/Tori_Amos_5.xml +13 -0
  43. data/test/test-data/valid/artist/empty_1.xml +7 -0
  44. data/test/test-data/valid/artist/empty_2.xml +11 -0
  45. data/test/test-data/valid/artist/search_result_1.xml +19 -0
  46. data/test/test-data/valid/label/Atlantic_Records_1.xml +9 -0
  47. data/test/test-data/valid/label/Atlantic_Records_2.xml +11 -0
  48. data/test/test-data/valid/label/search_result_1.xml +14 -0
  49. data/test/test-data/valid/release/Highway_61_Revisited_1.xml +68 -0
  50. data/test/test-data/valid/release/Little_Earthquakes_1.xml +24 -0
  51. data/test/test-data/valid/release/Little_Earthquakes_2.xml +73 -0
  52. data/test/test-data/valid/release/Mission_Impossible_2.xml +155 -0
  53. data/test/test-data/valid/release/Under_the_Pink_1.xml +16 -0
  54. data/test/test-data/valid/release/Under_the_Pink_2.xml +14 -0
  55. data/test/test-data/valid/release/Under_the_Pink_3.xml +16 -0
  56. data/test/test-data/valid/release/search_result_1.xml +29 -0
  57. data/test/test-data/valid/track/Silent_All_These_Years_1.xml +7 -0
  58. data/test/test-data/valid/track/Silent_All_These_Years_2.xml +21 -0
  59. data/test/test-data/valid/track/Silent_All_These_Years_3.xml +16 -0
  60. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +30 -0
  61. data/test/test-data/valid/track/Silent_All_These_Years_5.xml +20 -0
  62. data/test/test-data/valid/track/search_result_1.xml +45 -0
  63. data/test/test-data/valid/user/User_1.xml +15 -0
  64. data/test/test_alias.rb +50 -0
  65. data/test/test_artist.rb +132 -0
  66. data/test/test_artist_filter.rb +36 -0
  67. data/test/test_artist_includes.rb +63 -0
  68. data/test/test_disc.rb +38 -0
  69. data/test/test_incomplete_date.rb +60 -0
  70. data/test/test_label.rb +129 -0
  71. data/test/test_label_filter.rb +36 -0
  72. data/test/test_label_includes.rb +55 -0
  73. data/test/test_mbid.rb +99 -0
  74. data/test/test_mbxml.rb +368 -0
  75. data/test/test_query.rb +24 -0
  76. data/test/test_release.rb +161 -0
  77. data/test/test_release_event.rb +67 -0
  78. data/test/test_release_filter.rb +57 -0
  79. data/test/test_release_includes.rb +73 -0
  80. data/test/test_track.rb +102 -0
  81. data/test/test_track_filter.rb +57 -0
  82. data/test/test_track_includes.rb +61 -0
  83. data/test/test_webservice.rb +23 -0
  84. metadata +138 -0
@@ -0,0 +1,63 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the ArtistIncludes class.
11
+ class TestArtistIncludes < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_includes
20
+ includes = Webservice::ArtistIncludes.new(
21
+ :aliases => true,
22
+ :artist_rels => true,
23
+ :release_rels => true,
24
+ :track_rels => true,
25
+ :label_rels => true,
26
+ :url_rels => true,
27
+ :releases => ['Album', 'Official'],
28
+ :va_releases => ['Album', 'Official']
29
+ )
30
+ result_string = includes.to_s
31
+ assert_equal 'inc=', result_string[0..3]
32
+
33
+ result_array = result_string[4..-1].split('%20')
34
+ assert result_array.include?('aliases')
35
+ assert result_array.include?('artist-rels')
36
+ assert result_array.include?('release-rels')
37
+ assert result_array.include?('track-rels')
38
+ assert result_array.include?('label-rels')
39
+ assert result_array.include?('url-rels')
40
+ assert result_array.include?('sa-Album')
41
+ assert result_array.include?('sa-Official')
42
+ assert result_array.include?('va-Album')
43
+ assert result_array.include?('va-Official')
44
+ end
45
+
46
+ def test_empty_includes
47
+ includes = Webservice::ArtistIncludes.new(
48
+ :aliases => false,
49
+ :artist_rels => false,
50
+ :release_rels => false,
51
+ :track_rels => false,
52
+ :label_rels => false,
53
+ :url_rels => false,
54
+ :releases => [],
55
+ :va_releases => []
56
+ )
57
+ assert_equal '', includes.to_s
58
+
59
+ includes = Webservice::ArtistIncludes.new({})
60
+ assert_equal '', includes.to_s
61
+ end
62
+
63
+ end
data/test/test_disc.rb ADDED
@@ -0,0 +1,38 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz/model'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the Disc model.
11
+ class TestDisc < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_new_disc
20
+ disc = nil
21
+ assert_nothing_raised {disc = Model::Disc.new}
22
+ end
23
+
24
+ def test_id
25
+ disc = Model::Disc.new
26
+ assert disc.id.nil?
27
+ assert_nothing_raised {disc.id = 'Tit3F0Do_sZ_7NbfM_1vlEbF0wo-'}
28
+ assert_equal 'Tit3F0Do_sZ_7NbfM_1vlEbF0wo-', disc.id
29
+ end
30
+
31
+ def test_sectors
32
+ disc = Model::Disc.new
33
+ assert disc.sectors.nil?
34
+ assert_nothing_raised {disc.sectors = 264432}
35
+ assert_equal 264432, disc.sectors
36
+ end
37
+
38
+ end
@@ -0,0 +1,60 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz/model'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the IncompleteDate model.
11
+ class TestIncompleteDate < Test::Unit::TestCase
12
+
13
+ def setup
14
+ @date_year_month_day = Model::IncompleteDate.new '1980-08-22'
15
+ @date_year_month = Model::IncompleteDate.new '1980-08'
16
+ @date_year = Model::IncompleteDate.new '1980'
17
+ end
18
+
19
+ def teardown
20
+ end
21
+
22
+ def test_new
23
+ date = nil
24
+ assert_nothing_raised {date = Model::IncompleteDate.new('1969-01-05')}
25
+ assert_equal 1969, date.year
26
+ assert_equal 1, date.month
27
+ assert_equal 5, date.day
28
+ assert_nothing_raised {date = Model::IncompleteDate.new(1980)}
29
+ assert_equal 1980, date.year
30
+ assert_nothing_raised {date = Model::IncompleteDate.new(Date.parse('1969-01-05'))}
31
+ assert_equal 1969, date.year
32
+ assert_equal 1, date.month
33
+ assert_equal 5, date.day
34
+ assert_nothing_raised {date = Model::IncompleteDate.new(nil)}
35
+ assert_equal nil, date.year
36
+ end
37
+
38
+ def test_invalid_format
39
+ assert_raise(ArgumentError) {date = Model::IncompleteDate.new('69-01-05')}
40
+ assert_raise(ArgumentError) {date = Model::IncompleteDate.new(69)}
41
+ assert_raise(ArgumentError) {date = Model::IncompleteDate.new('1969/01/05')}
42
+ assert_raise(ArgumentError) {date = Model::IncompleteDate.new('01-05-1969')}
43
+ end
44
+
45
+ def test_to_string
46
+ assert_equal '1980-08-22', @date_year_month_day.to_s
47
+ assert_equal '1980-08', @date_year_month.to_s
48
+ assert_equal '1980', @date_year.to_s
49
+ end
50
+
51
+ def test_equality
52
+ assert_equal(@date_year_month_day, @date_year_month,
53
+ "#{@date_year_month_day.to_s} <=> #{@date_year_month.to_s}")
54
+ assert_equal(@date_year_month, @date_year,
55
+ "#{@date_year_month.to_s} <=> #{@date_year.to_s}")
56
+ assert_equal(@date_year, @date_year_month_day,
57
+ "#{@date_year.to_s} <=> #{@date_year_month_day.to_s}")
58
+ end
59
+
60
+ end
@@ -0,0 +1,129 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test_entity'
7
+
8
+ # Unit test for the Label model.
9
+ class TestLabel < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @tested_class = Model::Label
13
+ @invalid_entity_types = [:artist, :release, :track]
14
+ @releases = [Model::Release.new, Model::Release.new]
15
+ end
16
+
17
+ def teardown
18
+ end
19
+
20
+ # Include the tests for Entity
21
+ include TestEntity
22
+
23
+ def test_new_label
24
+ label = nil
25
+ assert_nothing_raised {label = Model::Label.new}
26
+ assert label.is_a?(Model::Entity)
27
+ end
28
+
29
+ def test_name
30
+ label = Model::Label.new
31
+ assert label.name.nil?
32
+ assert_nothing_raised {label.name = 'Century Media'}
33
+ assert_equal 'Century Media', label.name
34
+ end
35
+
36
+ def test_sort_name
37
+ label = Model::Label.new
38
+ assert label.sort_name.nil?
39
+ assert_nothing_raised {label.sort_name = 'Century Media'}
40
+ assert_equal 'Century Media', label.sort_name
41
+ end
42
+
43
+ def test_disambiguation
44
+ label = Model::Label.new
45
+ assert label.disambiguation.nil?
46
+ assert_nothing_raised {label.disambiguation = 'Disambiguation comment'}
47
+ assert_equal 'Disambiguation comment', label.disambiguation
48
+ end
49
+
50
+ def test_code
51
+ label = Model::Label.new
52
+ assert label.code.nil?
53
+ assert_nothing_raised {label.code = '6975'}
54
+ assert_equal '6975', label.code
55
+ end
56
+
57
+ def test_country
58
+ label = Model::Label.new
59
+ assert label.country.nil?
60
+ assert_nothing_raised {label.country = 'DE'}
61
+ assert_equal 'DE', label.country
62
+ end
63
+
64
+ def test_type
65
+ label = Model::Label.new
66
+ assert label.type.nil?
67
+ assert_nothing_raised {label.type = Model::Label::TYPE_DISTRIBUTOR}
68
+ assert_equal Model::Label::TYPE_DISTRIBUTOR, label.type
69
+ assert_nothing_raised {label.type = Model::Label::TYPE_HOLDING}
70
+ assert_equal Model::Label::TYPE_HOLDING, label.type
71
+ assert_nothing_raised {label.type = Model::Label::TYPE_ORIGINAL_PRODUCTION}
72
+ assert_equal Model::Label::TYPE_ORIGINAL_PRODUCTION, label.type
73
+ assert_nothing_raised {label.type = Model::Label::TYPE_BOOTLEG_PRODUCTION}
74
+ assert_equal Model::Label::TYPE_BOOTLEG_PRODUCTION, label.type
75
+ assert_nothing_raised {label.type = Model::Label::TYPE_REISSUE_PRODUCTION}
76
+ assert_equal Model::Label::TYPE_REISSUE_PRODUCTION, label.type
77
+ end
78
+
79
+ def test_founding_date
80
+ label = Model::Label.new
81
+ date = Model::IncompleteDate.new '1988-04-18'
82
+ assert_nothing_raised {label.founding_date}
83
+ assert_equal nil, label.founding_date
84
+ assert_nothing_raised {label.founding_date = date}
85
+ assert_equal date, label.founding_date
86
+
87
+ # It should be able to supply a date as a string,
88
+ # but Label should convert it to an IncompleteDate.
89
+ assert_nothing_raised {label.founding_date = '1988-04-20'}
90
+ assert_equal Model::IncompleteDate.new('1988-04-20'), label.founding_date
91
+ end
92
+
93
+ def test_dissolving_date
94
+ label = Model::Label.new
95
+ date = Model::IncompleteDate.new '1988-04-18'
96
+ assert_nothing_raised {label.dissolving_date}
97
+ assert_equal nil, label.dissolving_date
98
+ assert_nothing_raised {label.dissolving_date = date}
99
+ assert_equal date, label.dissolving_date
100
+
101
+ # It should be able to supply a date as a string,
102
+ # but Label should convert it to an IncompleteDate.
103
+ assert_nothing_raised {label.dissolving_date = '1988-04-20'}
104
+ assert_equal Model::IncompleteDate.new('1988-04-20'), label.dissolving_date
105
+ end
106
+
107
+ # Many releases can be added
108
+ def test_add_and_remove_releases
109
+ label = Model::Label.new
110
+ assert_equal 0, label.releases.size
111
+ assert_nothing_raised {label.releases << @releases[0]}
112
+ assert_equal 1, label.releases.size
113
+ assert_nothing_raised {label.releases << @releases[1]}
114
+ assert_equal 2, label.releases.size
115
+
116
+ assert_nothing_raised {label.releases.delete @releases[1]}
117
+ assert_equal 1, label.releases.size
118
+ assert_nothing_raised {label.releases.delete @releases[0]}
119
+ assert_equal 0, label.releases.size
120
+ end
121
+
122
+ # You can pass an array of releases to add them all.
123
+ def test_add_several_releases_at_once
124
+ label = Model::Label.new
125
+ assert_nothing_raised {label.releases = @releases}
126
+ assert_equal @releases, label.releases
127
+ end
128
+
129
+ end
@@ -0,0 +1,36 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'testing_helper'
8
+ require 'rbrainz'
9
+ include MusicBrainz
10
+
11
+ # Unit test for the LabelFilter class.
12
+ class TestLabelFilter < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @filter_hash = {:name => 'Century Media', :limit => 10}
16
+ end
17
+
18
+ def teardown
19
+ end
20
+
21
+ def test_filter
22
+ filter = Webservice::LabelFilter.new(@filter_hash)
23
+ filter_string = filter.to_s
24
+ assert_not_equal '&', filter_string[0]
25
+
26
+ result_hash = query_string_to_hash filter_string
27
+ assert_equal @filter_hash[:name], result_hash['name'], filter_string
28
+ assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
29
+ end
30
+
31
+ def test_empty_filter
32
+ filter = Webservice::LabelFilter.new({})
33
+ assert_equal '', filter.to_s
34
+ end
35
+
36
+ end
@@ -0,0 +1,55 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the LabelIncludes class.
11
+ class TestLabelIncludes < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_includes
20
+ includes = Webservice::LabelIncludes.new(
21
+ :aliases => true,
22
+ :artist_rels => true,
23
+ :release_rels => true,
24
+ :track_rels => true,
25
+ :label_rels => true,
26
+ :url_rels => true
27
+ )
28
+ result_string = includes.to_s
29
+ assert_equal 'inc=', result_string[0..3]
30
+
31
+ result_array = result_string[4..-1].split('%20')
32
+ assert result_array.include?('aliases')
33
+ assert result_array.include?('artist-rels')
34
+ assert result_array.include?('release-rels')
35
+ assert result_array.include?('track-rels')
36
+ assert result_array.include?('label-rels')
37
+ assert result_array.include?('url-rels')
38
+ end
39
+
40
+ def test_empty_includes
41
+ includes = Webservice::LabelIncludes.new(
42
+ :aliases => false,
43
+ :artist_rels => false,
44
+ :release_rels => false,
45
+ :track_rels => false,
46
+ :label_rels => false,
47
+ :url_rels => false
48
+ )
49
+ assert_equal '', includes.to_s
50
+
51
+ includes = Webservice::LabelIncludes.new({})
52
+ assert_equal '', includes.to_s
53
+ end
54
+
55
+ end
data/test/test_mbid.rb ADDED
@@ -0,0 +1,99 @@
1
+ # $Id$
2
+ # Copyright (c) 2007, Philipp Wolfer
3
+ # All rights reserved.
4
+ # See LICENSE for permissions.
5
+
6
+ require 'test/unit'
7
+ require 'rbrainz/model'
8
+ include MusicBrainz
9
+
10
+ # Unit test for the MBID model.
11
+ class TestMBID < Test::Unit::TestCase
12
+
13
+ def setup
14
+ @valid_entities = [:artist, :release, :track, :label,
15
+ 'artist', 'release', 'track', 'label']
16
+ @valid_uuids = ['9d30e408-1559-448b-b491-2f8de1583ccf']
17
+ @invalid_uris = [nil, '', 'http://musicbrainz.org/labels/727ad90b-7ef4-48d2-8f16-c34016544822',
18
+ 'http://musicbrainz.org/label/727ad90b-7ef4-48d2-8f16-c34016544822?']
19
+ @invalid_entities = [nil, '', 'entity', :entity, 1]
20
+ @invalid_uuids = [nil, '', 1, '727ad90b7ef448d28f16c34016544822',
21
+ '727ad90b-7ef4-48d2-8f16-c34016544822.html',
22
+ '9g30e408-1559-448b-b491-2f8de1583ccf']
23
+ end
24
+
25
+ def teardown
26
+ end
27
+
28
+ def test_private_new
29
+ assert_raise(NoMethodError) {Model::MBID.new}
30
+ end
31
+
32
+ def test_from_uri
33
+ @valid_entities.each{|entity|
34
+ @valid_uuids.each{|uuid|
35
+ assert_nothing_raised \
36
+ {Model::MBID.from_uri 'http://musicbrainz.org/' + entity.to_s + '/' + uuid}
37
+ }
38
+ }
39
+ @invalid_uris.each{|uri|
40
+ assert_raise(Model::InvalidMBIDError) {Model::MBID.from_uri uri}
41
+ }
42
+ end
43
+
44
+ def test_from_uuid
45
+ @valid_entities.each{|entity|
46
+ @valid_uuids.each{|uuid|
47
+ assert_nothing_raised {Model::MBID.from_uuid entity, uuid}
48
+ }
49
+ }
50
+ @invalid_entities.each{|entity|
51
+ assert_raise(Model::UnknownEntityError, 'Invalid entity ' + entity.inspect + '') \
52
+ {Model::MBID.from_uuid entity, @valid_uuids[0]}
53
+ }
54
+ @invalid_uuids.each{|uuid|
55
+ assert_raise(Model::InvalidUUIDError, 'Invalid uuid ' + uuid.inspect + '') \
56
+ {Model::MBID.from_uuid @valid_entities[0], uuid}
57
+ }
58
+ end
59
+
60
+ def test_to_s
61
+ @valid_entities.each{|entity|
62
+ @valid_uuids.each{|uuid|
63
+ uri = 'http://musicbrainz.org/' + entity.to_s + '/' + uuid
64
+ mbid = Model::MBID.from_uuid entity, uuid
65
+ assert_equal uri, mbid.to_s
66
+ mbid = Model::MBID.from_uri uri
67
+ assert_equal uri, mbid.to_s
68
+ }
69
+ }
70
+ end
71
+
72
+ def test_read_attributes
73
+ @valid_entities.each{|entity|
74
+ @valid_uuids.each{|uuid|
75
+ mbid = Model::MBID.from_uuid entity, uuid
76
+ assert_equal entity.to_sym, mbid.entity
77
+ assert_equal uuid, mbid.uuid
78
+ mbid = Model::MBID.from_uri 'http://musicbrainz.org/' + entity.to_s + '/' + uuid
79
+ assert_equal entity.to_sym, mbid.entity
80
+ assert_equal uuid, mbid.uuid
81
+ }
82
+ }
83
+ end
84
+
85
+ # Test if the attributes are read only.
86
+ def test_write_attributes
87
+ mbid = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
88
+ assert_raise(NoMethodError) {mbid.entity = :release}
89
+ assert_raise(NoMethodError) {mbid.uuid = @valid_uuids[0]}
90
+ end
91
+
92
+ def test_equality
93
+ mbid1 = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
94
+ mbid2 = Model::MBID.from_uuid @valid_entities[0], @valid_uuids[0]
95
+ assert_equal mbid1, mbid1
96
+ assert_equal mbid1, mbid2
97
+ end
98
+
99
+ end