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

pulibrary / orangelight / 25bfe78f-c539-4492-9179-151d22460b61

30 Aug 2024 08:17PM UTC coverage: 45.357% (-50.4%) from 95.758%
25bfe78f-c539-4492-9179-151d22460b61

push

circleci

web-flow
Merge pull request #4168 from pulibrary/left_anchor_iii

Left anchor search

23 of 23 new or added lines in 1 file covered. (100.0%)

3090 existing lines in 140 files now uncovered.

2779 of 6127 relevant lines covered (45.36%)

7.28 hits per line

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

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

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

13
    def oclc_normalize(oclc, _opts = { prefix: false })
2✔
UNCOV
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)
2✔
20
      # If something went wrong and we got a nil, just return it
UNCOV
21
      return str unless str
×
22

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

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

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

34
      # trim any leading or trailing whitespace
UNCOV
35
      str.strip!
×
36

UNCOV
37
      str
×
38
    end
39

40
    private
2✔
41

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

46
        # normalize number to 7-digits, ignore oversize q
UNCOV
47
        norm.gsub(/(\d{1,7})(Q|Q OVERSIZE)?$/) do
×
UNCOV
48
          format('%07d', Regexp.last_match[1].to_i)
×
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