class Phonejack::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_formatting_rule[R]
national_prefix_transform_rule[R]
validations[R]

Public Class Methods

all_countries() click to toggle source
# File lib/phonejack/country.rb, line 63
def self.all_countries
  @all_countries ||= phone_data.values.map {|data| new(data)}
end
find(country_id) click to toggle source
# File lib/phonejack/country.rb, line 50
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/phonejack/country.rb, line 55
def self.load_data
  data_file = "#{File.dirname(__FILE__)}/../../data/telephone_number_data_file.dat"
  main_data = Marshal.load(File.binread(data_file))
  override_data = {}
  override_data = Marshal.load(File.binread(Phonejack.override_file)) if Phonejack.override_file
  return main_data.deep_deep_merge!(override_data)
end
new(data_hash) click to toggle source
# File lib/phonejack/country.rb, line 9
def initialize(data_hash)
  @country_code = data_hash[:country_code]
  @country_id = data_hash[:id]
  @formats = data_hash.fetch(:formats, []).map { |format| NumberFormat.new(format) }
  @general_validation = NumberValidation.new(:general_desc, data_hash[:validations][:general_desc]) if data_hash.fetch(: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_formatting_rule = data_hash[:national_prefix_formatting_rule]
  @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 = data_hash.fetch(:validations, {})
                          .except(:general_desc, :area_code_optional)
                          .map { |name, data| NumberValidation.new(name, data) }
end
phone_data() click to toggle source
# File lib/phonejack/country.rb, line 46
def self.phone_data
  @phone_data ||= load_data
end

Public Instance Methods

detect_format(number) click to toggle source
# File lib/phonejack/country.rb, line 26
def detect_format(number)
  native_format = formats.detect do |format|
    number =~ Regexp.new("^(#{format.leading_digits})") && number =~ Regexp.new("^(#{format.pattern})$")
  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/phonejack/country.rb, line 42
def full_general_pattern
  %r{^(#{country_code})?(#{national_prefix})?(?<national_num>#{general_validation.pattern})$}
end
parent_country() click to toggle source
# File lib/phonejack/country.rb, line 35
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