lib/world-flags.rb in world-flags-0.3.0 vs lib/world-flags.rb in world-flags-0.3.1
- old
+ new
@@ -6,11 +6,11 @@
require "world_flags/languages"
require "world_flags/countries"
module WorldFlags
class << self
- attr_accessor :auto_select
+ attr_accessor :auto_select, :raise_error, :default_code
# TODO: Why both active and valid locales? Does this even make sense!?
attr_writer :active_locales
def active_locales
@@ -26,10 +26,14 @@
def valid_locales= *list
raise ArgumentError, "Must be a list of locales, was #{list}" if list.empty?
@valid_locales ||= list.flatten
end
+ def raise_error?
+ @raise_error
+ end
+
def auto_select?
auto_select
end
def auto_select!
@@ -43,67 +47,108 @@
label ||= WorldFlags.language(default_locale, code)
end
# Locale translation helper macros
- def flag_code code
+ def flag_code code = :en
locale_flag_map[code.to_sym] || code
end
- def locale code
+ def locale code = :en
flag_locale_map[code.to_sym] || code
end
attr_writer :locale_flag_map
# translate locales to flag code: ISO_3166-1_alpha-2
def locale_flag_map
@locale_map ||= {
:en => :us,
:da => :dk,
+ :sv => :se,
:'en_UK' => :gb,
:'en_US' => :us
}
end
def flag_locale_map
locale_flag_map.hash_revert
end
+ def default_code_used
+ WorldFlags.default_code || :en
+ end
+
# Language helper macros
def language locale = :en, code = :en
- locale ||= :en
- languages[locale][code]
+ locale ||= default_code_used
+ locale_languages_map = languages[locale] || languages[default_code_used]
+
+ raise "No language-locale map defined for locale: #{locale} in #{languages}" if locale_languages_map.blank?
+
+ # raise("No language map defined for language code: #{code} in #{locale_languages_map[code]}")
+ locale_languages_map[code] ? locale_languages_map[code] : locale_languages_map[default_code_used]
+ rescue Exception => e
+ raise e if WorldFlags.raise_error?
+ "Undefined"
end
def languages= languages
raise ArgumentError, "Must be a hash, was: #{languages}" unless languages.kind_of?(Hash)
@languages = languages
end
def languages
@languages ||= begin
- active_locales.inject({}) do |res, locale|
- res[locale] = Languages.send(locale) if Languages.respond_to?(locale)
+ active_locales.inject({}) do |res, loc|
+ res[locale] = find_language_map(loc)
res
end
end
end
+ def find_language_map loc
+ # return Countries.send(loc) if Countries.respond_to?(loc)
+ [loc, flag_code(loc), locale(loc)].each do |code|
+ return Languages.send(locale) if Languages.respond_to?(locale)
+ end
+ end
+
# Country helper macros
def country locale = :en, code = :en
- locale ||= :en
- countries[locale][code]
+ locale ||= default_code_used
+
+ locale_countries_map = countries[locale] || countries[default_code_used]
+
+ raise "No country-locale map defined for locale: #{locale} in #{countries}" if locale_countries_map.blank?
+
+ # raise("No country map defined for country code: #{code} in #{locale_countries_map[code]}")
+ locale_countries_map[code] ? locale_countries_map[code] : locale_countries_map[default_code_used]
+ rescue Exception => e
+ raise e if WorldFlags.raise_error?
+ "Undefined"
end
def countries= countries
raise ArgumentError, "Must be a hash, was: #{countries}" unless countries.kind_of?(Hash)
@countries = countries
end
def countries
- @countries ||= {:en => Countries.en}
+ @countries ||= begin
+ active_locales.inject({}) do |res, loc|
+ res[loc] = find_country_map(loc)
+ res
+ end
+ end
end
+
+ def find_country_map loc
+ # return Countries.send(loc) if Countries.respond_to?(loc)
+ [loc, flag_code(loc), locale(loc)].each do |code|
+ return Countries.send(code) if Countries.respond_to?(code)
+ end
+ end
end
end