Skip to content

Commit 9cb4da5

Browse files
authored
Merge pull request #159 from MITLibraries/gdt-253-even-more-info
Render all possible fields in full record view
2 parents b159656 + 742f5d9 commit 9cb4da5

File tree

5 files changed

+154
-190
lines changed

5 files changed

+154
-190
lines changed

app/helpers/record_helper.rb

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -98,27 +98,30 @@ def access_type(metadata)
9898
access_right.first['description']
9999
end
100100

101-
# This method is not currently in use, but it may become useful later. Stakeholders need to see all available data
102-
# for testing.
103-
def issued_dates(dates)
104-
return_relevant_dates(dates, 'Issued')
101+
# For GDT records, a 'more information' section includes all fields that are currently mapped in
102+
# [transmogrifier](https://github.com/MITLibraries/transmogrifier/blob/main/transmogrifier/sources/json/aardvark.py).
103+
# Note: the publishers field is not yet available in TIMDEX API, but it should be added here once it is.
104+
def more_info_geo?(metadata)
105+
relevant_fields = %w[alternate_titles contributors dates format identifiers languages locations
106+
links notes provider rights]
107+
metadata.keys.any? { |key| relevant_fields.include? key }
105108
end
106109

107-
# This method is not currently in use, but it may become useful later. Stakeholders need to see all available data
108-
# for testing.
109-
def coverage_dates(dates)
110-
return_relevant_dates(dates, 'Coverage')
110+
def parse_nested_field(field)
111+
# Don't continue if it's not a nested field.
112+
return unless field.is_a?(Array) && field.first.is_a?(Hash)
113+
114+
# We don't care about display subfields with null values, our the contributors 'mitAffiliated' subfield.
115+
field.map do |subfield|
116+
subfield.reject { |key, value| key == 'mitAffiliated' || value.blank? }
117+
end.compact
111118
end
112119

113-
# This method is likely to change post-MVP. Stakeholders need to see all available data for testing.
114-
def more_info?(metadata)
115-
if metadata['citation'] || metadata['dates'] || metadata['identifiers'] || metadata['languages'] ||
116-
metadata['format'] || metadata['locations'] || metadata['notes'] || metadata['provider'] ||
117-
metadata['publicationInformation']
118-
true
119-
else
120-
false
121-
end
120+
def render_subfield(subfield)
121+
# Date ranges are handled differently than other subfields
122+
return ("kind: #{subfield['kind']}; range: " + date_range(subfield['range'])) if subfield['range'].present?
123+
124+
subfield.map { |key, value| "#{key}: #{value}" }.join('; ')
122125
end
123126

124127
def source_metadata_available?(links)
@@ -131,17 +134,6 @@ def source_metadata_link(links)
131134
links.select { |link| link['kind'] == 'Download' && link['text'] == 'Source Metadata' }.first['url']
132135
end
133136

134-
# This method is not currently in use, but it may become useful later. Stakeholders need to see all available data
135-
# for testing.
136-
def places(locations)
137-
return if locations.blank?
138-
139-
place_names = locations.select { |location| location['kind'] == 'Place Name' }
140-
return if place_names.blank?
141-
142-
place_names.map { |place| place['value'] }
143-
end
144-
145137
private
146138

147139
def render_kind_value(list)
@@ -167,21 +159,4 @@ def render_list(list)
167159

168160
"<ul>#{render_list_items(list)}</ul>"
169161
end
170-
171-
def return_relevant_dates(dates, kind)
172-
return if dates.blank? || dates&.none? { |date| date['kind'] == kind }
173-
174-
relevant_dates = dates.select { |date| date['kind'] == kind }
175-
relevant_dates&.map do |date|
176-
if date['range'].present?
177-
if date['range']['lte'] == date['range']['gte']
178-
date['range']['lte']
179-
else
180-
"#{date['range']['gte']}-#{date['range']['lte']}"
181-
end
182-
else
183-
date['value']
184-
end
185-
end&.uniq&.join('; ')
186-
end
187162
end

