From 4b17499bb41de2c45c5b766d13504cc18983307f Mon Sep 17 00:00:00 2001 From: Mathias Gawlista Date: Thu, 24 Jan 2013 14:18:38 +0100 Subject: [PATCH 1/2] Calculate last day of month correctly. refs #14 --- lib/musicbrainz/models/base_model.rb | 14 +++++---- spec/models/base_model_spec.rb | 45 ++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 spec/models/base_model_spec.rb diff --git a/lib/musicbrainz/models/base_model.rb b/lib/musicbrainz/models/base_model.rb index 38f6e47..cca3302 100644 --- a/lib/musicbrainz/models/base_model.rb +++ b/lib/musicbrainz/models/base_model.rb @@ -46,14 +46,18 @@ module MusicBrainz elsif type == String val.to_s elsif type == Date - if val.nil? or val == "" - val = "2030-12-31" + val = if val.nil? or val == "" + [2030, 12, 31] elsif val.split("-").length == 1 - val << "-12-31" + [val.split("-").first.to_i, 12, 31] elsif val.split("-").length == 2 - val << "-31" + val = val.split("-").map(&:to_i) + [val.first, val.last, -1] + else + val.split("-").map(&:to_i) end - Date.new(*val.split(?-).map(&:to_i)) + + Date.new(*val) else val end diff --git a/spec/models/base_model_spec.rb b/spec/models/base_model_spec.rb new file mode 100644 index 0000000..753bf83 --- /dev/null +++ b/spec/models/base_model_spec.rb @@ -0,0 +1,45 @@ +# -*- encoding: utf-8 -*- + +require "spec_helper" + +describe MusicBrainz::BaseModel do + describe '#validate_type' do + describe 'Date' do + context 'nil value' do + it 'returns 2030-12-31' do + response = '' + xml = Nokogiri::XML.parse(response) + release_group = MusicBrainz::ReleaseGroup.new MusicBrainz::Bindings::ReleaseGroup.parse(xml) + release_group.first_release_date.should == Date.new(2030, 12, 31) + end + end + + context 'year only' do + it 'returns 1995-04-30' do + response = '1995' + xml = Nokogiri::XML.parse(response) + release_group = MusicBrainz::ReleaseGroup.new MusicBrainz::Bindings::ReleaseGroup.parse(xml) + release_group.first_release_date.should == Date.new(1995, 12, 31) + end + end + + context 'year and month only' do + it 'returns 1995-04-30' do + response = '1995-04' + xml = Nokogiri::XML.parse(response) + release_group = MusicBrainz::ReleaseGroup.new MusicBrainz::Bindings::ReleaseGroup.parse(xml) + release_group.first_release_date.should == Date.new(1995, 4, 30) + end + end + + context 'year, month and day' do + it 'returns 1995-04-30' do + response = '1995-04-30' + xml = Nokogiri::XML.parse(response) + release_group = MusicBrainz::ReleaseGroup.new MusicBrainz::Bindings::ReleaseGroup.parse(xml) + release_group.first_release_date.should == Date.new(1995, 4, 30) + end + end + end + end +end \ No newline at end of file From fd299d56b646e3ed933ed0ec1d14f1029bc4ff8d Mon Sep 17 00:00:00 2001 From: Mathias Gawlista Date: Thu, 24 Jan 2013 14:59:04 +0100 Subject: [PATCH 2/2] Fixes typo. --- spec/models/base_model_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/base_model_spec.rb b/spec/models/base_model_spec.rb index 753bf83..c71a264 100644 --- a/spec/models/base_model_spec.rb +++ b/spec/models/base_model_spec.rb @@ -15,7 +15,7 @@ describe MusicBrainz::BaseModel do end context 'year only' do - it 'returns 1995-04-30' do + it 'returns 1995-12-31' do response = '1995' xml = Nokogiri::XML.parse(response) release_group = MusicBrainz::ReleaseGroup.new MusicBrainz::Bindings::ReleaseGroup.parse(xml)