rbrainz 0.4.2 → 0.5.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 (118) hide show
  1. data/CHANGES +13 -1
  2. data/LICENSE +1 -1
  3. data/README +2 -2
  4. data/Rakefile +2 -2
  5. data/TODO +9 -2
  6. data/doc/README.rdoc +5 -5
  7. data/examples/getartist.rb +3 -2
  8. data/examples/getlabel.rb +3 -2
  9. data/examples/getrelease.rb +5 -2
  10. data/examples/getreleasegroup.rb +53 -0
  11. data/examples/gettrack.rb +3 -2
  12. data/examples/getuser.rb +2 -1
  13. data/examples/rate.rb +44 -0
  14. data/examples/searchartists.rb +3 -2
  15. data/examples/searchcdstubs.rb +41 -0
  16. data/examples/searchlabels.rb +3 -2
  17. data/examples/searchreleasegroups.rb +36 -0
  18. data/examples/searchreleases.rb +6 -4
  19. data/examples/searchtracks.rb +3 -2
  20. data/examples/submit_isrcs.rb +52 -0
  21. data/examples/tag.rb +3 -2
  22. data/lib/rbrainz.rb +2 -1
  23. data/lib/rbrainz/core_ext.rb +2 -1
  24. data/lib/rbrainz/core_ext/mbid.rb +2 -1
  25. data/lib/rbrainz/core_ext/net_http_digest.rb +3 -2
  26. data/lib/rbrainz/core_ext/range.rb +3 -2
  27. data/lib/rbrainz/core_ext/range/equality.rb +2 -1
  28. data/lib/rbrainz/data/countrynames.rb +6 -3
  29. data/lib/rbrainz/data/languagenames.rb +3 -2
  30. data/lib/rbrainz/data/releasetypenames.rb +3 -2
  31. data/lib/rbrainz/data/scriptnames.rb +3 -2
  32. data/lib/rbrainz/model.rb +3 -2
  33. data/lib/rbrainz/model/alias.rb +3 -2
  34. data/lib/rbrainz/model/artist.rb +11 -3
  35. data/lib/rbrainz/model/collection.rb +3 -2
  36. data/lib/rbrainz/model/default_factory.rb +18 -6
  37. data/lib/rbrainz/model/disc.rb +3 -2
  38. data/lib/rbrainz/model/entity.rb +2 -102
  39. data/lib/rbrainz/model/incomplete_date.rb +3 -2
  40. data/lib/rbrainz/model/individual.rb +11 -2
  41. data/lib/rbrainz/model/isrc.rb +100 -0
  42. data/lib/rbrainz/model/label.rb +5 -2
  43. data/lib/rbrainz/model/mbid.rb +28 -9
  44. data/lib/rbrainz/model/rateable.rb +34 -0
  45. data/lib/rbrainz/model/rating.rb +56 -0
  46. data/lib/rbrainz/model/relateable.rb +118 -0
  47. data/lib/rbrainz/model/relation.rb +2 -1
  48. data/lib/rbrainz/model/release.rb +17 -3
  49. data/lib/rbrainz/model/release_event.rb +3 -2
  50. data/lib/rbrainz/model/release_group.rb +97 -0
  51. data/lib/rbrainz/model/scored_collection.rb +3 -2
  52. data/lib/rbrainz/model/tag.rb +5 -4
  53. data/lib/rbrainz/model/taggable.rb +27 -0
  54. data/lib/rbrainz/model/track.rb +15 -2
  55. data/lib/rbrainz/model/user.rb +3 -2
  56. data/lib/rbrainz/utils.rb +2 -1
  57. data/lib/rbrainz/utils/data.rb +3 -2
  58. data/lib/rbrainz/utils/helper.rb +8 -2
  59. data/lib/rbrainz/version.rb +3 -2
  60. data/lib/rbrainz/webservice.rb +12 -7
  61. data/lib/rbrainz/webservice/filter.rb +53 -4
  62. data/lib/rbrainz/webservice/includes.rb +72 -11
  63. data/lib/rbrainz/webservice/mbxml.rb +129 -67
  64. data/lib/rbrainz/webservice/query.rb +156 -16
  65. data/lib/rbrainz/webservice/webservice.rb +104 -116
  66. data/test/lib/mock_webservice.rb +9 -2
  67. data/test/lib/test_entity.rb +2 -97
  68. data/test/lib/test_factory.rb +9 -1
  69. data/test/lib/test_rateable.rb +31 -0
  70. data/test/lib/test_relateable.rb +103 -0
  71. data/test/lib/test_taggable.rb +36 -0
  72. data/test/lib/testing_helper.rb +17 -2
  73. data/test/test-data/invalid/artist/ratings_1.xml +6 -0
  74. data/test/test-data/invalid/artist/ratings_2.xml +6 -0
  75. data/test/test-data/valid/artist/Tchaikovsky-2.xml +6 -0
  76. data/test/test-data/valid/label/Atlantic_Records_3.xml +6 -0
  77. data/test/test-data/valid/release-group/The_Cure_1.xml +36 -0
  78. data/test/test-data/valid/release/Highway_61_Revisited_2.xml +6 -0
  79. data/test/test-data/valid/track/Silent_All_These_Years_4.xml +3 -0
  80. data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
  81. data/test/test_alias.rb +2 -1
  82. data/test/test_artist.rb +24 -2
  83. data/test/test_artist_filter.rb +2 -1
  84. data/test/test_artist_includes.rb +13 -3
  85. data/test/test_collection.rb +3 -2
  86. data/test/test_default_factory.rb +8 -1
  87. data/test/test_disc.rb +2 -1
  88. data/test/test_incomplete_date.rb +2 -1
  89. data/test/test_isrc.rb +87 -0
  90. data/test/test_label.rb +8 -1
  91. data/test/test_label_filter.rb +2 -1
  92. data/test/test_label_includes.rb +10 -3
  93. data/test/test_mbid.rb +2 -1
  94. data/test/test_mbxml.rb +93 -2
  95. data/test/test_query.rb +68 -5
  96. data/test/test_range_equality.rb +2 -1
  97. data/test/test_rating.rb +46 -0
  98. data/test/test_relation.rb +2 -1
  99. data/test/test_release.rb +37 -2
  100. data/test/test_release_event.rb +2 -1
  101. data/test/test_release_filter.rb +15 -2
  102. data/test/test_release_group.rb +104 -0
  103. data/test/test_release_group_filter.rb +61 -0
  104. data/test/test_release_group_includes.rb +46 -0
  105. data/test/test_release_includes.rb +16 -3
  106. data/test/test_scored_collection.rb +3 -2
  107. data/test/test_tag.rb +2 -1
  108. data/test/test_track.rb +28 -1
  109. data/test/test_track_filter.rb +2 -1
  110. data/test/test_track_includes.rb +13 -3
  111. data/test/test_utils.rb +2 -1
  112. data/test/test_webservice.rb +11 -1
  113. metadata +38 -20
  114. data/debian/changelog +0 -11
  115. data/debian/compat +0 -1
  116. data/debian/control +0 -13
  117. data/debian/copyright +0 -25
  118. data/debian/rules +0 -48
