diff --git a/lib/musicbrainz/bindings/release.rb b/lib/musicbrainz/bindings/release.rb
index c83911f..681860a 100644
--- a/lib/musicbrainz/bindings/release.rb
+++ b/lib/musicbrainz/bindings/release.rb
@@ -3,14 +3,23 @@ module MusicBrainz
module Release
def parse(xml)
xml = xml.xpath('./release') unless xml.xpath('./release').empty?
- {
+
+ hash = {
id: (xml.attribute('id').value rescue nil),
title: (xml.xpath('./title').text rescue nil),
status: (xml.xpath('./status').text rescue nil),
country: (xml.xpath('./country').text rescue nil),
- format: (xml.xpath('./medium-list/medium/format').text rescue nil),
date: (xml.xpath('./date').text rescue nil)
}
+
+ formats = (xml.xpath('./medium-list/medium/format') rescue []).map(&:text)
+
+ hash[:format] = formats.uniq.map do |format|
+ format_count = formats.select{|f| f == format}.length
+ format_count == 1 ? format : "#{format_count}x#{format}"
+ end.join(' + ')
+
+ hash
end
extend self
diff --git a/spec/bindings/release_spec.rb b/spec/bindings/release_spec.rb
new file mode 100644
index 0000000..65941fc
--- /dev/null
+++ b/spec/bindings/release_spec.rb
@@ -0,0 +1,43 @@
+# -*- encoding: utf-8 -*-
+
+require "spec_helper"
+
+describe MusicBrainz::Bindings::Release do
+ describe '.parse' do
+ describe 'attributes' do
+ describe 'format' do
+ context 'single cd' do
+ it 'returns CD' do
+ response = 'CD'
+ xml = Nokogiri::XML.parse(response)
+ described_class.parse(xml)[:format].should == 'CD'
+ end
+ end
+
+ context 'multiple cds' do
+ it 'returns 2xCD' do
+ response = 'CDbonus discCD'
+ xml = Nokogiri::XML.parse(response)
+ described_class.parse(xml)[:format].should == '2xCD'
+ end
+ end
+
+ context 'different formats' do
+ it 'returns DVD + CD' do
+ response = 'DVDCD'
+ xml = Nokogiri::XML.parse(response)
+ described_class.parse(xml)[:format].should == 'DVD + CD'
+ end
+ end
+
+ context 'different formats plus multiple mediums with same format' do
+ it 'returns 2xCD + DVD' do
+ response = 'CDCDDVD'
+ xml = Nokogiri::XML.parse(response)
+ described_class.parse(xml)[:format].should == '2xCD + DVD'
+ end
+ end
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/spec/deprecated/cache_config_spec.rb b/spec/deprecated/cache_config_spec.rb
new file mode 100644
index 0000000..55dee2a
--- /dev/null
+++ b/spec/deprecated/cache_config_spec.rb
@@ -0,0 +1,32 @@
+# -*- encoding: utf-8 -*-
+
+require "spec_helper"
+
+describe MusicBrainz::Deprecated::CacheConfig do
+ before(:all) {
+ @old_cache_path = MusicBrainz.config.cache_path
+ }
+
+ before(:each) {
+ MusicBrainz.config.cache_path = nil
+ }
+
+ after(:all) {
+ MusicBrainz.config.cache_path = @old_cache_path
+ }
+
+ it "allows deprecated use of cache_path" do
+ MusicBrainz.config.cache_path = "test1"
+
+ MusicBrainz::Tools::Cache.cache_path.should == "test1"
+ MusicBrainz.cache_path.should == "test1"
+ end
+
+ it "allows deprecated use of cache_path=" do
+ MusicBrainz::Tools::Cache.cache_path = "test2"
+ MusicBrainz.config.cache_path.should == "test2"
+
+ MusicBrainz.cache_path = "test3"
+ MusicBrainz.config.cache_path.should == "test3"
+ end
+end
diff --git a/spec/misc/deprecated_spec.rb b/spec/deprecated/proxy_config_spec.rb
similarity index 54%
rename from spec/misc/deprecated_spec.rb
rename to spec/deprecated/proxy_config_spec.rb
index b82b407..4ef9f94 100644
--- a/spec/misc/deprecated_spec.rb
+++ b/spec/deprecated/proxy_config_spec.rb
@@ -2,37 +2,19 @@
require "spec_helper"
-describe MusicBrainz do
+describe MusicBrainz::Deprecated::ProxyConfig do
before(:all) {
- @old_cache_path = MusicBrainz.config.cache_path
@old_query_interval = MusicBrainz.config.query_interval
}
before(:each) {
- MusicBrainz.config.cache_path = nil
MusicBrainz.config.query_interval = nil
}
after(:all) {
- MusicBrainz.config.cache_path = @old_cache_path
MusicBrainz.config.query_interval = @old_query_interval
}
- it "allows deprecated use of cache_path" do
- MusicBrainz.config.cache_path = "test1"
-
- MusicBrainz::Tools::Cache.cache_path.should == "test1"
- MusicBrainz.cache_path.should == "test1"
- end
-
- it "allows deprecated use of cache_path=" do
- MusicBrainz::Tools::Cache.cache_path = "test2"
- MusicBrainz.config.cache_path.should == "test2"
-
- MusicBrainz.cache_path = "test3"
- MusicBrainz.config.cache_path.should == "test3"
- end
-
it "allows deprecated use of query_interval" do
MusicBrainz.config.query_interval = 2
diff --git a/spec/requests/artist_spec.rb b/spec/models/artist_spec.rb
similarity index 100%
rename from spec/requests/artist_spec.rb
rename to spec/models/artist_spec.rb
diff --git a/spec/requests/release_group_spec.rb b/spec/models/release_group_spec.rb
similarity index 100%
rename from spec/requests/release_group_spec.rb
rename to spec/models/release_group_spec.rb
diff --git a/spec/requests/release_spec.rb b/spec/models/release_spec.rb
similarity index 100%
rename from spec/requests/release_spec.rb
rename to spec/models/release_spec.rb
diff --git a/spec/requests/track_spec.rb b/spec/models/track_spec.rb
similarity index 100%
rename from spec/requests/track_spec.rb
rename to spec/models/track_spec.rb