class TelephoneNumber::Country
Constants
- MOBILE_TOKEN_COUNTRIES
Attributes
country_code[R]
country_id[R]
formats[R]
general_validation[R]
international_prefix[R]
main_country_for_code[R]
mobile_token[R]
national_prefix[R]
national_prefix_for_parsing[R]
national_prefix_transform_rule[R]
validations[R]
Public Class Methods
all_countries()
click to toggle source
# File lib/telephone_number/country.rb, line 75 def self.all_countries @all_countries ||= phone_data.values.map {|data| new(data)} end
deep_merge(base_hash, other_hash)
click to toggle source
# File lib/telephone_number/country.rb, line 64 def self.deep_merge(base_hash, other_hash) other_hash.each do |key, value| base_hash[key] = if base_hash[key].is_a?(Hash) && value.is_a?(Hash) deep_merge(base_hash[key], value) else value end end base_hash end
find(country_id)
click to toggle source
# File lib/telephone_number/country.rb, line 49 def self.find(country_id) data = phone_data[country_id.to_s.upcase.to_sym] new(data) if data end
load_data()
click to toggle source
# File lib/telephone_number/country.rb, line 54 def self.load_data data_path = "#{File.dirname(__FILE__)}/../../data/telephone_number_data_file.dat" main_data = Marshal.load(File.binread(data_path)) if TelephoneNumber.override_file override_data = Marshal.load(File.binread(TelephoneNumber.override_file)) main_data = deep_merge(main_data, override_data) end main_data end
new(data_hash)
click to toggle source
# File lib/telephone_number/country.rb, line 9 def initialize(data_hash) validations = data_hash.fetch(:validations, {}).dup @country_code = data_hash[:country_code] @country_id = data_hash[:id] @general_validation = NumberValidation.new(:general_desc, validations[:general_desc]) if validations[:general_desc] @international_prefix = Regexp.new(data_hash[:international_prefix]) if data_hash[:international_prefix] @main_country_for_code = data_hash[:main_country_for_code] == 'true' @mobile_token = MOBILE_TOKEN_COUNTRIES[@country_id.to_sym] @national_prefix = data_hash[:national_prefix] @national_prefix_for_parsing = Regexp.new(data_hash[:national_prefix_for_parsing]) if data_hash[:national_prefix_for_parsing] @national_prefix_transform_rule = data_hash[:national_prefix_transform_rule] @validations = validations.delete_if { |name, _| name == :general_desc || name == :area_code_optional } .map { |name, data| NumberValidation.new(name, data) } @formats = data_hash.fetch(:formats, []).map { |format| NumberFormat.new(format, data_hash[:national_prefix_formatting_rule]) } end
phone_data()
click to toggle source
# File lib/telephone_number/country.rb, line 45 def self.phone_data @phone_data ||= load_data end
Public Instance Methods
detect_format(number)
click to toggle source
# File lib/telephone_number/country.rb, line 25 def detect_format(number) native_format = formats.detect do |format| Regexp.new("^(#{format.leading_digits})").match?(number) && Regexp.new("^(#{format.pattern})$").match?(number) end return native_format if native_format || main_country_for_code parent_country.detect_format(number) if parent_country end
full_general_pattern()
click to toggle source
# File lib/telephone_number/country.rb, line 41 def full_general_pattern %r{^(#{country_code})?(#{national_prefix})?(?<national_num>#{general_validation.pattern})$} end
parent_country()
click to toggle source
# File lib/telephone_number/country.rb, line 34 def parent_country return if main_country_for_code Country.all_countries.detect do |country| country.country_code == self.country_code && country.main_country_for_code end end