@@ -1,4 +1,5 @@
1
- # $Id: relation.rb 173 2007-08-24 15:11:11Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: relation.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: release.rb 190 2007-12-04 12:51:17Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: release.rb 278 2009-06-07 21:30:51Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -8,6 +9,9 @@
8
9
  require 'rbrainz/model/entity'
9
10
  require 'rbrainz/model/release_event'
10
11
  require 'rbrainz/model/disc'
12
+ require 'rbrainz/model/rateable'
13
+ require 'rbrainz/model/relateable'
14
+ require 'rbrainz/model/taggable'
11
15
 
12
16
  module MusicBrainz
13
17
  module Model
@@ -26,6 +30,10 @@ module MusicBrainz
26
30
  # for more information.
27
31
  class Release < Entity
28
32
 
33
+ include Rateable
34
+ include Relateable
35
+ include Taggable
36
+
29
37
  # A type for not a type. Currently unsupported by MusicBrainz
30
38
  TYPE_NONE = NS_MMD_1 + 'None'
31
39
 
@@ -113,6 +121,9 @@ module MusicBrainz
113
121
  # See:: Utils#get_script_name
114
122
  attr_accessor :text_script
115
123
 
124
+ # The release group this release is part of.
125
+ attr_accessor :release_group
126
+
116
127
  # The list of tracks.
117
128
  attr_reader :tracks
118
129
 
@@ -138,6 +149,7 @@ module MusicBrainz
138
149
  def initialize(id=nil, title=nil)
