mods_display 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/README.md +10 -18
  4. data/app/components/mods_display/row_field_component.html.erb +11 -0
  5. data/app/components/mods_display/row_field_component.rb +43 -0
  6. data/app/helpers/mods_display/record_helper.rb +20 -0
  7. data/config/locales/en.yml +3 -0
  8. data/lib/mods_display/fields/access_condition.rb +5 -5
  9. data/lib/mods_display/fields/cartographics.rb +7 -9
  10. data/lib/mods_display/fields/collection.rb +14 -14
  11. data/lib/mods_display/fields/contact.rb +7 -7
  12. data/lib/mods_display/fields/contents.rb +5 -1
  13. data/lib/mods_display/fields/copyright_date.rb +9 -0
  14. data/lib/mods_display/fields/date_captured.rb +9 -0
  15. data/lib/mods_display/fields/date_created.rb +9 -0
  16. data/lib/mods_display/fields/date_issued.rb +9 -0
  17. data/lib/mods_display/fields/date_modified.rb +9 -0
  18. data/lib/mods_display/fields/date_other.rb +26 -0
  19. data/lib/mods_display/fields/date_valid.rb +9 -0
  20. data/lib/mods_display/fields/description.rb +6 -3
  21. data/lib/mods_display/fields/edition.rb +22 -0
  22. data/lib/mods_display/fields/extent.rb +4 -4
  23. data/lib/mods_display/fields/field.rb +54 -8
  24. data/lib/mods_display/fields/form.rb +4 -4
  25. data/lib/mods_display/fields/frequency.rb +19 -0
  26. data/lib/mods_display/fields/genre.rb +5 -2
  27. data/lib/mods_display/fields/geo.rb +2 -2
  28. data/lib/mods_display/fields/identifier.rb +5 -2
  29. data/lib/mods_display/fields/imprint.rb +13 -36
  30. data/lib/mods_display/fields/issuance.rb +19 -0
  31. data/lib/mods_display/fields/language.rb +4 -4
  32. data/lib/mods_display/fields/location.rb +5 -5
  33. data/lib/mods_display/fields/name.rb +8 -7
  34. data/lib/mods_display/fields/nested_related_item.rb +45 -37
  35. data/lib/mods_display/fields/note.rb +10 -7
  36. data/lib/mods_display/fields/place.rb +35 -0
  37. data/lib/mods_display/fields/publisher.rb +21 -0
  38. data/lib/mods_display/fields/reference_title.rb +30 -0
  39. data/lib/mods_display/fields/related_item.rb +59 -40
  40. data/lib/mods_display/fields/resource_type.rb +7 -4
  41. data/lib/mods_display/fields/subject.rb +3 -3
  42. data/lib/mods_display/fields/title.rb +46 -30
  43. data/lib/mods_display/fields/values.rb +1 -0
  44. data/lib/mods_display/html.rb +25 -10
  45. data/lib/mods_display/version.rb +1 -1
  46. data/lib/mods_display.rb +13 -0
  47. data/mods_display.gemspec +1 -1
  48. metadata +21 -5
@@ -3,8 +3,11 @@
3
3
  module ModsDisplay
4
4
  class Identifier < Field
5
5
  def fields
6
- return_fields = @values.map do |value|
7
- ModsDisplay::Values.new(label: displayLabel(value) || identifier_label(value), values: [element_text(value)])
6
+ return_fields = @stanford_mods_elements.map do |identifier_element|
7
+ ModsDisplay::Values.new(
8
+ label: displayLabel(identifier_element) || identifier_label(identifier_element),
9
+ values: [element_text(identifier_element)]
10
+ )
8
11
  end
9
12
  collapse_fields(return_fields)
10
13
  end
@@ -9,28 +9,28 @@ module ModsDisplay
9
9
  end
10
10
 
11
11
  def origin_info_data
12
- @values.map do |value|
12
+ @stanford_mods_elements.map do |origin_info_element|
13
13
  return_fields = []
