Class: Dcc::Validate::Schematron::Rules::LanguageCodeDedup

Inherits:
Base show all
Defined in:
lib/dcc/validate/schematron/rules/language_code_dedup.rb

Overview

Errors on duplicate language codes in dcc:usedLangCodeISO639_1.

Instance Method Summary collapse

Methods inherited from Dcc::Validate::Schematron::Rule

#code, #severity

Instance Method Details

#check_on(dcc) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/dcc/validate/schematron/rules/language_code_dedup.rb', line 10

def check_on(dcc)
  return [] unless Dcc::TypeGuards.has_attribute?(dcc, :administrative_data)

  core = safe_attr(dcc.administrative_data, :core_data)
  return [] if core.nil?

  used = Dcc::TypeGuards.has_attribute?(core, :used_lang_code_iso_639_1) ? Array(core.used_lang_code_iso_639_1) : []
  used_strings = used.map(&:to_s)
  duplicates = used_strings.group_by(&:itself).select { |_k, v| v.size > 1 }.keys

  duplicates.map do |dup|
    issue(
      severity: :error,
      message: "dcc:usedLangCodeISO639_1 contains duplicate '#{dup}'",
    )
  end
end