139
150
  super id
140
151
  self.title = title
152
+ @release_groups = Collection.new
141
153
  @tracks = Collection.new
142
154
  @release_events = Collection.new
143
155
  @discs = Collection.new
@@ -153,9 +165,11 @@ module MusicBrainz
153
165
  #
154
166
  # Note that the release's artist has to be set (see #artist=)
155
167
  # for this. The track artists may be unset.
168
+ #
169
+ # Raises:: RuntimeError
156
170
  def single_artist_release?
157
171
  raise 'Release Artist may not be None!' unless artist
158
- tracks.all {|track| !track.artist || track.artist.id == artist.id }
172
+ tracks.all? {|track| !track.artist || track.artist.id == artist.id }
159
173
  end
160
174
 
161
175
  # Returns the earliest release date as an IncompleteDate.
@@ -194,4 +208,4 @@ module MusicBrainz
194
208
  end
195
209
 
196
210
  end
197
- end
211
+ end
@@ -1,4 +1,5 @@
1
- # $Id: release_event.rb 189 2007-11-26 00:10:49Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: release_event.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -82,4 +83,4 @@ module MusicBrainz
82
83
  end
83
84
 
84
85
  end
85
- end
86
+ end
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: release_group.rb 269 2009-05-24 22:15:27Z phw $
3
+ #
4
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
5
+ # Copyright:: Copyright (c) 2009, Philipp Wolfer
6
+ # License:: RBrainz is free software distributed under a BSD style license.
7
+ # See LICENSE[file:../LICENSE.html] for permissions.
8
+
9
+ require 'rbrainz/model/entity'
10
+ require 'rbrainz/model/release'
11
+
12
+ module MusicBrainz
13
+ module Model
14
+
15
+ #
16
+ # A release group in the MusicBrainz DB.
17
+ #
18
+ # A release group within MusicBrainz is an Entity which groups several
19
+ # different versions of releases (e.g. different editions of the same album).
20
+ #
21
+ # See:: http://wiki.musicbrainz.org/Release_Groups
22
+ class ReleaseGroup < Entity
23
+
24
+ # A type for not a type. Currently unsupported by MusicBrainz
25
+ TYPE_NONE = NS_MMD_1 + 'None'
26
+
27
+ # Special type for release groups that hold non-album track releases.
28
+ TYPE_NON_ALBUM_TRACKS = NS_MMD_1 + 'NonAlbum Track'
29
+
30
+ # An album, perhaps better defined as a "Long Play" (LP) release,
31
+ # generally consists of previously unreleased material. This includes
32
+ # release re-issues, with or without bonus tracks.
33
+ TYPE_ALBUM = NS_MMD_1 + 'Album'
34
+ # An audiobook is a book read by a narrator without music.
35
+ TYPE_AUDIOBOOK = NS_MMD_1 + 'Audiobook'
36
+ # A compilation is a collection of previously released tracks by one or
37
+ # more artists. Please note that this is a simplified description of a
38
+ # compilation.
39
+ TYPE_COMPILATION = NS_MMD_1 + 'Compilation'
40
+ # An EP is a so-called "Extended Play" release and often contains the
41
+ # letters EP in the title.
42
+ TYPE_EP = NS_MMD_1 + 'EP'
43
+ # An interview release contains an interview, generally with an Artist.
44
+ TYPE_INTERVIEW = NS_MMD_1 + 'Interview'
45
+ # A release that was recorded live.
46
+ TYPE_LIVE = NS_MMD_1 + 'Live'
47
+ # A release that primarily contains remixed material.
48
+ TYPE_REMIX = NS_MMD_1 + 'Remix'
49
+ # A single typically has one main song and possibly a handful of
50
+ # additional tracks or remixes of the main track. A single is usually
51
+ # named after its main song.
52
+ TYPE_SINGLE = NS_MMD_1 + 'Single'
53
+ # A soundtrack is the musical score to a movie, TV series, stage show,
54
+ # computer game etc.
55
+ TYPE_SOUNDTRACK = NS_MMD_1 + 'Soundtrack'
56
+ # Non-music spoken word releases.
57
+ TYPE_SPOKENWORD = NS_MMD_1 + 'Spokenword'
58
+ # Any release that does not fit or can't decisively be placed in any of
59
+ # the categories above.
60
+ TYPE_OTHER = NS_MMD_1 + 'Other'
61
+
62
+ # See Entity::ENTITY_TYPE.
63
+ ENTITY_TYPE = :release_group # :nodoc:
64
+
65
+ # The title of this release group.
66
+ attr_accessor :title
67
+
68
+ # A Collection of releases in this release group.
69
+ attr_reader :releases
70
+
71
+ # The artist of this release group.
72
+ attr_accessor :artist
73
+
74
+ # The list of types for this release.
75
+ #
76
+ # To test for release types, you can use the constants
77
+ # TYPE_ALBUM, TYPE_SINGLE, etc.
78
+ attr_reader :types
79
+
80
+ def initialize(id=nil, title=nil)
81
+ super id
82
+ @title = title
83
+ @releases = Collection.new
84
+ @types = Array.new
85
+ end
86
+
87
+ # Returns the string representation for this release group.
88
+ #
89
+ # Returns #title converted into a string.
90
+ def to_s
91
+ title.to_s
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+ end
@@ -1,4 +1,5 @@
1
- # $Id: scored_collection.rb 172 2007-08-24 11:19:19Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: scored_collection.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -104,4 +105,4 @@ module MusicBrainz
104
105
  end