app/views/record/_more_info.html.erb

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<h3 class="section-title">More information</h3>
2+
3+
<ul class="list-moreinfo">
4+
<!-- Add publishers when the data is available -->
5+
6+
<% if metadata['alternateTitles'].present? %>
7+
<li><strong>Alternate titles:</strong>
8+
<ul>
9+
<% parse_nested_field(metadata['alternateTitles']).each do |subfield| %>
10+
<li><%= render_subfield(subfield) %></li>
11+
<% end %>
12+
</ul>
13+
</li>
14+
<% end %>
15+
16+
<% if metadata['dates'].present? %>
17+
<li><strong>Dates:</strong>
18+
<ul>
19+
<% parse_nested_field(metadata['dates']).each do |subfield| %>
20+
<li><%= render_subfield(subfield) %></li>
21+
<% end %>
22+
</ul>
23+
</li>
24+
<% end %>
25+
26+
<% if metadata['contributors'].present? %>
27+
<li><strong>Contributors:</strong>
28+
<ul>
29+
<% parse_nested_field(metadata['contributors']).each do |subfield| %>
30+
<li><%= render_subfield(subfield) %></li>
31+
<% end %>
32+
</ul>
33+
</li>
34+
<% end %>
35+
36+
<% if metadata['locations'].present? %>
37+
<li><strong>Locations:</strong>
38+
<ul>
39+
<% parse_nested_field(metadata['locations']).each do |subfield| %>
40+
<li><%= render_subfield(subfield) %></li>
41+
<% end %>
42+
</ul>
43+
</li>
44+
<% end %>
45+
46+
<% if metadata['notes'].present? %>
47+
<li><strong>Notes:</strong>
48+
<ul>
49+
<% parse_nested_field(metadata['notes']).each do |subfield| %>
50+
<li><%= render_subfield(subfield) %></li>
51+
<% end %>
52+
</ul>
53+
</li>
54+
<% end %>
55+
56+
<% if metadata['provider'].present? %>
57+
<li><strong>Provider:</strong> <%= metadata['provider'] %></li>
58+
<% end %>
59+
60+
<% if metadata['citation'].present? %>
61+
<li><strong>Citation:</strong> <%= metadata['citation'] %></li>
62+
<% end %>
63+
64+
<% if metadata['format'].present? %>
65+
<li><strong>Format:</strong> <%= metadata['format'] %></li>
66+
<% end %>
67+
68+
<% if metadata['languages'].present? %>
69+
<li><strong>Languages:</strong>
70+
<ul>
71+
<% metadata['languages'].each do |language| %>
72+
<li><%= language %></li>
73+
<% end %>
74+
</ul>
75+
</li>
76+
<% end %>
77+
78+
<% if metadata['links'].present? %>
79+
<li><strong>Links:</strong>
80+
<ul>
81+
<% parse_nested_field(metadata['links']).each do |subfield| %>
82+
<li><%= render_subfield(subfield) %></li>
83+
<% end %>
84+
</ul>
85+
</li>
86+
<% end %>
87+
88+
<% if metadata['rights'].present? %>
89+
<li><strong>Rights:</strong>
90+
<ul>
91+
<% parse_nested_field(metadata['rights']).each do |subfield| %>
92+
<li><%= render_subfield(subfield) %></li>
93+
<% end %>
94+
</ul>
95+
</li>
96+
<% end %>
97+
</ul>

app/views/record/_record_geo.html.erb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@
3232
<h3 class="section-title">Subjects</h3>
3333
<ul>
3434
<% @record['subjects'].each do |subject| %>
35-
<li><%= subject['value'].join(';' ) %></li>
35+
<li><%= subject['value'].join('; ') %></li>
3636
<% end %>
3737
</ul>
3838
<% end %>
3939

40-
<% if more_info?(@record) %>
41-
<%= render partial: 'more_info', locals: { metadata: @record } %>
40+
<% if more_info_geo?(@record) %>
41+
<%= render partial: 'more_info_geo', locals: { metadata: @record } %>
4242
<% end %>
4343

4444
<div class="record-access-links">

0 commit comments

Comments
 (0)