Skip to content

Commit

Permalink
split out (imprint) date fields
Browse files Browse the repository at this point in the history
  • Loading branch information
ndushay committed Nov 30, 2023
1 parent 41d8584 commit 3a8bacd
Show file tree
Hide file tree
Showing 19 changed files with 697 additions and 308 deletions.
1 change: 1 addition & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ en:
creation_production_credits: "Creation/Production credits:"
date_captured: "Date captured:"
date_created: "Date created:"
date_issued: "Publication date:"
date_modified: "Date modified:"
date_sequential_designation: "Date/Sequential designation:"
date_valid: "Date valid:"
Expand Down
6 changes: 6 additions & 0 deletions lib/mods_display.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@
require 'mods_display/fields/collection'
require 'mods_display/fields/contact'
require 'mods_display/fields/contents'
require 'mods_display/fields/copyright_date'
require 'mods_display/fields/cartographics'
require 'mods_display/fields/date_created'
require 'mods_display/fields/date_captured'
require 'mods_display/fields/date_issued'
require 'mods_display/fields/date_modified'
require 'mods_display/fields/date_valid'
require 'mods_display/fields/description'
require 'mods_display/fields/extent'
require 'mods_display/fields/form'
Expand Down
9 changes: 9 additions & 0 deletions lib/mods_display/fields/copyright_date.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class CopyrightDate < Field
def fields
date_fields(:copyrightDate)
end
end
end
9 changes: 9 additions & 0 deletions lib/mods_display/fields/date_captured.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class DateCaptured < Field
def fields
date_fields(:dateCaptured)
end
end
end
9 changes: 9 additions & 0 deletions lib/mods_display/fields/date_created.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class DateCreated < Field
def fields
date_fields(:dateCreated)
end
end
end
9 changes: 9 additions & 0 deletions lib/mods_display/fields/date_issued.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class DateIssued < Field
def fields
date_fields(:dateIssued)
end
end
end
9 changes: 9 additions & 0 deletions lib/mods_display/fields/date_modified.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class DateModified < Field
def fields
date_fields(:dateModified)
end
end
end
9 changes: 9 additions & 0 deletions lib/mods_display/fields/date_valid.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

module ModsDisplay
class DateValid < Field
def fields
date_fields(:dateValid)
end
end
end
15 changes: 15 additions & 0 deletions lib/mods_display/fields/field.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,21 @@ def element_text(element)
element.xpath('.//text()').to_html.strip
end

# used for originInfo date fields, e.g. DateCreated, DateIssued ...
def date_fields(date_symbol)
return_fields = @values.map do |value|
date_values = Stanford::Mods::Imprint.new(value).dates([date_symbol])
next unless date_values.present?

ModsDisplay::Values.new(
label: I18n.t("mods_display.#{date_symbol.to_s.underscore}"),
values: select_best_date(date_values),
field: self
)
end.compact
collapse_fields(return_fields)
end

# used for originInfo dates, e.g. for Imprint, DateCreated, DateIssued, etc.
def select_best_date(dates)
# ensure dates are unique with respect to their base values
Expand Down
6 changes: 6 additions & 0 deletions lib/mods_display/html.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ class HTML
form: :physical_description,
extent: :physical_description,
geo: :extension,
copyrightDate: :origin_info,
dateCaptured: :origin_info,
dateCreated: :origin_info,
dateIssued: :origin_info,
dateModified: :origin_info,
dateValid: :origin_info,
imprint: :origin_info,
language: :language,
description: :physical_description,
Expand Down
38 changes: 38 additions & 0 deletions spec/fields/copyright_date_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::CopyrightDate do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyrightDate>
<dateIssued>issued 2025</dateIssued>
<dateModified>modified 2225</dateModified>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(copyright_date_fields(many_dates).first.label).to eq('Copyright date:')
end

it 'gets contents of copyrightDate field' do
expect(copyright_date_values(many_dates)).to eq(['copyright 1925'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for date issued' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Copyright date</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
38 changes: 38 additions & 0 deletions spec/fields/date_captured_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::DateCaptured do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyright>
<dateIssued>issued 2025</dateIssued>
<dateModified>modified 2225</dateModified>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(date_captured_fields(many_dates).first.label).to eq('Date captured:')
end

it 'gets contents of dateCaptured field' do
expect(date_captured_values(many_dates)).to eq(['captured 1825'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for capture date' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Date captured</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
38 changes: 38 additions & 0 deletions spec/fields/date_created_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::DateCreated do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyright>
<dateIssued>issued 2025</dateIssued>
<dateModified>modified 2225</dateModified>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(date_created_fields(many_dates).first.label).to eq('Date created:')
end

it 'gets contents of dateCreated field' do
expect(date_created_values(many_dates)).to eq(['created 1725'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for create date' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Date created</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
38 changes: 38 additions & 0 deletions spec/fields/date_issued_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::DateIssued do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyright>
<dateIssued>issued 2025</dateIssued>
<dateModified>modified 2225</dateModified>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(date_issued_fields(many_dates).first.label).to eq('Publication date:')
end

it 'gets contents of dateIssued field' do
expect(date_issued_values(many_dates)).to eq(['issued 2025'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for date issued' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Publication date</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
38 changes: 38 additions & 0 deletions spec/fields/date_modified_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::DateModified do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyright>
<dateIssued>issued 2025</dateIssued>
<dateModified>modified 2225</dateModified>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(date_modified_fields(many_dates).first.label).to eq('Date modified:')
end

it 'gets contents of dateModified field' do
expect(date_modified_values(many_dates)).to eq(['modified 2225'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for modified date' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Date modified</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
37 changes: 37 additions & 0 deletions spec/fields/date_valid_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# frozen_string_literal: true

require 'support/origin_info_date_helpers'

describe ModsDisplay::DateValid do
let(:many_dates) do
<<~XML
<mods xmlns="http://www.loc.gov/mods/v3">
<originInfo>
<dateCreated>created 1725</dateCreated>
<dateCaptured>captured 1825</dateCaptured>
<copyrightDate>copyright 1925</copyright>
<dateIssued>issued 2025</dateIssued>
<dateValid>valid 2125</dateValid>
</originInfo>
</mods>
XML
end

it 'gets correct label' do
expect(date_valid_fields(approximate_date).first.label).to eq('Date valid:')
end

it 'gets contents of dateValid field' do
expect(date_valid_values(many_dates)).to eq(['valid 2125'])
end

describe 'to_html' do
it 'has individual dt/dd pairs for valid date' do
html = described_class.new(
Stanford::Mods::Record.new.from_str(many_dates).origin_info
).to_html
expect(html.scan(%r{<dt>Date valid</dt>}).length).to eq(1)
expect(html.scan('<dd>').length).to eq(1)
end
end
end
Loading

0 comments on commit 3a8bacd

Please sign in to comment.