105
106
 
106
107
  end
107
- end
108
+ end
@@ -1,4 +1,5 @@
1
- # $Id: tag.rb 181 2007-10-04 09:20:49Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: tag.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -23,8 +24,8 @@ module MusicBrainz
23
24
  attr_accessor :count
24
25
 
25
26
  def initialize(text=nil, count=nil)
26
- self.text = text
27
- self.count = count
27
+ @text = text
28
+ @count = count
28
29
  end
29
30
 
30
31
  # Convert this tag into a String. Will return text.
@@ -35,4 +36,4 @@ module MusicBrainz
35
36
  end
36
37
 
37
38
  end
38
- end
39
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: taggable.rb 266 2009-05-24 22:15:22Z phw $
3
+ #
4
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
5
+ # Copyright:: Copyright (c) 2009, Philipp Wolfer
6
+ # License:: RBrainz is free software distributed under a BSD style license.
7
+ # See LICENSE[file:../LICENSE.html] for permissions.
8
+
9
+ require 'rbrainz/model/tag'
10
+
11
+ module MusicBrainz
12
+ module Model
13
+
14
+ # Mixin module to add folksonomy tagging capabilities to Entity classes.
15
+ #
16
+ # see:: Tag
17
+ module Taggable
18
+
19
+ # Returns a Collection of Tag objects assigned to this entity.
20
+ def tags
21
+ @tags ||= Collection.new
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -1,4 +1,5 @@
1
- # $Id: track.rb 145 2007-07-19 13:11:44Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: track.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -6,6 +7,10 @@
6
7
  # See LICENSE[file:../LICENSE.html] for permissions.
7
8
 
8
9
  require 'rbrainz/model/entity'
10
+ require 'rbrainz/model/isrc'
11
+ require 'rbrainz/model/rateable'
12
+ require 'rbrainz/model/relateable'
13
+ require 'rbrainz/model/taggable'
9
14
 
10
15
  module MusicBrainz
11
16
  module Model
@@ -15,6 +20,10 @@ module MusicBrainz
15
20
  # See:: http://musicbrainz.org/doc/Track.
16
21
  class Track < Entity
17
22
 
23
+ include Rateable
24
+ include Relateable
25
+ include Taggable
26
+
18
27
  # See Entity::ENTITY_TYPE.
19
28
  ENTITY_TYPE = :track # :nodoc:
20
29
 
@@ -30,6 +39,9 @@ module MusicBrainz
30
39
  # The list of associated PUIDs.
31
40
  attr_reader :puids
32
41
 
42
+ # The list of associated ISRCs.
43
+ attr_reader :isrcs
44
+
33
45
  # The releases on which this track appears.
34
46
  attr_reader :releases
35
47
 
@@ -37,6 +49,7 @@ module MusicBrainz
37
49
  super id
38
50
  self.title = title
39
51
  @puids = Collection.new
52
+ @isrcs = Collection.new
40
53
  @releases = Collection.new
41
54
  end
42
55
 
@@ -50,4 +63,4 @@ module MusicBrainz
50
63
  end
51
64
 
52
65
  end
