Skip to content

Commit 742f5d9

Browse files
committed
Render all possible fields in full record view
Why these changes are being introduced: UXWS has requested that we dump all record metadata in a 'more information' section, so we can gain insight in usability testing as to which fields would be helpful to include int he full record. Relevant ticket(s): * [GDT-253](https://mitlibraries.atlassian.net/browse/GDT-253) How this addresses that need: This refactors the record helper logic pertaining to the 'more information' section, such that the fields that we attempt to render in that section are only those that are mapped for geo records in transmogrifier. It also attempts to normalize how nested fields are rendered by moving some of that logic to helper methods. I still don't see this iteration as a permanent solution. My hope is that we learn more in usability testing about which of these fields are actually useful, so we can take more care in rendering them properly and reduce that section of the full record. Darcy has suggested that something rudimentary is acceptable at this point. Side effects of this change: * The `more_info` partial has been renamed to `more_info_geo`, to clarify which full record view it should be applied to. This also applies to the corresponding helper method. * I've removed unused helper methods (and corresponding tests) that I'm now fairly sure will no longer be used. * I'm not sure that the markup in the `more_info_geo` partial is semantically optimal. A list of lists raises some concerns for me, and I wonder if each field name should be a heading instead.
1 parent b159656 commit 742f5d9

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)