mods_display 1.0.0.alpha4 → 1.1.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +42 -0
  3. data/.rubocop_todo.yml +72 -401
  4. data/Gemfile +4 -1
  5. data/README.md +0 -63
  6. data/Rakefile +8 -6
  7. data/app/components/mods_display/field_component.rb +2 -0
  8. data/app/components/mods_display/list_field_component.rb +2 -0
  9. data/app/components/mods_display/record_component.rb +2 -0
  10. data/app/helpers/mods_display/record_helper.rb +6 -7
  11. data/app/models/mods_display/record.rb +2 -1
  12. data/config.ru +2 -2
  13. data/lib/mods_display/country_codes.rb +2 -1
  14. data/lib/mods_display/fields/abstract.rb +2 -0
  15. data/lib/mods_display/fields/access_condition.rb +11 -8
  16. data/lib/mods_display/fields/audience.rb +2 -0
  17. data/lib/mods_display/fields/cartographics.rb +11 -4
  18. data/lib/mods_display/fields/collection.rb +7 -3
  19. data/lib/mods_display/fields/contact.rb +6 -1
  20. data/lib/mods_display/fields/contents.rb +2 -0
  21. data/lib/mods_display/fields/description.rb +4 -3
  22. data/lib/mods_display/fields/extent.rb +4 -1
  23. data/lib/mods_display/fields/field.rb +10 -9
  24. data/lib/mods_display/fields/form.rb +4 -1
  25. data/lib/mods_display/fields/genre.rb +3 -1
  26. data/lib/mods_display/fields/geo.rb +5 -2
  27. data/lib/mods_display/fields/identifier.rb +21 -18
  28. data/lib/mods_display/fields/imprint.rb +168 -217
  29. data/lib/mods_display/fields/language.rb +5 -1
  30. data/lib/mods_display/fields/location.rb +6 -3
  31. data/lib/mods_display/fields/name.rb +39 -23
  32. data/lib/mods_display/fields/nested_related_item.rb +18 -2
  33. data/lib/mods_display/fields/note.rb +10 -8
  34. data/lib/mods_display/fields/related_item.rb +32 -27
  35. data/lib/mods_display/fields/resource_type.rb +3 -1
  36. data/lib/mods_display/fields/sub_title.rb +2 -0
  37. data/lib/mods_display/fields/subject.rb +17 -50
  38. data/lib/mods_display/fields/title.rb +39 -28
  39. data/lib/mods_display/fields/values.rb +2 -0
  40. data/lib/mods_display/html.rb +4 -3
  41. data/lib/mods_display/related_item_concerns.rb +4 -2
  42. data/lib/mods_display/relator_codes.rb +2 -0
  43. data/lib/mods_display/version.rb +3 -1
  44. data/lib/mods_display.rb +5 -3
  45. data/mods_display.gemspec +1 -1
  46. metadata +14 -8
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class Name < Field
3
5
  include ModsDisplay::RelatorCodes
4
6
  def fields
5
7
  return_fields = @values.map do |value|
6
- person = if value.displayForm.length > 0
7
- ModsDisplay::Name::Person.new(name: value.displayForm.text)
8
+ person = if value.displayForm.length.positive?
9
+ ModsDisplay::Name::Person.new(name: element_text(value.displayForm))
8
10
  elsif !name_parts(value).empty?
9
11
  ModsDisplay::Name::Person.new(name: name_parts(value))
10
12
  end
@@ -40,11 +42,25 @@ module ModsDisplay
40
42
  def role_labels(element)
41
43
  default_label = I18n.t('mods_display.associated_with')
42
44
  return [default_label] unless element.role.present? && element.role.roleTerm.present?
43
- element.role.roleTerm.collect do |role|
44
- relator_codes[role.text.downcase] || role.text.capitalize || default_label
45
+
46
+ element.role.collect do |role|
47
+ codes, text = role.roleTerm.partition { |term| term['type'] == 'code' }
48
+
49
+ # prefer mappable role term codes
50
+ label = codes.map { |term| relator_codes[term.text.downcase] }.first
51
+
52
+ # but fall back to given text
53
+ label ||= text.map { |term| format_role(term) }.first
54
+
55
+ # or just the default
56
+ label || default_label
45
57
  end.uniq
46
58
  end
47
59
 
60
+ def format_role(element)
61
+ element_text(element).capitalize.sub(/[.,:;]+$/, '')
62
+ end
63
+
48
64
  def role?(element)
