• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / orangelight / 00dbc10b-d747-4ad7-b211-7b26d753abbb

14 Aug 2025 01:25PM UTC coverage: 0.483% (-94.9%) from 95.343%
00dbc10b-d747-4ad7-b211-7b26d753abbb

push

circleci

web-flow
Merge pull request #5181 from pulibrary/dependabot/bundler/activestorage-7.2.2.2

Bump activestorage from 7.2.2.1 to 7.2.2.2

47 of 9721 relevant lines covered (0.48%)

0.01 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/models/concerns/blacklight/document/json_ld.rb
1
# frozen_string_literal: true
2

3
module Blacklight::Document::JsonLd
×
4
  def self.extended(document)
×
5
    # Register our exportable formats
6
    Blacklight::Document::JsonLd.register_export_formats(document)
×
7
  end
×
8

9
  def self.register_export_formats(document)
×
10
    document.will_export_as(:jsonld, 'application/ld+json')
×
11
  end
×
12

13
  def export_as_jsonld
×
14
    data.to_json
×
15
  end
×
16

17
  def data
×
18
    metadata = {}
×
19
    metadata["@context"] = "#{default_host}/context.json"
×
20
    metadata["@id"] = Rails.application.routes.url_helpers.solr_document_url(id: self['id'], host: default_host)
×
21
    metadata["title"] = title
×
22
    metadata["language"] = title_language if title_language
×
23
    metadata_map.each do |solr_key, metadata_key|
×
24
      values = self[solr_key.to_s] || []
×
25
      values = values.first if values.size == 1
×
26
      metadata[metadata_key] = values unless values.empty?
×
27
    end
×
28
    metadata.merge!(contributors)
×
29
    metadata.merge! creator
×
30
    metadata['created'] = date(true) if date(true)
×
31
    metadata['date'] = date if date
×
32
    metadata['abstract'] = abstract if abstract
×
33
    metadata['identifier'] = identifier if identifier
×
34
    metadata['local_identifier'] = local_identifier if local_identifier
×
35
    metadata['location'] = location if location
×
36
    metadata['electronic_locations'] = electronic_links if electronic_links.present?
×
37

38
    metadata
×
39
  end
×
40

41
  # rubocop:disable Metrics/MethodLength
42
  def metadata_map
×
43
    {
×
44
      author_display: 'creator',
×
45
      call_number_display: 'call_number',
×
46
      description_display: 'extent',
×
47
      edition_display: 'edition',
×
48
      format: 'format',
×
49
      lcgft_s: 'type',
×
50
      notes_display: 'description',
×
51
      pub_created_display: 'publisher',
×
52
      subject_facet: 'subject',
×
53
      coverage_display: 'coverage',
×
54
      title_sort: 'title_sort',
×
55
      alt_title_246_display: 'alternative',
×
56
      scale_display: 'cartographic_scale',
×
57
      projection_display: 'cartographic_projection',
×
58
      geocode_display: 'spatial',
×
59
      contents_display: 'contents',
×
60
      geo_related_record_display: 'relation',
×
61
      uniform_title_s: 'uniform_title',
×
62
      language_display: 'text_language',
×
63
      binding_note_display: 'binding_note',
×
64
      provenance_display: 'provenance',
×
65
      source_acquisition_display: 'source_acquisition',
×
66
      references_display: 'references',
×
67
      indexed_in_display: 'indexed_by'
×
68
    }
×
69
  end
×
70
  # rubocop:enable Metrics/MethodLength
71

72
  def title
×
73
    return [vernacular_title, roman_title] if vernacular_title
×
74
    [roman_title]
×
75
  end
×
76

77
  def vernacular_title
×
78
    vtitle = self['title_vern_display']
×
79
    return unless vtitle
×
80

81
    title_hash(vtitle, title_language)
×
82
  end
×
83

84
  def roman_title
×
85
    lang = title_language
×
86
    lang = "#{lang}-Latn" if lang && vernacular_title.present?
×
87

88
    title_hash(self['title_display'], lang)
×
89
  end
×
90

91
  def title_hash(title, language)
×
92
    title_hash = { '@value' => title }
×
93
    title_hash['@language'] = language if language.present?
×
94
    title_hash
×
95
  end
×
96

97
  def title_language
×
98
    self['language_iana_s']&.first.presence
×
99
  end
×
100

101
  def contributors
×
102
    related_name_display = self['related_name_json_1display']
×
103
    return {} unless related_name_display
×
104

105
    contributors = {}
×
106
    JSON.parse(related_name_display).each do |role, names|
×
107
      contributors[check_role(role)] = names
×
108
    end
×
109
    contributors
×
110
  end
×
111

112
  def creator
×
113
    role = check_role((self['marc_relator_display'] || []).first)
×
114
    return { role => self['author_display'].first } unless role == 'contributor'
×
115
    {}
×
116
  end
×
117

118
  def check_role(label)
×
119
    role = (label || '').parameterize(separator: '_').singularize
×
120
    RELATORS.include?(role) ? role : 'contributor'
×
121
  end
×
122

123
  def date(expanded = false)
×
124
    return self['compiled_created_display'].first if expanded == false && self['compiled_created_display']
×
125
    return unless self['pub_date_start_sort']
×
126
    date = self['pub_date_start_sort'].to_s
×
127
    date += "-01-01T00:00:00Z" if expanded
×
128
    # rubocop:disable Lint/UselessOr
129
    end_date = self['pub_date_end_sort'].to_s || ''
×
130
    # rubocop:enable Lint/UselessOr
131
    unless end_date.empty?
×
132
      date += expanded ? "/" + end_date + "-12-31T23:59:59Z" : "-" + end_date
×
133
    end
×
134

135
    date
×
136
  end
×
137

138
  def abstract
×
139
    (self['summary_note_display'] || []).first
×
140
  end
×
141

142
  # Numbers from the Digital Cicognara Library (DCL)
143
  def local_identifier
×
144
    return unless self['standard_no_1display']
×
145

146
    json = JSON.parse(self['standard_no_1display'])
×
147
    json['Dclib']
×
148
  end
×
149

150
  # Arks from the electronic_access_1display
151
  def identifier
×
152
    return unless electronic_locations
×
153

154
    electronic_locations.each do |key, val|
×
155
      foo = val.select do |x|
×
156
        x.to_s.include?('ark')
×
157
      end
×
158

159
      next if foo.blank?
×
160

161
      return key if foo.class == Array
×
162
      return foo.keys.first
×
163
    end
×
164
  end
×
165

166
  def electronic_locations
×
167
    return unless self['electronic_access_1display']
×
168

169
    JSON.parse(self['electronic_access_1display'])
×
170
  end
×
171

172
  def location
×
173
    return unless self['location'] && self['call_number_display']
×
174

175
    values = []
×
176
    self['location'].each do |location_code|
×
177
      self['call_number_display'].each do |call_number|
×
178
        values << "#{location_code} #{call_number}"
×
179
      end
×
180
    end
×
181
    values
×
182
  end
×
183

184
  def electronic_links
×
185
    @electronic_links ||= begin
×
186
      return unless electronic_locations
×
187

188
      electronic_locations.map do |uri, label|
×
189
        {
×
190
          "@id" => uri,
×
191
          "label" => label
×
192
        }
×
193
      end
×
194
    end
×
195
  end
×
196

197
  def default_host
×
198
    @default_host ||= "#{ENV['APPLICATION_HOST_PROTOCOL'] || 'http'}://#{ENV['APPLICATION_HOST'] || 'localhost:3000'}" || 'http://localhost'
×
199
  end
×
200
end
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc