Skip to content

Commit

Permalink
Rescue from invalid date parsing errors for W3CDTF encoded dates.
Browse files Browse the repository at this point in the history
  • Loading branch information
jkeck committed Dec 21, 2013
1 parent b1949a4 commit 0a8d94e
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
14 changes: 9 additions & 5 deletions lib/mods_display/fields/imprint.rb
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions spec/fields/imprint_spec.rb
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions spec/fixtures/imprint_fixtures.rb
Expand Up @@ -265,4 +265,16 @@ def bad_dates
</mods>
MODS
end
def invalid_dates
<<-MODS
<mods>
<originInfo>
<place>
<placeTerm>United States</placeTerm>
</place>
<dateModified encoding="w3cdtf">1920-09-00</dateModified>
</originInfo>
</mods>
MODS
end
end

0 comments on commit 0a8d94e

Please sign in to comment.