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