rbrainz 0.1.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.
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