14
14
 
15
- edition = edition_element(value)
16
- place = place_element(value)
17
- publisher = publisher_element(value)
18
- parts = parts_element(value)
15
+ edition = edition_element(origin_info_element)
16
+ place = place_element(origin_info_element)
17
+ publisher = publisher_element(origin_info_element)
18
+ parts = parts_element(origin_info_element)
19
19
  place_pub = compact_and_join_with_delimiter([place, publisher], ' : ')
20
20
  edition_place = compact_and_join_with_delimiter([edition, place_pub], ' - ')
21
21
  joined_place_parts = compact_and_join_with_delimiter([edition_place, parts], ', ')
22
22
 
23
23
  unless joined_place_parts.empty?
24
24
  return_fields << ModsDisplay::Values.new(
25
- label: displayLabel(value) || I18n.t('mods_display.imprint'),
25
+ label: displayLabel(origin_info_element) || I18n.t('mods_display.imprint'),
26
26
  values: [joined_place_parts]
27
27
  )
28
28
  end
29
- return_fields.concat(date_values(value))
29
+ return_fields.concat(date_values(origin_info_element))
30
30
 
31
- other_pub_info(value).each do |pub_info|
31
+ other_pub_info(origin_info_element).each do |pub_info|
32
32
  return_fields << ModsDisplay::Values.new(
33
- label: displayLabel(value) || pub_info_labels[pub_info.name.to_sym],
33
+ label: displayLabel(origin_info_element) || pub_info_labels[pub_info.name.to_sym],
34
34
  values: [element_text(pub_info)]
35
35
  )
36
36
  end
@@ -48,7 +48,7 @@ module ModsDisplay
48
48
 
49
49
  ModsDisplay::Values.new(
50
50
  label: displayLabel(element) || pub_info_labels[date_field],
51
- values: select_the_best_date(date_values)
51
+ values: select_best_date(date_values)
52
52
  )
53
53
  end.compact
54
54
  end
@@ -117,6 +117,8 @@ module ModsDisplay
117
117
  end.map(&:text).join(' ').strip
118
118
  end
119
119
 
120
+ # not an exact duplicate of the method in ModsDisplay::Place, particularly trailing punctuation code
121
+ # as ModsDisplay::Place is not intended to combine with publisher in an imprint string
120
122
  def place_element(value)
121
123
  return if value.place.text.strip.empty?
122
124
 
@@ -142,7 +144,7 @@ module ModsDisplay
142
144
  date_values = imprint.dates([date_field])
143
145
  next if date_values.empty?
144
146
 
145
- select_the_best_date(date_values)
147
+ select_best_date(date_values)
146
148
  end.flatten.compact.reject do |date|
147
149
  date.strip.empty?
148
150
  end.map(&:strip)
@@ -162,30 +164,5 @@ module ModsDisplay
162
164
  issuance: I18n.t('mods_display.issuance'),
163
165
  frequency: I18n.t('mods_display.frequency') }
164
166
  end
165
-
166
- def select_the_best_date(dates)
167
- # ensure dates are unique with respect to their base values
168
- dates = dates.group_by(&:base_value).map do |_value, group|
169
- group.first if group.one?
170
-
171
- # if one of the duplicates wasn't encoded, use that one. see:
172
- # https://consul.stanford.edu/display/chimera/MODS+display+rules#MODSdisplayrules-3b.%3CoriginInfo%3E
173
- if group.reject(&:encoding).any?
174
- group.reject(&:encoding).first
175
-
176
- # otherwise just randomly pick the last in the group
177
- else
178
- group.last
179
- end
180
- end
181
-
182
- # if any single dates are already part of a range, discard them
183
- range_base_values = dates.select { |date| date.is_a?(Stanford::Mods::Imprint::DateRange) }
184
- .map(&:base_values).flatten
185
- dates = dates.reject { |date| range_base_values.include?(date.base_value) }
186
-
187
- # output formatted dates with qualifiers, CE/BCE, etc.
188
- dates.map(&:qualified_value)
189
- end
190
167
  end
