Module: ProductTaxonomy::Localized

Included in:
Attribute, Category, Disclosure, ReturnReason, Value
Defined in:
lib/product_taxonomy/models/mixins/localized.rb

Instance Method Summary collapse

Instance Method Details

#localizationsObject



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/product_taxonomy/models/mixins/localized.rb', line 5

def localizations
  return @localizations if @localizations

  localization_path = File.expand_path(
    "localizations/#{localizations_humanized_model_name}/*.yml",
    ProductTaxonomy.data_path,
  )
  @localizations = Dir.glob(localization_path).each_with_object({}) do |file, localizations|
    locale = File.basename(file, ".yml")
    localizations[locale] = YAML.safe_load_file(file).dig(locale, localizations_humanized_model_name)
  end
end

#validate_localizations!(locales = nil) ⇒ Object

Validate that all localizations are present for the given locales. If no locales are provided, all locales will be validated.

Parameters:

  • locales (Array<String>, nil) (defaults to: nil)

    The locales to validate. If nil, all locales will be validated.



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/product_taxonomy/models/mixins/localized.rb', line 22

def validate_localizations!(locales = nil)
  model_keys = all.map { |model| model.send(@localizations_keyed_by).to_s }
  locales_to_validate = locales || localizations.keys
  locales_to_validate.each do |locale|
    missing_localization_keys = model_keys.reject { |key| localizations.dig(locale, key, "name") }
    next if missing_localization_keys.empty?

    raise ArgumentError, "Missing or incomplete localizations for the following keys in " \
      "localizations/#{localizations_humanized_model_name}/#{locale}.yml: #{missing_localization_keys.join(", ")}"
  end
end