class I18n::Processes::Data::Router::ConservativeRouter

Keep the path, or infer from base locale

Attributes

adapter[R]
base_locale[R]
locales[R]

Public Class Methods

new(adapter, config) click to toggle source
Calls superclass method
# File lib/i18n/processes/data/router/conservative_router.rb, line 9
def initialize(adapter, config)
  @adapter     = adapter
  @base_locale = config[:base_locale]
  @locales     = config[:locales]
  super
end

Public Instance Methods

route(locale, forest, &block) click to toggle source
Calls superclass method
# File lib/i18n/processes/data/router/conservative_router.rb, line 16
def route(locale, forest, &block)
  return to_enum(:route, locale, forest) unless block
  out = Hash.new { |hash, key| hash[key] = Set.new }
  not_found = Set.new
  forest.keys do |key, _node|
    path = key_path(locale, key)
    $stderr.puts Rainbow("path in route: #{path}").green
    # infer from another locale
    unless path
      inferred_from = (locales - [locale]).detect { |loc| path = key_path(loc, key) }
      path = LocalePathname.replace_locale(path, inferred_from, locale) if inferred_from
    end
    key_with_locale = "#{locale}.#{key}"
    $stderr.puts Rainbow("key_with_locale in route: #{key_with_locale}").green
    if path
      out[path] << key_with_locale
    else
      not_found << key_with_locale
    end
  end


  if not_found.present?
    # fall back to pattern router
    not_found_tree = forest.select_keys(root: true) { |key, _| not_found.include?(key) }
    super(locale, not_found_tree) do |path, tree|
      out[path] += tree.key_names(root: true)
    end
  end

  out.each do |dest, keys|
    # $stderr.puts Rainbow("dest in route: #{dest}").green
    # $stderr.puts Rainbow("dest in route: #{dest}").green
    block.yield dest, forest.select_keys(root: true) { |key, _| keys.include?(key) }
  end
end

Protected Instance Methods

base_tree() click to toggle source
# File lib/i18n/processes/data/router/conservative_router.rb, line 55
def base_tree
  adapter[base_locale]
end
key_path(locale, key) click to toggle source
# File lib/i18n/processes/data/router/conservative_router.rb, line 59
def key_path(locale, key)
  adapter[locale]["#{locale}.#{key}"].try(:data).try(:[], :path)
end