• 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

39.02
/marc_to_solr/lib/language_service.rb
1
# frozen_string_literal: true
2

3
require 'languages'
1✔
4
require_relative './indigenous_languages'
1✔
5

6
class LanguageService
1✔
7
  include IndigenousLanguages
1✔
8
  def loc_to_iana(loc)
1✔
9
    if Languages[loc]&.alpha2.blank? || ['zxx', 'mul', 'sgn', 'und', '|||'].include?(loc)
×
10
      'en'
×
11
    else
12
      Languages[loc].alpha2.to_s
×
13
    end
14
  end
15

16
  def valid_language_code?(code)
1✔
17
    return false if code.blank?
×
18

19
    Languages[code].present? || iso_639_5_include?(code)
×
20
  end
21

22
  def code_to_name(code)
1✔
23
    Languages[code]&.name || iso_639_5_name(code)
×
24
  end
25

26
  def macrolanguage_codes(individual_language_code)
1✔
27
    individual = Languages[individual_language_code]
×
28
    if individual.respond_to? :macrolanguage
×
29
      [individual&.macrolanguage&.alpha3_bibliographic.to_s, individual&.macrolanguage&.iso639_3.to_s].uniq
×
30
    else
31
      []
×
32
    end
33
  end
34

35
  def specific_names(record)
1✔
36
    specific_codes(record).map { |code| code_to_name(code) }
×
37
                          .compact
38
  end
39

40
  def specific_codes(record)
1✔
41
    extractor = LanguageExtractor.new(record)
×
42
    codes = []
×
43
    codes << extractor.fixed_field_code if extractor.fixed_field_code
×
44

45
    if extractor.iso_041_fields.any?
×
46
      codes.concat(extractor.iso_041_codes)
×
47
    elsif extractor.all_041_fields.any?
×
48
      codes.concat(extractor.all_041_codes)
×
49
    end
50
    codes.uniq.reject { |general_code| includes_more_specific_version?(codes, general_code) }
×
51
  end
52

53
  def iso639_language_names(record)
1✔
54
    LanguageExtractor.new(record).iso_041_codes.map { |code| code_to_name(code) }
×
55
                     .compact
56
  end
57

58
  def includes_more_specific_version?(codes, code_to_check)
1✔
59
    codes.any? { |individual| macrolanguage_codes(individual).include? code_to_check }
×
60
  end
61

62
  private
1✔
63

64
    def iso639_5_collective_languages
1✔
65
      @iso639_5_collective_languages ||= CSV.read(File.join(File.dirname(__FILE__), 'iso639-5.tsv'), headers: true, col_sep: "\t")
×
66
    end
67

68
    def iso_639_5_include?(code)
1✔
69
      iso639_5_collective_languages['code'].include?(code)
×
70
    end
71

72
    def iso_639_5_name(code)
1✔
73
      return unless iso_639_5_include?(code)
×
74

75
      iso639_5_collective_languages.find { |row| row['code'] == code }['Label (English)']
×
76
    end
77
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