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