53
- end
66
+ end
@@ -1,4 +1,5 @@
1
- # $Id: user.rb 145 2007-07-19 13:11:44Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: user.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -45,4 +46,4 @@ module MusicBrainz
45
46
  end
46
47
 
47
48
  end
48
- end
49
+ end
@@ -1,4 +1,5 @@
1
- # $Id: utils.rb 143 2007-07-18 11:40:55Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: utils.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -1,4 +1,5 @@
1
- # $Id: data.rb 141 2007-07-17 14:21:12Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: data.rb 273 2009-05-24 22:29:04Z phw $
2
3
  #
3
4
  # Helper methods to deal with MusicBrainz data.
4
5
  #
@@ -75,4 +76,4 @@ module MusicBrainz
75
76
  end
76
77
 
77
78
  end
78
- end
79
+ end
@@ -1,4 +1,5 @@
1
- # $Id: helper.rb 173 2007-08-24 15:11:11Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: helper.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Nigel Graham, Philipp Wolfer
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -31,6 +32,11 @@ module MusicBrainz
31
32
  end
32
33
  end
33
34
 
35
+ # Converts an entity type constant symbol into the proper string representation
36
+ def entity_type_to_string(entity_type)
37
+ return entity_type.to_s.sub('_', '-')
38
+ end
39
+
34
40
  # Check an options hash for required options.
35
41
  # Raises an ArgumentError if unknown options are present in the hash.
36
42
  def check_options(options, *optdecl) # :nodoc:
@@ -44,4 +50,4 @@ module MusicBrainz
44
50
  end
45
51
 
46
52
  end
47
- end
53
+ end
@@ -1,4 +1,5 @@
1
- # $Id: version.rb 219 2008-09-04 18:14:48Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: version.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Version information.
4
5
  #
@@ -10,6 +11,6 @@
10
11
  module MusicBrainz
11
12
 
12
13
  # The version of the RBrainz library.
13
- RBRAINZ_VERSION = '0.4.2'
14
+ RBRAINZ_VERSION = '0.5.0'
14
15
 
15
16
  end
@@ -1,4 +1,5 @@
1
- # $Id: webservice.rb 146 2007-07-19 16:33:38Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: webservice.rb 254 2009-05-13 20:04:36Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -20,20 +21,24 @@ module MusicBrainz # :nodoc:
20
21
  #
21
22
  # See:: Model
22
23
  module Webservice
24
+
25
+ # Base exception class for all webservice errors.
26
+ class WebserviceError < ::Exception
27
+ end
23
28
 
24
29
  # Connecting to the web service failed.
25
30
  #
26
31
  # This exception is raised if the connection to the server can not be
27
32
  # established due to networking problems (e.g. wrong port number or
28
33
  # server down).
29
- class ConnectionError < Exception
34
+ class ConnectionError < WebserviceError
30
35
  end
31
36
 
32
37
  # An invalid request was made.
33
38
  #
34
39
  # This exception is raised if the client made an invalid request. That could
35
40
  # be syntactically invalid identifiers or unknown or invalid parameter values.
36
- class RequestError < Exception
41
+ class RequestError < WebserviceError
37
42
  end
38
43
 
39
44
  # Client requested a resource which requires authentication via HTTP
@@ -41,11 +46,11 @@ module MusicBrainz # :nodoc:
41
46
  #
42
47
  # If sent even though user name and password were given: user name and/or
43
48
  # password are incorrect.
44
- class AuthenticationError < Exception
49
+ class AuthenticationError < WebserviceError
45
50
  end
46
51
 
47
52
  # The requested resource doesn't exist.
48
- class ResourceNotFoundError < Exception
53
+ class ResourceNotFoundError < WebserviceError
49
54
  end
50
55
 
51
56
  # The returned resource was invalid.
@@ -53,10 +58,10 @@ module MusicBrainz # :nodoc:
53
58
  # This may be due to a malformed XML document or if the requested data
54
59
  # wasn't part of the response. It can only occur in case of bugs in the web
55
60
  # service itself.
56
- class ResponseError < Exception
61
+ class ResponseError < WebserviceError
57
62
  end
58
63
 
59
64
  end
60
65
  end
61
66
 
62
- require 'rbrainz/webservice/query'
67
+ require 'rbrainz/webservice/query'
@@ -1,4 +1,5 @@
1
- # $Id: filter.rb 203 2008-03-17 11:00:15Z phw $
1
+ # -*- coding: utf-8 -*-
2
+ # $Id: filter.rb 264 2009-05-24 22:15:19Z phw $
2
3
  #