191
168
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModsDisplay
4
+ class Issuance < Field
5
+ def fields
6
+ return_fields = @stanford_mods_elements.map do |origin_info_element|
7
+ issuance_value = origin_info_element.issuance&.text&.strip
8
+ next unless issuance_value.present?
9
+
10
+ ModsDisplay::Values.new(
11
+ label: I18n.t('mods_display.issuance'),
12
+ values: [issuance_value],
13
+ field: self
14
+ )
15
+ end.compact
16
+ collapse_fields(return_fields)
17
+ end
18
+ end
19
+ end
@@ -3,14 +3,14 @@
3
3
  module ModsDisplay
4
4
  class Language < Field
5
5
  def fields
6
- return_fields = @values.map do |value|
7
- next unless value.respond_to?(:languageTerm)
6
+ return_fields = @stanford_mods_elements.map do |language_element|
7
+ next unless language_element.respond_to?(:languageTerm)
8
8
 
9
- value.languageTerm.map do |term|
9
+ language_element.languageTerm.map do |term|
10
10
  next unless term.attributes['type'].respond_to?(:value) && term.attributes['type'].value == 'code'
11
11
 
12
12
  ModsDisplay::Values.new(
13
- label: displayLabel(value) || displayLabel(term) || I18n.t('mods_display.language'),
13
+ label: displayLabel(language_element) || displayLabel(term) || I18n.t('mods_display.language'),
14
14
  values: [language_codes[element_text(term)]]
15
15
  )
16
16
  end.flatten.compact
@@ -4,20 +4,20 @@ module ModsDisplay
4
4
  class Location < Field
5
5
  def fields
6
6
  return_fields = []
7
- @values.each do |location|
8
- location.children.each do |child|
7
+ @stanford_mods_elements.each do |location_element|
8
+ location_element.children.each do |child|
9
9
  next unless location_field_keys.include?(child.name.to_sym)
10
10
 
11
11
  if child.name.to_sym == :url
12
- loc_label = displayLabel(location) || I18n.t('mods_display.location')
12
+ loc_label = displayLabel(location_element) || I18n.t('mods_display.location')
13
13
  value = "<a href='#{element_text(child)}'>#{(displayLabel(child) || element_text(child)).gsub(/:$/,
14
14
  '')}</a>"
15
15
  else
16
- loc_label = location_label(child) || displayLabel(location) || I18n.t('mods_display.location')
16
+ loc_label = location_label(child) || displayLabel(location_element) || I18n.t('mods_display.location')
17
17
  value = element_text(child)
18
18
  end
19
19
  return_fields << ModsDisplay::Values.new(
20
- label: loc_label || displayLabel(location) || I18n.t('mods_display.location'),
20
+ label: loc_label || displayLabel(location_element) || I18n.t('mods_display.location'),
21
21
  values: [value]
22
22
  )
23
23
  end
@@ -4,15 +4,16 @@ module ModsDisplay
4
4
  class Name < Field
5
5
  include ModsDisplay::RelatorCodes
6
6
 
7
- # this returns a hash:
8
- # { role1 label => [ ModsDisplay:Name:Person, ModsDisplay:Name:Person, ...], role2 label => [ ModsDisplay:Name:Person, ModsDisplay:Name:Person, ...] }
7
+ # returns a hash:
8
+ # { role1 label => [ ModsDisplay:Name:Person, ModsDisplay:Name:Person, ...],
9
+ # role2 label => [ ModsDisplay:Name:Person, ModsDisplay:Name:Person, ...] }
9
10
  def fields
