Class: ModsDisplay::Subject

Inherits:
Field
  • Object
show all
Defined in:
lib/mods_display/fields/subject.rb

Instance Method Summary collapse

Methods inherited from Field

#initialize, #label

Constructor Details

This class inherits a constructor from ModsDisplay::Field

Instance Method Details

#fieldsObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/mods_display/fields/subject.rb', line 3

def fields
  return_fields = []
  @values.each do |value|
    return_values = []
    label = displayLabel(value) || I18n.t('mods_display.subject')
    return_text = []
    selected_subjects(value).each do |child|
      if self.respond_to?(:"process_#{child.name}")
        method_send = send(:"process_#{child.name}", child)
        return_text << method_send unless method_send.to_s.empty?
      else
        if child.text.include?('--')
          return_text << child.text.split('--').map(&:strip)
        else
          return_text << child.text unless child.text.empty?
        end
      end
    end
    return_values << return_text.flatten unless return_text.empty?
    unless return_values.empty?
      return_fields << ModsDisplay::Values.new(label: label, values: return_values)
    end
  end
  collapse_subjects return_fields
end

#process_hierarchicalGeographic(element) ⇒ Object



70
71
72
# File 'lib/mods_display/fields/subject.rb', line 70

def process_hierarchicalGeographic(element)
  values_from_subjects(element)
end

#process_name(element) ⇒ Object



74
75
76
77
78
# File 'lib/mods_display/fields/subject.rb', line 74

def process_name(element)
  name = ModsDisplay::Name.new([element], @config, @klass).fields.first

  name.values.first if name
end

#to_htmlObject

Would really like to clean this up, but it works and is tested for now.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/mods_display/fields/subject.rb', line 30

def to_html
  return nil if fields.empty? || @config.ignore?
  output = ''
  fields.each do |field|
    output << "<dt#{label_class} #{sanitized_field_title(field.label)}>#{field.label}</dt>"
    output << "<dd#{value_class}>"
    subs = []
    field.values.each do |subjects|
      buffer = []
      sub_parts = []
      subjects.each do |val|
        if val.is_a?(ModsDisplay::Name::Person)
          buffer << val.name
        else
          buffer << val
        end
        if @config.link && @config.hierarchical_link
          if val.is_a?(ModsDisplay::Name::Person)
            sub_parts << link_to_value(val.name, buffer.join(' '))
          else
            sub_parts << link_to_value(val, buffer.join(' '))
          end
        elsif @config.link
          if val.is_a?(ModsDisplay::Name::Person)
            sub_parts << link_to_value(val.name)
          else
            sub_parts << link_to_value(val.to_s)
          end
        else
          sub_parts << val.to_s
        end
      end
      subs << sub_parts.join(@config.delimiter)
    end
    output << subs.join('<br/>')
    output << '</dd>'
  end
  output
end