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

pulibrary / bibdata / b3c4a532-5da0-46f8-9c20-20018605a028

21 Mar 2025 08:11PM UTC coverage: 42.257% (-49.9%) from 92.185%
b3c4a532-5da0-46f8-9c20-20018605a028

push

circleci

sandbergja
Move various gems from the default Gemfile group to a more appropriate group

1599 of 3784 relevant lines covered (42.26%)

2.56 hits per line

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

13.89
/app/services/electronic_locations_factory.rb
1
# Factory for constructing ElectronicLocation Objects
2
class ElectronicLocationsFactory
1✔
3
  # Construct IIIFManifestURI Objects from Solr Document values
4
  # @param values [Hash] Solr Document values for links Hash by URL
5
  # @return [Array<IIIFManifestURI>]
6
  def self.parse_iiif_manifest_paths(values)
1✔
7
    values.map do |ark_url_key, iiif_manifest_path|
×
8
      ElectronicLocations::IIIFManifestURI.new(ark: ark_url_key, value: iiif_manifest_path)
×
9
    end
10
  end
11

12
  # Construct Holding Objects from Solr Document values
13
  # @param values [Hash] Solr Document values for links Hash by URL
14
  # @return [Array<Holding>]
15
  def self.parse_holdings(values)
1✔
16
    values.map do |holding_id, url_values|
×
17
      url_key = url_values.keys.first
×
18
      ElectronicLocations::Holding.new(id: holding_id, value: url_key)
×
19
    end
20
  end
21

22
  # Generate a Hash indexing the MARC subfield values for an electronic location field
23
  # @param holding_values [Hash] Solr Document values for URL's Hashed by holding ID
24
  # @param values [Hash] Solr Document values for links Hash by URL
25
  # @return [Hash]
26
  def self.parse_subfields(holding_values, values)
1✔
27
    subfields = []
×
28
    holding_values.each do |_holding_id, url_values|
×
29
      url_values.each do |url_key, url_labels|
×
30
        subfield = {}
×
31

32
        url_key = url_values.keys.first
×
33
        subfield[ElectronicLocations::SubfieldCodes::URI] = url_key
×
34
        subfield[ElectronicLocations::SubfieldCodes::LINK_TEXT] = url_labels.first
×
35
        subfield[ElectronicLocations::SubfieldCodes::PUBLIC_NOTE] = url_labels.last if url_labels.length > 1
×
36
        subfields << subfield
×
37
      end
38
    end
39

40
    values.each do |url_key, url_labels|
×
41
      subfield = {}
×
42
      subfield[ElectronicLocations::SubfieldCodes::URI] = url_key
×
43
      subfield[ElectronicLocations::SubfieldCodes::LINK_TEXT] = url_labels.first
×
44
      subfield[ElectronicLocations::SubfieldCodes::PUBLIC_NOTE] = url_labels.last if url_labels.length > 1
×
45
      subfields << subfield
×
46
    end
47

48
    subfields
×
49
  end
50

51
  # Factory method for constructing ElectronicLocation Objects
52
  # @param solr_doc [Hash] Solr Document values
53
  # @return [Array<ElectronicLocation>]
54
  def self.build(solr_doc)
1✔
55
    solr_values = solr_doc.fetch('electronic_access_1display', [])
×
56
    solr_values.map do |values|
×
57
      solr_value = values || '{}'
×
58
      electronic_access_1display = JSON.parse(solr_value)
×
59

60
      iiif_manifest_path_values = electronic_access_1display.delete('iiif_manifest_paths') || {}
×
61
      iiif_manifest_uris = parse_iiif_manifest_paths(iiif_manifest_path_values)
×
62

63
      holding_values = electronic_access_1display.delete('holding_record_856s') || {}
×
64
      holdings = parse_holdings(holding_values)
×
65

66
      subfields = parse_subfields(holding_values, electronic_access_1display)
×
67

68
      ElectronicLocation.new(access_method: ElectronicLocations::Indicators::HTTP,
×
69
                             relationship: ElectronicLocations::Relationships::VERSION,
70
                             subfields:,
71
                             holdings:, iiif_manifest_uris:)
72
    end
73
  end
74
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