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