10
- return_fields = @values.map do |value|
11
- name_parts = ModsDisplay::NameFormatter.format(value)
12
- person = name_parts ? ModsDisplay::Name::Person.new(name: name_parts, name_identifiers: value.xpath('mods:nameIdentifier', mods: MODS_NS)) : nil
11
+ return_fields = @stanford_mods_elements.map do |plain_name_element|
12
+ name_parts = ModsDisplay::NameFormatter.format(plain_name_element)
13
+ person = name_parts ? ModsDisplay::Name::Person.new(name: name_parts, name_identifiers: plain_name_element.xpath('mods:nameIdentifier', mods: MODS_NS)) : nil
13
14
  # The person may have multiple roles, so we have to divide them up into an array
14
- role_labels(value).collect do |role_label|
15
- ModsDisplay::Values.new(label: displayLabel(value) || role_label, values: [person]) if person
15
+ role_labels(plain_name_element).collect do |role_label|
16
+ ModsDisplay::Values.new(label: displayLabel(plain_name_element) || role_label, values: [person]) if person
16
17
  end
17
18
  end.flatten.compact
18
19
  collapse_roles(collapse_fields(return_fields))
@@ -8,62 +8,70 @@ module ModsDisplay
8
8
  class NestedRelatedItem < Field
9
9
  include ModsDisplay::RelatedItemConcerns
10
10
 
11
+ def initialize(values, value_renderer: ValueRenderer)
12
+ super(values)
13
+ @value_renderer = value_renderer
14
+ end
15
+
11
16
  def fields
12
17
  @fields ||= begin
13
- return_fields = RelatedItemValue.for_values(@values).map do |value|
14
- next if value.collection?
15
- next unless render_nested_related_item?(value)
18
+ return_fields = RelatedItemValue.for_values(@stanford_mods_elements).map do |related_item_element|
19
+ next if related_item_element.collection?
20
+ next unless render_nested_related_item?(related_item_element)
16
21
 
17
- related_item_mods_object(value)
22
+ related_item_text = @value_renderer.new(related_item_element).render
23
+
24
+ ModsDisplay::Values.new(
25
+ label: related_item_label(related_item_element),
26
+ values: [related_item_text]
27
+ )
18
28
  end.compact
19
29
  collapse_fields(return_fields)
20
30
  end
21
31
  end
22
32
 
23
- def to_html(view_context = ApplicationController.renderer)
24
- helpers = view_context.respond_to?(:simple_format) ? view_context : ApplicationController.new.view_context
33
+ # this class provides html markup and is subclassed in purl application
34
+ class ValueRenderer
35
+ def initialize(related_item_element)
36
+ @related_item_element = related_item_element
37
+ end
25
38
 
26
- component = ModsDisplay::ListFieldComponent.with_collection(
27
- fields,
28
- value_transformer: ->(value) { helpers.format_mods_html(value.to_s) },
29
- list_html_attributes: { class: 'mods_display_nested_related_items' },
30
- list_item_html_attributes: { class: 'mods_display_nested_related_item open' }
31
- )
39
+ def render
40
+ [Array.wrap(mods_display_html.title).first, body_presence(mods_display_html.body)].compact.join
41
+ end
32
42
 
33
- view_context.render component, layout: false
34
- end
43
+ protected
35
44
 
36
- private
45
+ attr_reader :related_item_element
37
46
 
38
- def related_item_mods_object(value)
39
- mods = ::Stanford::Mods::Record.new.tap do |r|
40
- # dup'ing the value adds the appropriate namespaces, but...
41
- munged_node = value.dup.tap do |x|
42
- # ... the mods gem also expects the root of the document to have the root tag <mods>
43
- x.name = 'mods'
44
- end
45
-
46
- r.from_nk_node(munged_node)
47
+ def mods_display_html
48
+ @mods_display_html ||= ModsDisplay::HTML.new(mods)
47
49
  end
48
- related_item = ModsDisplay::HTML.new(mods)
49
50
 
