class Codebreaker::Localization

Attributes

lang[RW]

Public Class Methods

new(app_type, external_path = false, lang = :en) click to toggle source
# File lib/codebreaker/localization.rb, line 7
def initialize(app_type, external_path = false, lang = :en)
  @lang = lang
  apply_external_path(external_path)
  select_application(app_type)
  candidates_to_load
  merge_localizations
end

Public Instance Methods

all() click to toggle source
# File lib/codebreaker/localization.rb, line 20
def all
  localizations.keys
end
localization() click to toggle source
# File lib/codebreaker/localization.rb, line 15
def localization
  return localizations[:en] unless localizations[lang]
  localizations[lang]
end

Private Instance Methods

apply_external_path(external_path) click to toggle source
# File lib/codebreaker/localization.rb, line 26
def apply_external_path(external_path)
  if external_path && Dir.glob("#{external_path}/*/*.yml").empty?
    raise ArgumentError, 'Invalid external path.'
  end
  @external_path = external_path || false
end
authorized_apps() click to toggle source
# File lib/codebreaker/localization.rb, line 38
def authorized_apps
  Dir.entries(localizations_dir).reject { |dir_name| dir_name.include?('.') }.map(&:to_sym)
end
candidates_to_load() click to toggle source
# File lib/codebreaker/localization.rb, line 47
def candidates_to_load
  @ymls_paths = Dir.glob("#{localizations_dir}/#{@app_dir}/*.yml")
end
localizations() click to toggle source
# File lib/codebreaker/localization.rb, line 51
def localizations
  @localizations ||= {}
end
localizations_dir() click to toggle source
# File lib/codebreaker/localization.rb, line 33
def localizations_dir
  return @external_path if @external_path
  File.expand_path('./locale/.', File.dirname(__FILE__))
end
merge_localizations() click to toggle source
# File lib/codebreaker/localization.rb, line 55
def merge_localizations
  localizations
  loaded_ymls = candidates_to_load.map { |file| YAML.load(File.open(file, 'r')) }
  loaded_ymls.each { |loaded_yml| @localizations.update(loaded_yml) }
end
select_application(app_type) click to toggle source
# File lib/codebreaker/localization.rb, line 42
def select_application(app_type)
  raise 'Unknown application type.' unless authorized_apps.include?(app_type)
  @app_dir = app_type.to_s
end