49
65
  element.respond_to?(:role) && !element.role.empty?
50
66
  end
@@ -55,10 +71,9 @@ module ModsDisplay
55
71
  end
56
72
 
57
73
  def name_parts(element)
58
- output = ''
59
- output << [unqualified_name_parts(element),
60
- qualified_name_parts(element, 'family'),
61
- qualified_name_parts(element, 'given')].flatten.compact.join(', ')
74
+ output = [unqualified_name_parts(element),
75
+ qualified_name_parts(element, 'family'),
76
+ qualified_name_parts(element, 'given')].flatten.compact.join(', ')
62
77
  terms = qualified_name_parts(element, 'termsOfAddress')
63
78
  unless terms.empty?
64
79
  term_delimiter = ', '
@@ -66,15 +81,13 @@ module ModsDisplay
66
81
  output = [output, terms.join(', ')].flatten.compact.join(term_delimiter)
67
82
  end
68
83
  dates = qualified_name_parts(element, 'date')
69
- unless dates.empty?
70
- output = [output, qualified_name_parts(element, 'date')].flatten.compact.join(', ')
71
- end
84
+ output = [output, qualified_name_parts(element, 'date')].flatten.compact.join(', ') unless dates.empty?
72
85
  output
73
86
  end
74
87
 
75
88
  def unqualified_name_parts(element)
76
89
  element.namePart.map do |part|
77
- part.text unless part.attributes['type']
90
+ element_text(part) unless part.attributes['type']
78
91
  end.compact
79
92
  end
80
93
 
@@ -82,7 +95,7 @@ module ModsDisplay
82
95
  element.namePart.map do |part|
83
96
  if part.attributes['type'].respond_to?(:value) &&
84
97
  part.attributes['type'].value == type
85
- part.text
98
+ element_text(part)
86
99
  end
87
100
  end.compact
88
101
  end
@@ -90,7 +103,7 @@ module ModsDisplay
90
103
  def name_part_begins_with_roman_numeral?(part)
91
104
  first_part = part.split(/\s|,/).first.strip
92
105
  first_part.chars.all? do |char|
93
- %w(I X C L V).include? char
106
+ %w[I X C L V].include? char
94
107
  end
95
108
  end
96
109
 
@@ -98,15 +111,17 @@ module ModsDisplay
98
111
  roles = element.role.map do |role|
99
112
  role.roleTerm.find do |term|
100
113
  term.attributes['type'].respond_to?(:value) &&
101
- term.attributes['type'].value == 'text'
114
+ term.attributes['type'].value == 'text'
102
115
  end
103
116
  end.compact
104
- roles = element.role.map do |role|
105
- role.roleTerm.find do |term|
106
- !term.attributes['type'].respond_to?(:value)
107
- end
108
- end.compact if roles.empty?
109
- roles.map { |t| t.text.strip }
117
+ if roles.empty?
118
+ roles = element.role.map do |role|
119
+ role.roleTerm.find do |term|
120
+ !term.attributes['type'].respond_to?(:value)
121
+ end
122
+ end.compact
123
+ end
124
+ roles.map { |t| element_text(t) }
110
125
  end
111
126
 
112
127
  def unencoded_role_term?(element)
@@ -130,7 +145,7 @@ module ModsDisplay
130
145
  # Normalize label headings by filtering out some punctuation and ending in :
131
146
  def normalize_labels(label_order, results)
132
147
  label_order.uniq.map do |k|
133
- label = k.tr('.', '').tr(':', '').strip + ':'
148
+ label = "#{k.tr('.', '').tr(':', '').strip}:"
134
149
  if label != k
135
150
  results[label] = results[k]
136
151
  results.delete(k)
@@ -152,8 +167,9 @@ module ModsDisplay
152
167
 
153
168
  class Person
154
169
  attr_accessor :name
170
+
155
171
  def initialize(data)
156
- @name = data[:name]
172
+ @name = data[:name]
157
173
  end
158
174
 
159
175
  def to_s
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  ##
3
5
  # This class will hopefully take over for related item support more broadly.
@@ -21,7 +23,12 @@ module ModsDisplay
21
23
  def to_html(view_context = ApplicationController.renderer)
22
24
  helpers = view_context.respond_to?(:simple_format) ? view_context : ApplicationController.new.view_context
23
25
 
