class FastGettext::TranslationRepository::Merge

Responsibility:

- merge data from multiple repositories into one hash structure
- can be used instead of searching for translations in multiple domains
- requires reload when current locale is changed

Public Class Methods

new(name, options = {}) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 11
def initialize(name, options = {})
  clear
  super(name, options)
  options.fetch(:chain, []).each do |repo|
    add_repo(repo)
  end
end

Public Instance Methods

[](key) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 57
def [](key)
  @data[key]
end
add_repo(repo) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 49
def add_repo(repo)
  raise "Unsupported repository" unless repo_supported?(repo)

  @repositories << repo
  load_repo(repo)
  true
end
available_locales() click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 19
def available_locales
  @repositories.flat_map(&:available_locales).uniq
end
clear() click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 61
def clear
  @repositories = []
  @data = {}
end
plural(*keys) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 32
def plural(*keys)
  @repositories.each do |r|
    result = r.plural(*keys)
    return result unless result.compact.empty?
  end
  []
end
pluralisation_rule() click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 23
def pluralisation_rule
  @repositories.each do |r|
    if result = r.pluralisation_rule
      return result
    end
  end
  nil
end
reload() click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 40
def reload
  @data = {}
  @repositories.each do |r|
    r.reload
    load_repo(r)
  end
  super
end

Protected Instance Methods

load_repo(repo) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 72
def load_repo(repo)
  @data = repo.all_translations.merge(@data)
end
repo_supported?(repo) click to toggle source
# File lib/fast_gettext/translation_repository/merge.rb, line 68
def repo_supported?(repo)
  repo.respond_to?(:all_translations)
end