rbrainz 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -2
- data/doc/README.rdoc +7 -1
- data/examples/getrelease.rb +1 -1
- data/examples/getuser.rb +2 -3
- data/examples/searchreleases.rb +4 -3
- data/examples/tag.rb +42 -0
- data/lib/rbrainz/core_ext/net_http_digest.rb +42 -5
- data/lib/rbrainz/model/collection.rb +4 -2
- data/lib/rbrainz/model/duration.rb +96 -0
- data/lib/rbrainz/model/relation.rb +6 -3
- data/lib/rbrainz/model/release.rb +6 -6
- data/lib/rbrainz/model/release_event.rb +23 -1
- data/lib/rbrainz/model/scored_collection.rb +10 -2
- data/lib/rbrainz/model/tag.rb +2 -3
- data/lib/rbrainz/utils/helper.rb +2 -2
- data/lib/rbrainz/version.rb +2 -2
- data/lib/rbrainz/webservice/filter.rb +4 -4
- data/lib/rbrainz/webservice/mbxml.rb +10 -6
- data/lib/rbrainz/webservice/query.rb +84 -7
- data/lib/rbrainz/webservice/webservice.rb +53 -25
- data/test/test-data/valid/release/Under_the_Pink_3.xml +1 -1
- data/test/test_collection.rb +2 -3
- data/test/test_mbxml.rb +31 -30
- data/test/test_release_event.rb +9 -1
- data/test/test_scored_collection.rb +11 -0
- metadata +22 -20
data/CHANGES
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== 0.4.0 (2007-12-16)
|
4
|
+
* NEW: Complete tagging (folksonomy) support.
|
5
|
+
* NEW: Support release event format.
|
6
|
+
* NEW: Support for HTTP proxies
|
7
|
+
|
3
8
|
== 0.3.0 (2007-08-11)
|
4
9
|
* BUG: Relation end date was not set correctly in MBXML.
|
5
10
|
* NEW: Allow release type constants to be passed to include and filter objects.
|
@@ -7,7 +12,6 @@
|
|
7
12
|
* NEW: Methods Release#earliest_release_event and Release#earliest_release_date
|
8
13
|
* NEW: Entity#get_relations allows string with or without namespace for
|
9
14
|
target_type, relation_type and required_attributes
|
10
|
-
* BUG: Corrected constant TYPE_PSEUDO_RELEASE
|
11
15
|
|
12
16
|
== 0.2.1 (2007-07-24)
|
13
17
|
* Erroneous date strings in the XML are ignored. No error is raised and nil
|
@@ -49,4 +53,4 @@
|
|
49
53
|
== 0.1.0 (2007-05-23)
|
50
54
|
* Initial release
|
51
55
|
|
52
|
-
$Id: CHANGES
|
56
|
+
$Id: CHANGES 192 2007-12-16 00:30:15Z phw $
|
data/doc/README.rdoc
CHANGED
@@ -71,6 +71,12 @@ should make the usage clear:
|
|
71
71
|
Releases : #{artist.releases.map{|r| r.title}.uniq.join("\r\n ")}
|
72
72
|
EOF
|
73
73
|
|
74
|
+
== Unicode support
|
75
|
+
The MusicBrainz webservice returns all data in UTF-8 encoding. RBrainz does
|
76
|
+
not change or modify the encoding. So if you are using RBrainz you should be
|
77
|
+
aware that all strings returned by RBrainz are UTF-8 encoded as well.
|
78
|
+
Furthermore all strings you pass to RBrainz need to be UTF-8 encoded as well.
|
79
|
+
|
74
80
|
== The MusicBrainz webservice
|
75
81
|
For more information about the MusicBrainz webservice visit the
|
76
82
|
following resources:
|
@@ -94,4 +100,4 @@ RBrainz is Copyright (c) 2007 Philipp Wolfer and Nigel Graham.
|
|
94
100
|
It is free softare distributed under a BSD style license. See
|
95
101
|
LICENSE[link:files/LICENSE.html] for details.
|
96
102
|
|
97
|
-
$Id: README.rdoc
|
103
|
+
$Id: README.rdoc 191 2007-12-04 13:30:26Z phw $
|
data/examples/getrelease.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Example script which queries the database for an
|
4
4
|
# release and displays the release's data.
|
5
5
|
#
|
6
|
-
# $Id: getrelease.rb
|
6
|
+
# $Id: getrelease.rb 190 2007-12-04 12:51:17Z phw $
|
7
7
|
|
8
8
|
# Just make sure we can run this example from the command
|
9
9
|
# line even if RBrainz is not yet installed properly.
|
data/examples/getuser.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Example script which queries the database for a
|
4
|
-
# User
|
3
|
+
# Example script which queries the database for a user.
|
5
4
|
#
|
6
|
-
# $Id: getuser.rb
|
5
|
+
# $Id: getuser.rb 183 2007-10-16 22:13:33Z phw $
|
7
6
|
|
8
7
|
# Just make sure we can run this example from the command
|
9
8
|
# line even if RBrainz is not yet installed properly.
|
data/examples/searchreleases.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Example script which searches the database for
|
4
4
|
# releases and displays the release data.
|
5
5
|
#
|
6
|
-
# $Id: searchreleases.rb
|
6
|
+
# $Id: searchreleases.rb 183 2007-10-16 22:13:33Z phw $
|
7
7
|
|
8
8
|
# Just make sure we can run this example from the command
|
9
9
|
# line even if RBrainz is not yet installed properly.
|
@@ -16,7 +16,7 @@ include MusicBrainz
|
|
16
16
|
# Define the search parameters: Search for releases with the
|
17
17
|
# title "Paradise Lost" and return a maximum of 10 releases.
|
18
18
|
release_filter = Webservice::ReleaseFilter.new(
|
19
|
-
:
|
19
|
+
:artistid => '10bf95b6-30e3-44f1-817f-45762cdc0de0',
|
20
20
|
:limit => 10
|
21
21
|
)
|
22
22
|
|
@@ -31,5 +31,6 @@ releases = query.get_releases(release_filter)
|
|
31
31
|
# Display the fetched release titles and the score, which
|
32
32
|
# indicates how good the release matches the search parameters.
|
33
33
|
releases.each do |entry|
|
34
|
-
print "%s (%i%%)\r\n" % [entry.entity.
|
34
|
+
print "%s: %s (%i%%)\r\n" % [entry.entity.earliest_release_date,
|
35
|
+
entry.entity.title, entry.score]
|
35
36
|
end
|
data/examples/tag.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Example script showing the use of folksonomy tagging with RBrainz.
|
4
|
+
# It asks the user for his username and password and a MBID and queries the
|
5
|
+
# MusicBrainz server for the tags, the user has applied to the entitity with
|
6
|
+
# the given MBID. Afterwards the user can submit new tags.
|
7
|
+
#
|
8
|
+
# $Id: getuser.rb 145 2007-07-19 13:11:44Z phw $
|
9
|
+
|
10
|
+
# Just make sure we can run this example from the command
|
11
|
+
# line even if RBrainz is not yet installed properly.
|
12
|
+
$: << 'lib/' << '../lib/'
|
13
|
+
|
14
|
+
# Load RBrainz and include the MusicBrainz namespace.
|
15
|
+
require 'rbrainz'
|
16
|
+
include MusicBrainz
|
17
|
+
|
18
|
+
# Get the username and password
|
19
|
+
print 'Username: ' unless ARGV[0]
|
20
|
+
username = ARGV[0] ? ARGV[0] : STDIN.gets.strip
|
21
|
+
print 'Password: ' unless ARGV[1]
|
22
|
+
password = ARGV[1] ? ARGV[1] : STDIN.gets.strip
|
23
|
+
|
24
|
+
# Ask for a MBID to tag.
|
25
|
+
print 'Enter a MBID: '
|
26
|
+
mbid = Model::MBID.new(STDIN.gets.strip)
|
27
|
+
|
28
|
+
ws = Webservice::Webservice.new(:username=>username, :password=>password)
|
29
|
+
|
30
|
+
# Create a new Query object which will provide
|
31
|
+
# us an interface to the MusicBrainz web service.
|
32
|
+
query = Webservice::Query.new(ws, :client_id => 'RBrainz test ' + RBRAINZ_VERSION)
|
33
|
+
|
34
|
+
# Read and print the current tags for the given MBID
|
35
|
+
tags = query.get_user_tags(mbid)
|
36
|
+
print 'Current tags: '
|
37
|
+
puts tags.to_a.join(', ')
|
38
|
+
|
39
|
+
# Ask the user for new tags and submit them
|
40
|
+
print 'Enter new tags: '
|
41
|
+
new_tags = STDIN.gets.strip
|
42
|
+
query.submit_user_tags(mbid, new_tags)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: net_http_digest.rb
|
1
|
+
# $Id: net_http_digest.rb 182 2007-10-16 14:46:17Z nigel_graham $
|
2
2
|
#
|
3
3
|
# Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -14,11 +14,47 @@ module Net # :nodoc:
|
|
14
14
|
module HTTPHeader # :nodoc:
|
15
15
|
@@nonce_count = -1
|
16
16
|
CNONCE = Digest::MD5.new.update("%x" % (Time.now.to_i + rand(65535))).hexdigest
|
17
|
+
|
18
|
+
def select_auth(user,password,response)
|
19
|
+
response['www-authenticate'] =~ /^(\w+) (.*)/
|
20
|
+
auth_type = $1
|
21
|
+
case auth_type
|
22
|
+
when 'Digest'
|
23
|
+
digest_auth(user,password,response)
|
24
|
+
return true
|
25
|
+
when 'Basic'
|
26
|
+
basic_auth(user,password)
|
27
|
+
return true
|
28
|
+
end
|
29
|
+
return false
|
30
|
+
end
|
31
|
+
|
32
|
+
def proxy_select_auth(user, password, response)
|
33
|
+
response['proxy-authenticate'] =~ /^(\w+) (.*)/
|
34
|
+
auth_type = $1
|
35
|
+
case auth_type
|
36
|
+
when 'Digest'
|
37
|
+
proxy_digest_auth(user,password,response)
|
38
|
+
return true
|
39
|
+
when 'Basic'
|
40
|
+
proxy_basic_auth(user,password)
|
41
|
+
return true
|
42
|
+
end
|
43
|
+
return false
|
44
|
+
end
|
45
|
+
|
17
46
|
def digest_auth(user, password, response)
|
47
|
+
@header['Authorization'] = digest_encode(response['www-authenticate'], user, password)
|
48
|
+
end
|
49
|
+
|
50
|
+
def proxy_digest_auth(user, password, response)
|
51
|
+
@header['Proxy-Authorization'] = digest_encode(response['proxy-authenticate'], user, password)
|
52
|
+
end
|
53
|
+
|
54
|
+
def digest_encode(authenticate, user, password)
|
18
55
|
@@nonce_count += 1
|
19
|
-
|
20
|
-
|
21
|
-
|
56
|
+
authenticate =~ /^(\w+) (.*)/
|
57
|
+
|
22
58
|
params = {}
|
23
59
|
$2.gsub(/(\w+)="(.*?)"/) { params[$1] = $2 }
|
24
60
|
|
@@ -46,7 +82,8 @@ module Net # :nodoc:
|
|
46
82
|
header << "nc=#{'%08x' % @@nonce_count}" if params['qop']
|
47
83
|
header << "cnonce=\"#{CNONCE}\"" if params['qop']
|
48
84
|
header << "response=\"#{Digest::MD5.new.update(request_digest).hexdigest}\""
|
49
|
-
|
85
|
+
|
86
|
+
return header
|
50
87
|
end
|
51
88
|
end
|
52
89
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: collection.rb
|
1
|
+
# $Id: collection.rb 172 2007-08-24 11:19:19Z phw $
|
2
2
|
#
|
3
3
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -42,9 +42,10 @@ module MusicBrainz
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
# Add a new element to this collection.
|
45
|
+
# Add a new element to this collection. Returns self.
|
46
46
|
def <<(entry)
|
47
47
|
@entries << entry
|
48
|
+
self # return self to allow something like collection << a << b
|
48
49
|
end
|
49
50
|
|
50
51
|
# Delete an element from the collection.
|
@@ -93,6 +94,7 @@ module MusicBrainz
|
|
93
94
|
end
|
94
95
|
alias to_ary to_a
|
95
96
|
|
97
|
+
# Duplicate this collection.
|
96
98
|
def dup
|
97
99
|
Collection.new(self.count, self.offset, @entries)
|
98
100
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
|
2
|
+
# Represents a duration in milliseconds.
|
3
|
+
class Duration < Numeric
|
4
|
+
|
5
|
+
def initialize(milliseconds=0)
|
6
|
+
@ms = milliseconds.to_i
|
7
|
+
end
|
8
|
+
|
9
|
+
def days
|
10
|
+
to_i / 86400000
|
11
|
+
end
|
12
|
+
|
13
|
+
def hours
|
14
|
+
to_i / 3600000 % 24
|
15
|
+
end
|
16
|
+
|
17
|
+
def minutes
|
18
|
+
to_i / 60000 % 60
|
19
|
+
end
|
20
|
+
|
21
|
+
def seconds
|
22
|
+
to_i / 1000 % 60
|
23
|
+
end
|
24
|
+
|
25
|
+
def milliseconds
|
26
|
+
to_i % 1000
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_i
|
30
|
+
@ms
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_f
|
34
|
+
@ms.to_f
|
35
|
+
end
|
36
|
+
|
37
|
+
def coerce(numeric)
|
38
|
+
if numeric.is_a?(Integer)
|
39
|
+
[numeric, to_i]
|
40
|
+
else
|
41
|
+
[Float.induced_from(numeric), to_f]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# def method_missing(m, *args)
|
46
|
+
# if ['%'.to_sym, '+'.to_sym, '-'.to_sym, '*'.to_sym, '/'.to_sym].include?(m)
|
47
|
+
# self.class.new(@ms.send(m, *args))
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
|
51
|
+
def <=> other
|
52
|
+
to_i <=> other
|
53
|
+
end
|
54
|
+
|
55
|
+
def % other
|
56
|
+
Duration.new(to_i % other)
|
57
|
+
end
|
58
|
+
|
59
|
+
def + other
|
60
|
+
Duration.new(to_i + other)
|
61
|
+
end
|
62
|
+
|
63
|
+
def - other
|
64
|
+
Duration.new(to_i - other)
|
65
|
+
end
|
66
|
+
|
67
|
+
def * other
|
68
|
+
Duration.new(to_i * other)
|
69
|
+
end
|
70
|
+
|
71
|
+
def / other
|
72
|
+
Duration.new(to_i / other)
|
73
|
+
end
|
74
|
+
|
75
|
+
def ** other
|
76
|
+
Duration.new(to_i ** other)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
require 'delegate'
|
82
|
+
|
83
|
+
#class Duration < DelegateClass(Fixnum)
|
84
|
+
#
|
85
|
+
# def x_method_missing(m, *args, &block)
|
86
|
+
# if block_given?
|
87
|
+
# result = super m, *args
|
88
|
+
# else
|
89
|
+
# result = super m, *args, &block
|
90
|
+
# end
|
91
|
+
# result.is_a?(Integer) ? Duration.new(result) : result
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
#end
|
95
|
+
|
96
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: relation.rb
|
1
|
+
# $Id: relation.rb 173 2007-08-24 15:11:11Z phw $
|
2
2
|
#
|
3
3
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -55,6 +55,9 @@ module MusicBrainz
|
|
55
55
|
attr_accessor :direction
|
56
56
|
|
57
57
|
# The relation's target object.
|
58
|
+
#
|
59
|
+
# The target can either be an object of the type Model::Entity
|
60
|
+
# or a URL if the type of the relation is TO_URL.
|
58
61
|
attr_reader :target
|
59
62
|
|
60
63
|
# The list of attributes describing this relation.
|
@@ -87,8 +90,8 @@ module MusicBrainz
|
|
87
90
|
|
88
91
|
# Set the target of this relation.
|
89
92
|
#
|
90
|
-
# The _target_ can either be
|
91
|
-
# or a URL.
|
93
|
+
# The _target_ can either be an object of the type Model::Entity
|
94
|
+
# or a URL if the type of the relation is TO_URL.
|
92
95
|
def target=(target)
|
93
96
|
if target.is_a? Entity
|
94
97
|
@target = target
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: release.rb
|
1
|
+
# $Id: release.rb 190 2007-12-04 12:51:17Z phw $
|
2
2
|
#
|
3
3
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -73,7 +73,7 @@ module MusicBrainz
|
|
73
73
|
TYPE_BOOTLEG = NS_MMD_1 + 'Bootleg'
|
74
74
|
# A pseudo-release is a duplicate release for translation/transliteration
|
75
75
|
# purposes.
|
76
|
-
TYPE_PSEUDO_RELEASE = NS_MMD_1 + '
|
76
|
+
TYPE_PSEUDO_RELEASE = NS_MMD_1 + 'PseudoRelease'
|
77
77
|
|
78
78
|
# See Entity::ENTITY_TYPE.
|
79
79
|
ENTITY_TYPE = :release # :nodoc:
|
@@ -161,8 +161,8 @@ module MusicBrainz
|
|
161
161
|
# Returns the earliest release date as an IncompleteDate.
|
162
162
|
#
|
163
163
|
# This favours complete dates. For example, '2006-09' is
|
164
|
-
|
165
|
-
|
164
|
+
# returned if there is '2000', too. If there is no release
|
165
|
+
# event associated with this release, +nil+ is returned.
|
166
166
|
#
|
167
167
|
# See:: earliest_release_date
|
168
168
|
def earliest_release_event
|
@@ -176,7 +176,7 @@ module MusicBrainz
|
|
176
176
|
return earliest_event
|
177
177
|
end
|
178
178
|
|
179
|
-
# Returns the earliest release event or +nil+.
|
179
|
+
# Returns the date of the earliest release event or +nil+.
|
180
180
|
#
|
181
181
|
# See:: earliest_release_event
|
182
182
|
def earliest_release_date
|
@@ -190,7 +190,7 @@ module MusicBrainz
|
|
190
190
|
def to_s
|
191
191
|
title.to_s
|
192
192
|
end
|
193
|
-
|
193
|
+
|
194
194
|
end
|
195
195
|
|
196
196
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: release_event.rb
|
1
|
+
# $Id: release_event.rb 189 2007-11-26 00:10:49Z phw $
|
2
2
|
#
|
3
3
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -18,10 +18,29 @@ module MusicBrainz
|
|
18
18
|
# 'UK' or 'FR'). The dates are instances of IncompleteDate or strings which
|
19
19
|
# must have the format 'YYYY', 'YYYY-MM' or 'YYYY-MM-DD'.
|
20
20
|
#
|
21
|
+
# The format of the release medium is a URI that can be compared to the
|
22
|
+
# constants on this class (FORMAT_CD, FORMAT_DVD and others).
|
23
|
+
#
|
21
24
|
# See:: http://musicbrainz.org/doc/ReleaseEvent.
|
22
25
|
#
|
23
26
|
class ReleaseEvent
|
24
27
|
|
28
|
+
FORMAT_CD = NS_MMD_1 + 'CD'
|
29
|
+
FORMAT_DVD = NS_MMD_1 + 'DVD'
|
30
|
+
FORMAT_SACD = NS_MMD_1 + 'SACD'
|
31
|
+
FORMAT_DUALDISC = NS_MMD_1 + 'DualDisc'
|
32
|
+
FORMAT_LASERDISC = NS_MMD_1 + 'LaserDisc'
|
33
|
+
FORMAT_MINIDISC = NS_MMD_1 + 'MiniDisc'
|
34
|
+
FORMAT_VINYL = NS_MMD_1 + 'Vinyl'
|
35
|
+
FORMAT_CASSETTE = NS_MMD_1 + 'Cassette'
|
36
|
+
FORMAT_CARTRIDGE = NS_MMD_1 + 'Cartridge'
|
37
|
+
FORMAT_REEL_TO_REEL = NS_MMD_1 + 'ReelToReel'
|
38
|
+
FORMAT_DAT = NS_MMD_1 + 'DAT'
|
39
|
+
FORMAT_DIGITAL = NS_MMD_1 + 'Digital'
|
40
|
+
FORMAT_WAX_CYLINDER = NS_MMD_1 + 'WaxCylinder'
|
41
|
+
FORMAT_PIANO_ROLL = NS_MMD_1 + 'PianoRoll'
|
42
|
+
FORMAT_OTHER = NS_MMD_1 + 'Other'
|
43
|
+
|
25
44
|
# The country in which an album was released.
|
26
45
|
# A string containing a ISO 3166 country code like
|
27
46
|
# 'GB', 'US' or 'DE'.
|
@@ -42,6 +61,9 @@ module MusicBrainz
|
|
42
61
|
# The release date. An instance of IncompleteDate.
|
43
62
|
attr_reader :date
|
44
63
|
|
64
|
+
# The media format of the release (e.g. CD or Vinyl).
|
65
|
+
attr_accessor :format
|
66
|
+
|
45
67
|
def initialize(country=nil, date=nil)
|
46
68
|
self.country = country
|
47
69
|
self.date = date
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: scored_collection.rb
|
1
|
+
# $Id: scored_collection.rb 172 2007-08-24 11:19:19Z phw $
|
2
2
|
#
|
3
3
|
# Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
|
4
4
|
# Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
|
@@ -55,7 +55,7 @@ module MusicBrainz
|
|
55
55
|
return map {|entry| entry.entity}
|
56
56
|
end
|
57
57
|
|
58
|
-
# Add a new entry to the collection.
|
58
|
+
# Add a new entry to the collection. . Returns self.
|
59
59
|
#
|
60
60
|
# You may either add a ScoredCollection::Entry, just an Model::Entity
|
61
61
|
# or an object responding to +first+ and +last+ where +first+ must
|
@@ -68,6 +68,9 @@ module MusicBrainz
|
|
68
68
|
# collection << Model::ScoredCollection::Entry.new(artist, 100)
|
69
69
|
# collection << [artist, 100]
|
70
70
|
# collection << artist
|
71
|
+
#
|
72
|
+
# # Add several entities in one line
|
73
|
+
# collection << artist_one << artist_two
|
71
74
|
def <<(entry)
|
72
75
|
super wrap(entry)
|
73
76
|
end
|
@@ -80,6 +83,11 @@ module MusicBrainz
|
|
80
83
|
def []=(index, entry)
|
81
84
|
super wrap(entry)
|
82
85
|
end
|
86
|
+
|
87
|
+
# Convert this ScoredCollection into a Collection without the scores.
|
88
|
+
def to_collection
|
89
|
+
Collection.new(count, offset, entities)
|
90
|
+
end
|
83
91
|
|
84
92
|
private #-----------------------------------------------------------------
|
85
93
|
|