24
- component = ModsDisplay::ListFieldComponent.with_collection(fields, value_transformer: ->(value) { helpers.link_urls_and_email(value.to_s) }, list_html_attributes: { class: 'mods_display_nested_related_items' }, list_item_html_attributes: { class: 'mods_display_nested_related_item open' })
26
+ component = ModsDisplay::ListFieldComponent.with_collection(
27
+ fields,
28
+ value_transformer: ->(value) { helpers.link_urls_and_email(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
+ )
25
32
 
26
33
  view_context.render component, layout: false
27
34
  end
@@ -29,7 +36,15 @@ module ModsDisplay
29
36
  private
30
37
 
31
38
  def related_item_mods_object(value)
32
- mods = ::Stanford::Mods::Record.new.tap { |r| r.from_str("<mods>#{value.children.to_xml}</mods>", false) }
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
+ end
33
48
  related_item = ModsDisplay::HTML.new(mods)
34
49
 
35
50
  ModsDisplay::Values.new(
@@ -42,6 +57,7 @@ module ModsDisplay
42
57
  body = related_item.body
43
58
 
44
59
  return if body == '<dl></dl>'
60
+
45
61
  body
46
62
  end
47
63
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class Note < Field
3
5
  def fields
4
6
  return_fields = note_fields.map do |value|
5
- ModsDisplay::Values.new(label: displayLabel(value) || note_label(value), values: [value.text])
7
+ ModsDisplay::Values.new(label: displayLabel(value) || note_label(value), values: [element_text(value)])
6
8
  end
7
9
  collapse_fields(return_fields)
8
10
  end
@@ -25,20 +27,20 @@ module ModsDisplay
25
27
  if element.attributes['type'].respond_to?(:value)
26
28
  return note_labels[element.attributes['type'].value] || "#{element.attributes['type'].value.capitalize}:"
27
29
  end
30
+
28
31
  I18n.t('mods_display.note')
29
32
  end
30
33
 
31
34
  def note_labels
32
35
  { 'statement of responsibility' => I18n.t('mods_display.statement_of_responsibility'),
33
36
  'date/sequential designation' => I18n.t('mods_display.date_sequential_designation'),
34
- 'publications' => I18n.t('mods_display.publications'),
35
- 'references' => I18n.t('mods_display.references'),
36
- 'bibliography' => I18n.t('mods_display.bibliography'),
37
- 'preferred citation' => I18n.t('mods_display.preferred_citation'),
38
- 'biographical/historical' => I18n.t('mods_display.biographical_historical'),
37
+ 'publications' => I18n.t('mods_display.publications'),
38
+ 'references' => I18n.t('mods_display.references'),
39
+ 'bibliography' => I18n.t('mods_display.bibliography'),
40
+ 'preferred citation' => I18n.t('mods_display.preferred_citation'),
41
+ 'biographical/historical' => I18n.t('mods_display.biographical_historical'),
39
42
  'creation/production credits' => I18n.t('mods_display.creation_production_credits'),
40
- 'citation/reference' => I18n.t('mods_display.citation_reference')
41
- }
43
+ 'citation/reference' => I18n.t('mods_display.citation_reference') }
42
44
  end
43
45
  end
44
46
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class RelatedItem < Field
3
5
  include ModsDisplay::RelatedItemConcerns
@@ -6,14 +8,12 @@ module ModsDisplay
6
8
  return_fields = @values.map do |value|
7
9
  next if related_item_is_a_collection?(value)
8
10
  next if render_nested_related_item?(value)
9
- case
10
- when related_item_is_a_location?(value)
11
- process_location value
12
- when related_item_is_a_reference?(value)
13
- process_reference value
14
- else
15
- process_related_item(value)
16
- end
11
+
12
+ text = related_item_value(value)
13
+
14
+ next if text.nil? || text.empty?
15
+
16
+ ModsDisplay::Values.new(label: related_item_label(value), values: [text])
17
17
  end.compact
18
18
  collapse_fields(return_fields)
19
19
  end
@@ -21,27 +21,32 @@ module ModsDisplay
21
21
  private
22
22
 
23
23
  def delimiter
24
- '<br />'
24
+ '<br />'.html_safe
25
25
  end
26
26
 
27
- def process_location(item)
28
- ModsDisplay::Values.new(label: related_item_label(item), values: [item.location.text.strip])
29
- end
27
+ def related_item_value(item)
28
+ if related_item_is_a_location?(item)
29
+ element_text(item.location)
30
+ elsif related_item_is_a_reference?(item)
31
+ reference_title(item)
32
+ elsif item.titleInfo.any?
33
+ title = element_text(item.titleInfo)
34
+ location = nil
35
+ location = element_text(item.location.url) if item.location.length.positive? &&
36
+ item.location.url.length.positive?
30
37
 
31
- def process_reference(item)
32
- ModsDisplay::Values.new(label: related_item_label(item), values: [reference_title(item)])
33
- end
38
+ return if title.empty?
34
39
 
35
- def process_related_item(item)
36
- return unless item.titleInfo.length > 0
37
- title = item.titleInfo.text.strip
38
- return_text = title
39
- location = nil
40
- location = item.location.url.text if item.location.length > 0 &&
41
- item.location.url.length > 0
42
- return_text = "<a href='#{location}'>#{title}</a>" if location && !title.empty?
40
+ if location
41
+ "<a href='#{location}'>#{title}</a>".html_safe
42
+ else
43
+ title
44
+ end
45
+ elsif item.note.any?
46
+ citation = item.note.find { |note| note['type'] == 'preferred citation' }
43
47
 
44
- ModsDisplay::Values.new(label: related_item_label(item), values: [return_text]) unless return_text.empty?
48
+ element_text(citation) if citation
49
+ end
45
50
  end
46
51
 
47
52
  def reference_title(item)
@@ -54,8 +59,8 @@ module ModsDisplay
54
59
  def related_item_is_a_location?(item)
55
60
  !related_item_is_a_collection?(item) &&
56
61
  !related_item_is_a_reference?(item) &&
57
- item.location.length > 0 &&
58
- item.titleInfo.length < 1
62
+ item.location.length.positive? &&
63
+ item.titleInfo.empty?
59
64
  end
60
65
 
61
66
  def related_item_is_a_reference?(item)
@@ -66,7 +71,7 @@ module ModsDisplay
66
71
 
67
72
  def related_item_label(item)
68
73
  if displayLabel(item)
69
- return displayLabel(item)
74
+ displayLabel(item)
70
75
  else
71
76
  case
72
77
  when related_item_is_a_location?(item)
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class ResourceType < Field
3
5
  def fields
4
6
  return_fields = @values.map do |value|
5
- ModsDisplay::Values.new(label: displayLabel(value) || label, values: [value.text.strip])
7
+ ModsDisplay::Values.new(label: displayLabel(value) || label, values: [element_text(value)])
6
8
  end
7
9
  collapse_fields(return_fields)
8
10
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class SubTitle < ModsDisplay::Title
3
5
  def initialize(values)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class Subject < Field
3
5
  def fields
@@ -7,23 +9,19 @@ module ModsDisplay
7
9
  label = displayLabel(value) || I18n.t('mods_display.subject')
8
10
  return_text = []
9
11
  selected_subjects(value).each do |child|
10
- if self.respond_to?(:"process_#{child.name}")
12
+ if respond_to?(:"process_#{child.name}")
11
13
  method_send = send(:"process_#{child.name}", child)
12
14
  return_text << method_send unless method_send.to_s.empty?
15
+ elsif element_text(child).include?('--')
16
+ return_text << element_text(child).split('--').map(&:strip)
13
17
  else
14
- if child.text.include?('--')
15
- return_text << child.text.split('--').map(&:strip)
16
- else
17
- return_text << child.text unless child.text.empty?
18
- end
18
+ return_text << element_text(child) unless element_text(child).empty?
19
19
  end
20
20
  end
21
21
  return_values << return_text.flatten unless return_text.empty?
22
- unless return_values.empty?
23
- return_fields << ModsDisplay::Values.new(label: label, values: return_values)
24
- end
22
+ return_fields << ModsDisplay::Values.new(label: label, values: return_values) unless return_values.empty?
25
23
  end
26
- collapse_subjects return_fields
24
+ collapse_fields return_fields
27
25
  end
28
26
 
29
27
  # Would really like to clean this up, but it works and is tested for now.
@@ -44,7 +42,7 @@ module ModsDisplay
44
42
  def process_name(element)
45
43
  name = ModsDisplay::Name.new([element]).fields.first
46
44
 
47
- name.values.first if name
45
+ name&.values&.first
48
46
  end
49
47
 
50
48
  private
@@ -56,54 +54,23 @@ module ModsDisplay
56
54
  def values_from_subjects(element)
57
55
  return_values = []
58
56
  selected_subjects(element).each do |child|
59
- if child.text.include?('--')
60
- return_values << child.text.split('--').map(&:strip)
61
- else
62
- return_values << child.text.strip
63
- end
57
+ return_values << if element_text(child).include?('--')
58
+ element_text(child).split('--').map(&:strip)
59
+ else
60
+ element_text(child)
61
+ end
64
62
  end
65
63
  return_values
66
64
  end
67
65
 
68
66
  def selected_subjects(element = @value)
69
- element.children.select do |child|
70
- !omit_elements.include?(child.name.to_sym)
67
+ element.children.reject do |child|
68
+ omit_elements.include?(child.name.to_sym)
71
69
  end
72
70
  end
73
71
 
74
72
  def omit_elements
75
- [:cartographics, :geographicCode, :text]
76
- end
77
-
78
- # Providing subject specific collapsing method so we can
79
- # collapse the labels w/o flattening all the subject fields.
80
- def collapse_subjects(display_fields)
81
- return_values = []
82
- current_label = nil
83
- prev_label = nil
84
- buffer = []
85
- display_fields.each_with_index do |field, index|
86
- current_label = field.label
87
- current_values = field.values
88
- if display_fields.length == 1
89
- return_values << ModsDisplay::Values.new(label: current_label, values: current_values)
90
- elsif index == (display_fields.length - 1)
91
- # need to deal w/ when we have a last element but we have separate labels in the buffer.
92
- if current_label != prev_label
93
- return_values << ModsDisplay::Values.new(label: prev_label, values: [buffer.flatten(1)])
94
- return_values << ModsDisplay::Values.new(label: current_label, values: current_values)
95
- else
96
- buffer.concat(current_values)
97
- return_values << ModsDisplay::Values.new(label: current_label, values: buffer.flatten(0))
98
- end
99
- elsif prev_label && (current_label != prev_label)
100
- return_values << ModsDisplay::Values.new(label: prev_label, values: buffer.flatten(0))
101
- buffer = []
102
- end
103
- buffer.concat(current_values)
104
- prev_label = current_label
105
- end
106
- return_values
73
+ %i[cartographics geographicCode text]
107
74
  end
108
75
  end
109
76
  end
@@ -1,14 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class Title < Field
3
5
  def fields
4
6
  return_values = []
5
- if @values
6
- @values.each do |value|
7
- return_values << ModsDisplay::Values.new(
8
- label: displayLabel(value) || title_label(value),
9
- values: [assemble_title(value)]
10
- )
11
- end
7
+ @values&.each do |value|
8
+ return_values << ModsDisplay::Values.new(
9
+ label: displayLabel(value) || title_label(value),
10
+ values: [assemble_title(value)]
11
+ )
12
12
  end
13
13
  collapse_fields(return_values)
14
14
  end
@@ -16,33 +16,32 @@ module ModsDisplay
16
16
  private
17
17
 
18
18
  def delimiter
19
- '<br />'
19
+ '<br />'.html_safe
20
20
  end
21
21
 
22
22
  def assemble_title(element)
23
- return displayForm(element) if displayForm(element)
24
-
25
23
  title = ''
26
24
  previous_element = nil
27
25
 
28
26
  element.children.select { |value| title_parts.include? value.name }.each do |value|
29
- str = value.text.strip
27
+ str = element_text(value)
30
28
  next if str.empty?
31
29
 
32
- delimiter = case
33
- when title.empty?, title.end_with?(' ')
34
- nil
35
- when title.end_with?('.', ',', ':', ';')
36
- ' '
37
- when value.name == 'subTitle'
38
- ' : '
39
- when value.name == 'partName' && previous_element.name == 'partNumber'
40
- ', '
41
- when value.name == 'partNumber', value.name == 'partName'
42
- '. '
43
- else
44
- ' '
45
- end
30
+ delimiter = if title.empty? || title.end_with?(' ')
31
+ nil
32
+ elsif previous_element&.name == 'nonSort' && title.end_with?('-', '\'')
33
+ nil
34
+ elsif title.end_with?('.', ',', ':', ';')
35
+ ' '
36
+ elsif value.name == 'subTitle'
37
+ ' : '
38
+ elsif value.name == 'partName' && previous_element.name == 'partNumber'
39
+ ', '
40
+ elsif value.name == 'partNumber' || value.name == 'partName'
41
+ '. '
42
+ else
43
+ ' '
44
+ end
46
45
 
47
46
  title += delimiter if delimiter
48
47
  title += str
@@ -50,7 +49,18 @@ module ModsDisplay
50
49
  previous_element = value
51
50
  end
52
51
 
53
- title
52
+ if element['type'] == 'uniform' && element['nameTitleGroup'].present?
53
+ [uniform_title_name_part(element), title].compact.join('. ')
54
+ else
55
+ title
56
+ end
57
+ end
58
+
59
+ def uniform_title_name_part(element)
60
+ names = element.xpath("//m:name[@nameTitleGroup=\"#{element['nameTitleGroup']}\"]", **Mods::Record::NS_HASH)
61
+ names = element.xpath("//name[@nameTitleGroup=\"#{element['nameTitleGroup']}\"]") if names.empty?
62
+
63
+ ModsDisplay::Name.new(names).fields.first&.values&.first&.to_s
54
64
  end
55
65
 
56
66
  def title_parts
@@ -62,14 +72,15 @@ module ModsDisplay
62
72
  title_labels.key?(element.attributes['type'].value)
63
73
  return title_labels[element.attributes['type'].value]
64
74
  end
75
+
65
76
  I18n.t('mods_display.title')
66
77
  end
67
78
 
68
79
  def title_labels
69
80
  { 'abbreviated' => I18n.t('mods_display.abbreviated_title'),
70
- 'translated' => I18n.t('mods_display.translated_title'),
81
+ 'translated' => I18n.t('mods_display.translated_title'),
71
82
  'alternative' => I18n.t('mods_display.alternative_title'),
72
- 'uniform' => I18n.t('mods_display.uniform_title') }
83
+ 'uniform' => I18n.t('mods_display.uniform_title') }
73
84
  end
74
85
  end
75
86
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class Values
3
5
  attr_accessor :label, :values
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  class HTML
3
5
  MODS_DISPLAY_FIELD_MAPPING = {
@@ -33,9 +35,8 @@ module ModsDisplay
33
35
  end
34
36
 
35
37
  def title
36
- unless mods_field(:title).fields.empty?
37
- return mods_field(:title).fields.first.values
38
- end
38
+ return mods_field(:title).fields.first.values unless mods_field(:title).fields.empty?
39
+
39
40
  ''
40
41
  end
41
42
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  module RelatedItemConcerns
3
5
  private
@@ -16,12 +18,12 @@ module ModsDisplay
16
18
 
17
19
  def related_item_is_a_constituent?(item)
18
20
  item.attributes['type'].respond_to?(:value) &&
19
- item.attributes['type'].value == 'constituent'
21
+ item.attributes['type'].value == 'constituent'
20
22
  end
21
23
 
22
24
  def related_item_is_host?(item)
23
25
  item.attributes['type'].respond_to?(:value) &&
24
- item.attributes['type'].value == 'host'
26
+ item.attributes['type'].value == 'host'
25
27
  end
26
28
  end
27
29
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
4
  module RelatorCodes
3
5
  def relator_codes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModsDisplay
2
- VERSION = '1.0.0.alpha4'
4
+ VERSION = '1.1.0'
3
5
  end
data/lib/mods_display.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mods_display/version'
2
4
  require 'mods_display/html'
3
5
  require 'mods_display/country_codes'
@@ -34,14 +36,14 @@ require 'stanford-mods'
34
36
 
35
37
  require 'i18n'
36
38
  require 'i18n/backend/fallbacks'
37
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
38
- I18n.load_path += Dir["#{File.expand_path('../..', __FILE__)}/config/locales/*.yml"]
39
+ I18n::Backend::Simple.include I18n::Backend::Fallbacks
40
+ I18n.load_path += Dir["#{File.expand_path('..', __dir__)}/config/locales/*.yml"]
39
41
  I18n.backend.load_translations
40
42
 
41
43
  begin
42
44
  require 'rails'
43
45
  rescue LoadError
44
- #do nothing
46
+ # do nothing
45
47
  end
46
48
 
47
49
  require 'mods_display/engine' if defined?(Rails)
data/mods_display.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.executables = gem.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
22
22
  gem.require_paths = ["lib"]
23
23
 
24
- gem.add_dependency 'stanford-mods', '~> 2.1'
24
+ gem.add_dependency 'stanford-mods', '>= 3.0.0.alpha1', '< 4'
25
25
  gem.add_dependency 'i18n'
26
26
  gem.add_dependency 'view_component'
27
27