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

pulibrary / orangelight / e98ae4b5-e123-4c92-ac1a-3395947ae8fe

20 May 2026 10:23PM UTC coverage: 82.236% (-13.3%) from 95.582%
e98ae4b5-e123-4c92-ac1a-3395947ae8fe

push

circleci

web-flow
Add cooldown to dependabot (#5915)

This matches the other DACS projects

5472 of 6654 relevant lines covered (82.24%)

1134.65 hits per line

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

95.24
/lib/orangelight/string_functions.rb
1
# frozen_string_literal: true
2

3
module StringFunctions
1✔
4
  class << self
1✔
5
    def cn_normalize(str)
1✔
6
      if /^[a-zA-Z]{2,3} \d+([qQ]?)$/.match? str # the normalizer thinks "CD 104" is valid LC
992,231✔
7
        accession_number(str)&.strip
7,488✔
8
      else
9
        Lcsort.normalize(str.gsub(/x([A-Z])/, '\1'))&.strip || accession_number(str)&.strip
984,743✔
10
      end
11
    end
12

13
    def oclc_normalize(oclc, _opts = { prefix: false })
1✔
14
      oclc.gsub(/\D/, '').to_i.to_s
×
15
    end
16

17
    # Needed for name-title browse
18
    # https://github.com/traject/traject/blob/v2.3.1/lib/traject/macros/marc21.rb#L227
19
    def trim_punctuation(str)
1✔
20
      # If something went wrong and we got a nil, just return it
21
      return str unless str
375✔
22

23
      # trailing: comma, slash, semicolon, colon (possibly preceded and followed by whitespace)
24
      str = str.sub(%r{ *[ ,/;:] *\Z}, '')
375✔
25

26
      # trailing period if it is preceded by at least three letters
27
      # (possibly preceded and followed by whitespace)
28
      str = str.sub(/( *\w\w\w)\. *\Z/, '\1')
375✔
29

30
      # single square bracket characters if they are the start and/or end
31
      #   chars and there are no internal square brackets.
32
      str = str.sub(/\A\[?([^\[\]]+)\]?\Z/, '\1')
375✔
33

34
      # trim any leading or trailing whitespace
35
      str.strip!
375✔
36

37
      str
375✔
38
    end
39

40
    private
1✔
41

42
      def accession_number(str)
1✔
43
        norm = str.upcase
221,989✔
44
        norm = norm.gsub(/(CD|DVD|LP|LS)-/, '\1') # should file together regardless of dash
221,989✔
45

46
        # normalize number to 7-digits, ignore oversize q
47
        norm.gsub(/(\d{1,7})(Q$|Q OVERSIZE$)?/) do
221,989✔
48
          format('%07d', Regexp.last_match[1].to_i)
483,777✔
49
        end
50
      end
51
  end
52
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

© 2026 Coveralls, Inc