50
- ModsDisplay::Values.new(
51
- label: related_item_label(value),
52
- values: [[Array.wrap(related_item.title).first, related_item_body(related_item)].compact.join]
53
- )
54
- end
51
+ def mods
52
+ @mods ||= ::Stanford::Mods::Record.new.tap do |r|
53
+ # dup'ing the value adds the appropriate namespaces, but...
54
+ munged_node = related_item_element.dup.tap do |x|
55
+ # ... the mods gem also expects the root of the document to have the root tag <mods>
56
+ x.name = 'mods'
57
+ end
55
58
 
56
- def related_item_body(related_item)
57
- body = related_item.body
59
+ r.from_nk_node(munged_node)
60
+ end
61
+ end
58
62
 
59
- return if body == '<dl></dl>'
63
+ def body_presence(body)
64
+ return if body == '<dl></dl>'
60
65
 
61
- body
66
+ body
67
+ end
62
68
  end
63
69
 
64
- def related_item_label(item)
65
- return displayLabel(item) if displayLabel(item)
66
- return I18n.t('mods_display.constituent') if item.constituent?
70
+ private
71
+
72
+ def related_item_label(related_item_element)
73
+ return displayLabel(related_item_element) if displayLabel(related_item_element)
74
+ return I18n.t('mods_display.constituent') if related_item_element.constituent?
67
75
 
68
76
  I18n.t('mods_display.host')
69
77
  end
@@ -3,9 +3,12 @@
3
3
  module ModsDisplay
4
4
  class Note < Field
5
5
  def fields
6
- return_fields = note_fields.map do |value|
7
- ModsDisplay::Values.new(label: displayLabel(value) || note_label(value), values: [element_text(value)],
8
- field: self)
6
+ return_fields = note_fields.map do |note_element|
7
+ ModsDisplay::Values.new(
8
+ label: displayLabel(note_element) || note_label(note_element),
9
+ values: [element_text(note_element)],
10
+ field: self
11
+ )
9
12
  end
10
13
  collapse_fields(return_fields)
11
14
  end
@@ -17,10 +20,10 @@ module ModsDisplay
17
20
  end
18
21
 
19
22
  def note_fields
20
- @values.select do |value|
21
- (!value.attributes['type'].respond_to?(:value) ||
22
- (value.attributes['type'].respond_to?(:value) &&
23
- value.attributes['type'].value.downcase != 'contact'))
23
+ @stanford_mods_elements.select do |note_element|
24
+ !note_element.attributes['type'].respond_to?(:value) ||
25
+ (note_element.attributes['type'].respond_to?(:value) &&
26
+ note_element.attributes['type'].value.downcase != 'contact')
24
27
  end
25
28
  end