3
4
  # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
5
  # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
@@ -70,6 +71,50 @@ module MusicBrainz
70
71
 
71
72
  end
72
73
 
74
+ # A filter for the release group collection.
75
+ class ReleaseGroupFilter < AbstractFilter
76
+
77
+ # The parameter _filter_ is a hash with filter options. At least one
78
+ # filter despite <tt>:limit</tt> and <tt>:offset</tt> must be specified.
79
+ #
80
+ # Available filter options:
81
+ # [:title] Fetch a list of release groups with a matching title.
82
+ # [:artist] The returned release groups should match the given artist name.
83
+ # [:artistid] The returned releasegroups should match the given artist ID
84
+ # (36 character ASCII representation). If this is given,
85
+ # the artist parameter is ignored.
86
+ # [:releasetypes] The returned release groups must match all of the given
87
+ # release types. This is either an array of release types
88
+ # as defined in Model::ReleaseGroup or a string of space separated
89
+ # values like Official, Bootleg, Album, Compilation etc.
90
+ # [:limit] The maximum number of release groups returned. Defaults
91
+ # to 25, the maximum allowed value is 100.
92
+ # [:offset] Return search results starting at a given offset. Used
93
+ # for paging through more than one page of results.
94
+ # [:query] A Lucene search query. The query parameter is a search
95
+ # string which will be passed to the underlying Lucene search
96
+ # engine. It must follow the syntax described in
97
+ # http://musicbrainz.org/doc/TextSearchSyntax.
98
+ def initialize(filter)
99
+ Utils.check_options filter,
100
+ :limit, :offset, :query, :title, :artist, :artistid, :releasetypes
101
+ super(filter)
102
+ @filter[:title] = filter[:title] if filter[:title]
103
+ @filter[:artist] = filter[:artist] if filter[:artist]
104
+ @filter[:artistid] = filter[:artistid] if filter[:artistid]
105
+
106
+ if releasetypes = filter[:releasetypes]
107
+ if releasetypes.respond_to?(:to_a)
108
+ releasetypes = releasetypes.to_a.map do |type|
109
+ Utils.remove_namespace(type)
110
+ end.join(' ')
111
+ end
112
+ @filter[:releasetypes] = releasetypes
113
+ end
114
+ end
115
+
116
+ end
117
+
73
118
  # A filter for the release collection.
74
119
  class ReleaseFilter < AbstractFilter
75
120
 
@@ -92,7 +137,9 @@ module MusicBrainz
92
137
  # [:asin] The Amazon ASIN.
93
138
  # [:lang] The language for this release.
94
139
  # [:script] The script used in this release.
95
- # [:limit] The maximum number of tracks returned. Defaults
140
+ # [:cdstubs] Flag which indicates whether to include CD stubs or not (boolean).
141
+ # Defaults to false.
142
+ # [:limit] The maximum number of releases returned. Defaults
96
143
  # to 25, the maximum allowed value is 100.
97
144
  # [:offset] Return search results starting at a given offset. Used
98
145
  # for paging through more than one page of results.
@@ -103,7 +150,7 @@ module MusicBrainz
103
150
  def initialize(filter)
104
151
  Utils.check_options filter,
105
152
  :limit, :offset, :query, :title, :discid, :artist, :artistid,
106
- :releasetypes, :count, :date, :asin, :lang, :script
153
+ :releasetypes, :count, :date, :asin, :lang, :script, :cdstubs
107
154
  super(filter)
108
155
  @filter[:title] = filter[:title] if filter[:title]
109
156
  @filter[:discid] = filter[:discid] if filter[:discid]
@@ -115,6 +162,8 @@ module MusicBrainz
115
162
  @filter[:lang] = filter[:lang] if filter[:lang]
116
163
  @filter[:script] = filter[:script] if filter[:script]
117
164
 
165
+ @filter[:cdstubs] = filter[:cdstubs] ? 'yes' : 'no'
166
+
118
167
  if releasetypes = filter[:releasetypes]
119
168
  if releasetypes.respond_to?(:to_a)
120
169
  releasetypes = releasetypes.to_a.map do |type|
@@ -218,4 +267,4 @@ module MusicBrainz
218
267
  end
219
268
 
220
269
  end
221
- end
270
+ end