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,67 @@
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 ReleaseEvent model.
11
+ class TestReleaseEvent < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_date
20
+ event = Model::ReleaseEvent.new
21
+ date = Model::IncompleteDate.new '2007-04-18'
22
+ assert_nothing_raised {event.date}
23
+ assert_equal nil, event.date
24
+ assert_nothing_raised {event.date = date}
25
+ assert_equal date, event.date
26
+
27
+ # It should be able to supply a date as a string,
28
+ # but EventRelease should convert it to an IncompleteDate.
29
+ assert_nothing_raised {event.date = '2007-04-20'}
30
+ assert_equal Model::IncompleteDate.new('2007-04-20'), event.date
31
+ end
32
+
33
+ def test_country
34
+ event = Model::ReleaseEvent.new
35
+ assert_nothing_raised {event.country}
36
+ assert_equal nil, event.country
37
+ assert_nothing_raised {event.country = 'SE'}
38
+ assert_equal 'SE', event.country
39
+ end
40
+
41
+ def test_catalog_number
42
+ event = Model::ReleaseEvent.new
43
+ assert_nothing_raised {event.catalog_number}
44
+ assert_equal nil, event.catalog_number
45
+ assert_nothing_raised {event.catalog_number = 'CM 77615-0'}
46
+ assert_equal 'CM 77615-0', event.catalog_number
47
+ end
48
+
49
+ def test_barcode
50
+ event = Model::ReleaseEvent.new
51
+ assert_nothing_raised {event.barcode}
52
+ assert_equal nil, event.barcode
53
+ assert_nothing_raised {event.barcode = '5051099761506'}
54
+ assert_equal '5051099761506', event.barcode
55
+ end
56
+
57
+ def test_label
58
+ event = Model::ReleaseEvent.new
59
+ label = Model::Label.new
60
+ label.name = 'Century Media'
61
+ assert_nothing_raised {event.label}
62
+ assert_equal nil, event.label
63
+ assert_nothing_raised {event.label = label}
64
+ assert_equal label, event.label
65
+ end
66
+
67
+ end
@@ -0,0 +1,57 @@
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 ReleaseFilter class.
12
+ class TestReleaseFilter < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @filter_hash = {
16
+ :title => 'Haven',
17
+ :discid => 'D5nZLROSPGvr75fj0C72YfowjiQ-',
18
+ :artist => 'Dark Tranquillity',
19
+ :artistid => '9d30e408-1559-448b-b491-2f8de1583ccf',
20
+ :releasetypes => 'Album Official',
21
+ :count => 12,
22
+ :date => '2000-07-17',
23
+ :asin => 'B00004VVW9',
24
+ :lang => 'ENG',
25
+ :script => 'Latn',
26
+ :limit => 10
27
+ }
28
+ end
29
+
30
+ def teardown
31
+ end
32
+
33
+ def test_filter
34
+ filter = Webservice::ReleaseFilter.new(@filter_hash)
35
+ filter_string = filter.to_s
36
+ assert_not_equal '&', filter_string[0]
37
+
38
+ result_hash = query_string_to_hash filter_string
39
+ assert_equal @filter_hash[:title], result_hash['title'], filter_string
40
+ assert_equal @filter_hash[:discid], result_hash['discid'], filter_string
41
+ assert_equal @filter_hash[:artist], result_hash['artist'], filter_string
42
+ assert_equal @filter_hash[:artistid], result_hash['artistid'], filter_string
43
+ assert_equal @filter_hash[:releasetypes], result_hash['releasetypes'], filter_string
44
+ assert_equal @filter_hash[:count].to_s, result_hash['count'], filter_string
45
+ assert_equal @filter_hash[:date], result_hash['date'], filter_string
46
+ assert_equal @filter_hash[:asin], result_hash['asin'], filter_string
47
+ assert_equal @filter_hash[:lang], result_hash['lang'], filter_string
48
+ assert_equal @filter_hash[:script], result_hash['script'], filter_string
49
+ assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
50
+ end
51
+
52
+ def test_empty_filter
53
+ filter = Webservice::ReleaseFilter.new({})
54
+ assert_equal '', filter.to_s
55
+ end
56
+
57
+ end
@@ -0,0 +1,73 @@
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 ReleaseIncludes class.
11
+ class TestReleaseIncludes < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_includes
20
+ includes = Webservice::ReleaseIncludes.new(
21
+ :artist => true,
22
+ :counts => true,
23
+ :release_events => true,
24
+ :discs => true,
25
+ :tracks => true,
26
+ :labels => true,
27
+ :artist_rels => true,
28
+ :release_rels => true,
29
+ :track_rels => true,
30
+ :label_rels => true,
31
+ :url_rels => true,
32
+ :track_level_rels => true
33
+ )
34
+ result_string = includes.to_s
35
+ assert_equal 'inc=', result_string[0..3]
36
+
37
+ result_array = result_string[4..-1].split('%20')
38
+ assert result_array.include?('artist')
39
+ assert result_array.include?('counts')
40
+ assert result_array.include?('release-events')
41
+ assert result_array.include?('discs')
42
+ assert result_array.include?('tracks')
43
+ assert result_array.include?('labels')
44
+ assert result_array.include?('artist-rels')
45
+ assert result_array.include?('release-rels')
46
+ assert result_array.include?('track-rels')
47
+ assert result_array.include?('label-rels')
48
+ assert result_array.include?('url-rels')
49
+ assert result_array.include?('track-level-rels')
50
+ end
51
+
52
+ def test_empty_includes
53
+ includes = Webservice::ReleaseIncludes.new(
54
+ :artist => false,
55
+ :counts => false,
56
+ :release_events => false,
57
+ :discs => false,
58
+ :tracks => false,
59
+ :labels => false,
60
+ :artist_rels => false,
61
+ :release_rels => false,
62
+ :track_rels => false,
63
+ :label_rels => false,
64
+ :url_rels => false,
65
+ :track_level_rels => false
66
+ )
67
+ assert_equal '', includes.to_s
68
+
69
+ includes = Webservice::ReleaseIncludes.new({})
70
+ assert_equal '', includes.to_s
71
+ end
72
+
73
+ end
@@ -0,0 +1,102 @@
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 Track model.
9
+ class TestTrack < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @tested_class = Model::Track
13
+ @invalid_entity_types = [:artist, :release, :label]
14
+
15
+ @artist = Model::Artist.new
16
+ @valid_puids = ['9d30e408-1559-448b-b491-2f8de1583ccf',
17
+ '727ad90b-7ef4-48d2-8f16-c34016544822']
18
+ @releases = [Model::Release.new, Model::Release.new]
19
+ end
20
+
21
+ def teardown
22
+ end
23
+
24
+ # Include the tests for Entity
25
+ include TestEntity
26
+
27
+ def test_new_track
28
+ track = nil
29
+ assert_nothing_raised {track = Model::Track.new}
30
+ assert track.is_a?(Model::Entity)
31
+ end
32
+
33
+ def test_title
34
+ track = Model::Track.new
35
+ assert track.title.nil?
36
+ assert_nothing_raised {track.title = 'Indifferent Suns'}
37
+ assert_equal 'Indifferent Suns', track.title
38
+ end
39
+
40
+ # Duration is given in milliseconds.
41
+ # It must be a positive integer or nil for unknown.
42
+ def test_duration
43
+ track = Model::Track.new
44
+ assert track.duration.nil?
45
+ assert_nothing_raised {track.duration = 215800}
46
+ assert_equal 215800, track.duration
47
+ end
48
+
49
+ def test_artist
50
+ track = Model::Track.new
51
+ assert track.artist.nil?
52
+ assert_nothing_raised {track.artist = @artist}
53
+ assert_equal @artist, track.artist
54
+ assert_nothing_raised {track.artist = nil}
55
+ assert_equal nil, track.artist
56
+ end
57
+
58
+ # Many PUIDs can be added
59
+ def test_add_and_remove_puids
60
+ track = Model::Track.new
61
+ assert_equal 0, track.puids.size
62
+ assert_nothing_raised {track.puids << @valid_puids[0]}
63
+ assert_equal 1, track.puids.size
64
+ assert_nothing_raised {track.puids << @valid_puids[1]}
65
+ assert_equal 2, track.puids.size
66
+
67
+ assert_nothing_raised {track.puids.delete @valid_puids[1]}
68
+ assert_equal 1, track.puids.size
69
+ assert_nothing_raised {track.puids.delete @valid_puids[0]}
70
+ assert_equal 0, track.puids.size
71
+ end
72
+
73
+ # You can pass an array of PUIDs to add them all.
74
+ def test_add_several_puids_at_once
75
+ track = Model::Track.new
76
+ assert_nothing_raised {track.puids = @valid_puids}
77
+ assert_equal @valid_puids, track.puids
78
+ end
79
+
80
+ # Many releases can be added
81
+ def test_add_and_remove_releases
82
+ track = Model::Track.new
83
+ assert_equal 0, track.releases.size
84
+ assert_nothing_raised {track.releases << @releases[0]}
85
+ assert_equal 1, track.releases.size
86
+ assert_nothing_raised {track.releases << @releases[1]}
87
+ assert_equal 2, track.releases.size
88
+
89
+ assert_nothing_raised {track.releases.delete @releases[1]}
90
+ assert_equal 1, track.releases.size
91
+ assert_nothing_raised {track.releases.delete @releases[0]}
92
+ assert_equal 0, track.releases.size
93
+ end
94
+
95
+ # You can pass an array of releases to add them all.
96
+ def test_add_several_releases_at_once
97
+ track = Model::Track.new
98
+ assert_nothing_raised {track.releases = @releases}
99
+ assert_equal @releases, track.releases
100
+ end
101
+
102
+ end
@@ -0,0 +1,57 @@
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 TrackFilter class.
12
+ class TestTrackFilter < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @filter_hash = {
16
+ :title => 'The Wonders at Your Feet',
17
+ :artist => 'Dark Tranquillity',
18
+ :release => 'Haven',
19
+ :duration => 1811000,
20
+ :tracknum => 1,
21
+ :artistid => '9d30e408-1559-448b-b491-2f8de1583ccf',
22
+ :releaseid => '0cc5ec17-f52e-42d5-abe8-7b3cdd251e21',
23
+ :puid => '26d1355d-60b7-0de2-7a57-d01d7ee9e8be',
24
+ :count => 12,
25
+ :releasetype => 'Album',
26
+ :limit => 10
27
+ }
28
+ end
29
+
30
+ def teardown
31
+ end
32
+
33
+ def test_filter
34
+ filter = Webservice::TrackFilter.new(@filter_hash)
35
+ filter_string = filter.to_s
36
+ assert_not_equal '&', filter_string[0]
37
+
38
+ result_hash = query_string_to_hash filter_string
39
+ assert_equal @filter_hash[:title], result_hash['title'], filter_string
40
+ assert_equal @filter_hash[:artist], result_hash['artist'], filter_string
41
+ assert_equal @filter_hash[:release], result_hash['release'], filter_string
42
+ assert_equal @filter_hash[:duration].to_s, result_hash['duration'], filter_string
43
+ assert_equal @filter_hash[:tracknum].to_s, result_hash['tracknum'], filter_string
44
+ assert_equal @filter_hash[:artistid], result_hash['artistid'], filter_string
45
+ assert_equal @filter_hash[:releaseid], result_hash['releaseid'], filter_string
46
+ assert_equal @filter_hash[:puid], result_hash['puid'], filter_string
47
+ assert_equal @filter_hash[:count].to_s, result_hash['count'], filter_string
48
+ assert_equal @filter_hash[:releasetype], result_hash['releasetype'], filter_string
49
+ assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
50
+ end
51
+
52
+ def test_empty_filter
53
+ filter = Webservice::TrackFilter.new({})
54
+ assert_equal '', filter.to_s
55
+ end
56
+
57
+ end
@@ -0,0 +1,61 @@
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 TrackIncludes class.
11
+ class TestTrackIncludes < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_includes
20
+ includes = Webservice::TrackIncludes.new(
21
+ :artist => true,
22
+ :releases => true,
23
+ :puids => true,
24
+ :artist_rels => true,
25
+ :release_rels => true,
26
+ :track_rels => true,
27
+ :label_rels => true,
28
+ :url_rels => true
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?('artist')
35
+ assert result_array.include?('releases')
36
+ assert result_array.include?('puids')
37
+ assert result_array.include?('artist-rels')
38
+ assert result_array.include?('release-rels')
39
+ assert result_array.include?('track-rels')
40
+ assert result_array.include?('label-rels')
41
+ assert result_array.include?('url-rels')
42
+ end
43
+
44
+ def test_empty_includes
45
+ includes = Webservice::TrackIncludes.new(
46
+ :artist => false,
47
+ :releases => false,
48
+ :puids => false,
49
+ :artist_rels => false,
50
+ :release_rels => false,
51
+ :track_rels => false,
52
+ :label_rels => false,
53
+ :url_rels => false
54
+ )
55
+ assert_equal '', includes.to_s
56
+
57
+ includes = Webservice::TrackIncludes.new({})
58
+ assert_equal '', includes.to_s
59
+ end
60
+
61
+ end
@@ -0,0 +1,23 @@
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 Webservice class.
11
+ class TestWebservice < Test::Unit::TestCase
12
+
13
+ def setup
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_not_implemented
20
+ assert false, 'Unit test for ' + self.class.name + ' not implemented!'
21
+ end
22
+
23
+ end