diff --git a/lib/mods_display/fields/imprint.rb b/lib/mods_display/fields/imprint.rb index 1fb559b..0f08749 100644 --- a/lib/mods_display/fields/imprint.rb +++ b/lib/mods_display/fields/imprint.rb @@ -156,11 +156,15 @@ def date_is_w3cdtf?(date_field) end def process_w3cdtf_date(date_field) date_field = date_field.clone - date_field.content = if date_field.text.strip =~ /^\d{4}-\d{2}-\d{2}$/ - Date.parse(date_field.text).strftime(@config.full_date_format) - elsif date_field.text.strip =~ /^\d{4}-\d{2}$/ - Date.parse("#{date_field.text}-01").strftime(@config.short_date_format) - else + date_field.content = begin + if date_field.text.strip =~ /^\d{4}-\d{2}-\d{2}$/ + Date.parse(date_field.text).strftime(@config.full_date_format) + elsif date_field.text.strip =~ /^\d{4}-\d{2}$/ + Date.parse("#{date_field.text}-01").strftime(@config.short_date_format) + else + date_field.content + end + rescue date_field.content end date_field diff --git a/spec/fields/imprint_spec.rb b/spec/fields/imprint_spec.rb index 3b58b05..ea103e9 100644 --- a/spec/fields/imprint_spec.rb +++ b/spec/fields/imprint_spec.rb @@ -35,6 +35,7 @@ def mods_display_format_date_imprint(mods_record) @encoded_place = Stanford::Mods::Record.new.from_str(encoded_place, false).origin_info @encoded_dates = Stanford::Mods::Record.new.from_str(encoded_dates, false).origin_info @bad_dates = Stanford::Mods::Record.new.from_str(bad_dates, false).origin_info + @invalid_dates = Stanford::Mods::Record.new.from_str(invalid_dates, false).origin_info end describe "labels" do @@ -193,6 +194,11 @@ def mods_display_format_date_imprint(mods_record) field.values.join.should_not include "9999" end end + it "should handle invalid dates by returning the original value" do + fields = mods_display_imprint(@invalid_dates).fields + fields.length.should == 2 + fields.last.values.should == ["1920-09-00"] + end end end describe "place processing" do diff --git a/spec/fixtures/imprint_fixtures.rb b/spec/fixtures/imprint_fixtures.rb index e4f1b90..176e11b 100644 --- a/spec/fixtures/imprint_fixtures.rb +++ b/spec/fixtures/imprint_fixtures.rb @@ -265,4 +265,16 @@ def bad_dates MODS end + def invalid_dates + <<-MODS + + + + United States + + 1920-09-00 + + + MODS + end end \ No newline at end of file