26
29
 
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModsDisplay
4
+ class Place < Field
5
+ include ModsDisplay::CountryCodes
6
+
7
+ def fields
8
+ return_fields = @stanford_mods_elements.map do |origin_info_element|
9
+ place_value = place_element(origin_info_element)
10
+ next unless place_value.present?
11
+
12
+ ModsDisplay::Values.new(
13
+ label: I18n.t('mods_display.place'),
14
+ values: [place_value],
15
+ field: self
16
+ )
17
+ end.compact
18
+ collapse_fields(return_fields)
19
+ end
20
+
21
+ private
22
+
23
+ # not an exact duplicate of the method in Imprint, particularly trailing punctuation code
24
+ def place_element(origin_info_element)
25
+ return if origin_info_element.place.text.strip.empty?
26
+
27
+ places = ModsDisplay::Imprint.new(origin_info_element).place_terms(origin_info_element).filter_map { |p| p.text unless p.text.strip.empty? }
28
+ compact_and_remove_trailing_delimiter(places, ':').join
29
+ end
30
+
31
+ def compact_and_remove_trailing_delimiter(values, delimiter = ':')
32
+ values.flatten.filter_map { |v| v.gsub(/ *#{delimiter}$/, '') if v.present? }.compact
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModsDisplay
4
+ class Publisher < Field
5
+ def fields
6
+ return_fields = @stanford_mods_elements.map do |origin_info_element|
7
+ publisher_value = Stanford::Mods::Imprint.new(origin_info_element).publisher_vals_str
8
+ next unless publisher_value.present?
9
+
10
+ publisher_value.gsub!(/ *,$/, '')
11
+
12
+ ModsDisplay::Values.new(
13
+ label: I18n.t('mods_display.publisher'),
14
+ values: [publisher_value],
15
+ field: self
16
+ )
17
+ end.compact
18
+ collapse_fields(return_fields)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ModsDisplay
4
+ class ReferenceTitle < Field
5
+ def fields
6
+ # Reference title is a composite field that includes parts from elsewhere in the record.
7
+ return [] unless @stanford_mods_elements.present?
8
+
9
+ return_fields = [ModsDisplay::Values.new(label: displayLabel(@stanford_mods_elements.first) || label, values: [title_value].compact)]
10
+ collapse_fields(return_fields)
11
+ end
12
+
13
+ private
14
+
15
+ def root
16
+ @root ||= @stanford_mods_elements.first.document.root
17
+ end
18
+
19
+ def displayLabel(element)
20
+ super(element) || I18n.t('mods_display.referenced_by')
21
+ end
22
+
23
+ def title_value
24
+ [@stanford_mods_elements,
25
+ root.xpath('mods:originInfo/mods:dateOther', mods: MODS_NS),
26
+ root.xpath('mods:part/mods:detail/mods:number', mods: MODS_NS),
27
+ root.xpath('mods:note', mods: MODS_NS)].flatten.compact.map!(&:text).map!(&:strip).join(' ').presence
28
+ end
29
+ end
30
+ end
@@ -4,65 +4,84 @@ module ModsDisplay
4
4
  class RelatedItem < Field
5
5
  include ModsDisplay::RelatedItemConcerns
6
6
 
7
- def fields
8
- return_fields = RelatedItemValue.for_values(@values).map do |value|
9
- next if value.collection?
10
- next if render_nested_related_item?(value)
7
+ def initialize(values, value_renderer: ValueRenderer)
8
+ super(values)
9
+ @value_renderer = value_renderer
10
+ end
11
11
 
12
- text = related_item_value(value)
12
+ def fields
13
+ return_fields = RelatedItemValue.for_values(@stanford_mods_elements).map do |related_item_element|
14
+ next if related_item_element.collection?
15
+ next if render_nested_related_item?(related_item_element)
13
16
 
17
+ text = @value_renderer.new(related_item_element).render
14
18
  next if text.nil? || text.empty?
15
19
 
16
- ModsDisplay::Values.new(label: related_item_label(value), values: [text])
20
+ ModsDisplay::Values.new(
21
+ label: related_item_label(related_item_element),
22
+ values: [text]
23
+ )
17
24
  end.compact
18
25
  collapse_fields(return_fields)
19
26
  end
20
27
 
21
- private
28
+ # this class provides html markup and is mimicking the same class
29
+ # in NestedRelatedItem (which is subclassed in purl application)
30
+ class ValueRenderer
31
+ def initialize(related_item_element)
32
+ @related_item_element = related_item_element
33
+ end
22
34
 
23
- def delimiter
24
- '<br />'.html_safe
25
- end
35
+ def render
36
+ if related_item_element.location?
37
+ element_text(related_item_element.location_nodeset)
38
+ elsif related_item_element.reference?
39
+ reference_title(related_item_element)
40
+ elsif related_item_element.titleInfo_nodeset.any?
41
+ title = element_text(related_item_element.titleInfo_nodeset)
42
+ location = nil
43
+ location = element_text(related_item_element.location_url_nodeset) if related_item_element.location_url_nodeset.length.positive?
44
+
45
+ return if title.empty?
46
+
47
+ if location
48
+ "<a href='#{location}'>#{title}</a>".html_safe
49
+ else
50
+ title
51
+ end
52
+ elsif related_item_element.note_nodeset.any?
53
+ citation = related_item_element.note_nodeset.find { |note| note['type'] == 'preferred citation' }
26
54
 
27
- def related_item_value(item)
28
- if item.location?
29
- element_text(item.location_nodeset)
30
- elsif item.reference?
31
- reference_title(item)
32
- elsif item.titleInfo_nodeset.any?
33
- title = element_text(item.titleInfo_nodeset)
34
- location = nil
35
- location = element_text(item.location_url_nodeset) if item.location_url_nodeset.length.positive?
36
-
37
- return if title.empty?
38
-
39
- if location
40
- "<a href='#{location}'>#{title}</a>".html_safe
41
- else
42
- title
55
+ element_text(citation) if citation
43
56
  end
44
- elsif item.note_nodeset.any?
45
- citation = item.note_nodeset.find { |note| note['type'] == 'preferred citation' }
57
+ end
58
+
59
+ protected
46
60
 
47
- element_text(citation) if citation
61
+ attr_reader :related_item_element
62
+
63
+ def element_text(element)
64
+ element.xpath('.//text()').to_html.strip
48
65
  end
49
- end
50
66
 
51
- def reference_title(item)
52
- [item.titleInfo_nodeset,
53
- item.originInfo.dateOther,
54
- item.part.detail.number,
55
- item.note_nodeset].flatten.compact.map!(&:text).map!(&:strip).join(' ')
67
+ def reference_title(related_item_element)
68
+ [related_item_element.titleInfo_nodeset,
69
+ related_item_element.originInfo.dateOther,
70
+ related_item_element.part.detail.number,
71
+ related_item_element.note_nodeset].flatten.compact.map!(&:text).map!(&:strip).join(' ')
72
+ end
56
73
  end
57
74
 
58
- def related_item_label(item)
59
- if displayLabel(item)
60
- displayLabel(item)
75
+ private
76
+
77
+ def related_item_label(related_item_element)
78
+ if displayLabel(related_item_element)
79
+ displayLabel(related_item_element)
61
80
  else
62
81
  case
63
- when item.location?
82
+ when related_item_element.location?
64
83
  return I18n.t('mods_display.location')
65
- when item.reference?
84
+ when related_item_element.reference?
66
85
  return I18n.t('mods_display.referenced_by')
67
86
  end
68
87
  I18n.t('mods_display.related_item')
@@ -3,16 +3,19 @@
3
3
  module ModsDisplay
4
4
  class ResourceType < Field
5
5
  def fields
6
- return_fields = @values.map do |value|
7
- ModsDisplay::Values.new(label: displayLabel(value) || label, values: [element_text(value)])
6
+ return_fields = @stanford_mods_elements.map do |type_of_resource_element|
7
+ ModsDisplay::Values.new(
8
+ label: displayLabel(type_of_resource_element) || label,
9
+ values: [element_text(type_of_resource_element)]
10
+ )
8
11
  end
9
12
  collapse_fields(return_fields)
10
13
  end
11
14
 
12
15
  private
13
16
 
14
- def displayLabel(element)
15
- super(element) || I18n.t('mods_display.type_of_resource')
17
+ def displayLabel(type_of_resource_element)
18
+ super(type_of_resource_element) || I18n.t('mods_display.type_of_resource')
16
19
  end
17
20
  end
18
21
  end
@@ -4,11 +4,11 @@ module ModsDisplay
4
4
  class Subject < Field
5
5
  def fields
6
6
  return_fields = []
7
- @values.each do |value|
7
+ @stanford_mods_elements.each do |subject_element|
8
8
  return_values = []
9
- label = displayLabel(value) || I18n.t('mods_display.subject')
9
+ label = displayLabel(subject_element) || I18n.t('mods_display.subject')
10
10
  return_text = []
11
- selected_subjects(value).each do |child|
11
+ selected_subjects(subject_element).each do |child|
12
12
  if respond_to?(:"process_#{child.name}")
13
13
  method_send = send(:"process_#{child.name}", child)
14
14
  return_text << method_send unless method_send.to_s.empty?