module Phonelib::Core

main module that includes all basic data and methods

Constants

AREA_CODE_MOBILE_COUNTRIES

@private Area code countries for mobile type

AREA_CODE_MOBILE_TOKENS

@private Area code mobile phone token

AREA_CODE_OPTIONAL

@private area code optional type

AREA_CODE_TYPES

@private Area code possible types

CARRIER_SELECTION_CODES

@private carrier selection codes

CARRIER_SERVICES

@private carrier services type

CARRIER_SPECIFIC

@private carrier specific type

COUNTRY_CODE

@private Country code key

DEFAULT_NUMBER_FORMAT

@private Default number formatting data hash

DIRECTORY_SERVICES

@private directory services

DOUBLE_COUNTRY_PREFIX_FLAG

@private Double country prefix flag key

EMERGENCY

@private emergency numbers

EXPANDED_EMERGENCY

@private expendad emergency type

EXT_CARRIERS

@private Extended data carriers array key

EXT_CARRIER_KEY

@private Extended data key for carrier in prefixes hash

EXT_COUNTRY_NAMES

@private Extended data country names array key

EXT_GEO_NAMES

@private Extended data geo names array key

EXT_GEO_NAME_KEY

@private Extended data key for geoname in prefixes hash

EXT_PREFIXES

@private Extended data prefixes hash key

EXT_TIMEZONES

@private Extended data timezones array key

EXT_TIMEZONE_KEY

@private Extended data key for timezone in prefixes hash

FILE_EXT_DATA

@private Extended data file

FILE_MAIN_DATA

@private Main data file

FIXED_LINE

@private Fixed line pattern key

FIXED_OR_MOBILE

@private In case MOBILE and FIXED patterns are the same,

this type is returned
FORMATS

@private Formats key

GENERAL

Validation patterns keys constants @private General pattern for country key

INTERNATIONAL_PREFIX

@private International prefix key

LEADING_DIGITS

@private Leading digits key

MAIN_COUNTRY_FOR_CODE

@private Main country for code key

MOBILE

@private Mobile phone number pattern key

NATIONAL_PREFIX

@private National prefix key

NATIONAL_PREFIX_FOR_PARSING

@private National prefix for parsing key

NATIONAL_PREFIX_RULE

@private National prefix rule key

NATIONAL_PREFIX_TRANSFORM_RULE

@private National prefix transform rule key

NO_INTERNATIONAL_DIALING

@private no international dialling type

PAGER

@private Pager phone number pattern key

PATTERN

@private Pattern key

PERSONAL_NUMBER

@private A personal number is associated with a particular person, and may be routed to either a MOBILE or FIXED_LINE number.

PLUS_SIGN

@private Plus sign

POSSIBLE_PATTERN

@private Possible regex pattern key

PREMIUM_RATE

@private Freephone line pattern key

SHARED_COST

@private Shared cost pattern key. The cost of this call is shared between caller and recipient, and is hence typically less than PREMIUM_RATE calls

SHORT

@private Short key

SHORT_CODE

@private Short code

SHORT_CODES

@private short codes types keys

SMS_SERVICES

@private SMS Services only type

STANDARD_RATE

@private standard rate type

TOLL_FREE

@private Freephone line pattern key

TYPES

@private Types key

TYPES_DESC

@private hash of all phone types with human representation

UAN

@private Used for 'Universal Access Numbers' or 'Company Numbers'.

They may be further routed to specific offices, but allow one number
to be used for a company.
VALID_PATTERN

Internal use keys for validations @private Valid regex pattern key

VANITY_4_LETTERS_KEYS_REGEX

@private vanity numbers 4 keys letters

VOICEMAIL

@private Used for 'Voice Mail Access Numbers'.

VOIP

@private VoIP pattern key. This includes TSoIP (Telephony Service over IP)

Public Instance Methods

add_additional_regex(country, type, national_regex) click to toggle source
# File lib/phonelib/core.rb, line 163
def add_additional_regex(country, type, national_regex)
  return unless Phonelib::Core::TYPES_DESC.keys.include?(type.to_sym)
  return unless national_regex.is_a?(String)
  @@phone_data = nil
  @@additional_regexes[country.to_s.upcase] ||= {}
  @@additional_regexes[country.to_s.upcase][type] ||= []
  @@additional_regexes[country.to_s.upcase][type] << national_regex
end
additional_regexes() click to toggle source
# File lib/phonelib/core.rb, line 184
def additional_regexes
  @@additional_regexes
end
additional_regexes=(data) click to toggle source

setter for data file to use

# File lib/phonelib/core.rb, line 154
def additional_regexes=(data)
  return unless data.is_a?(Array)
  @@additional_regexes = {}
  data.each do |row|
    next if row.size != 3
    add_additional_regex(*row)
  end
end
default_country() click to toggle source

getter method for default_country variable @return [String|nil] Default country set for parsing or nil

# File lib/phonelib/core.rb, line 34
def default_country
  @@default_country
end
default_country=(country) click to toggle source

setter method for default_country variable @param country [String|Symbol] default country ISO2 code used for parsing @return [String|nil] Default country set for parsing or nil

# File lib/phonelib/core.rb, line 41
def default_country=(country)
  @@default_country = country
end
dump_additional_regexes() click to toggle source
# File lib/phonelib/core.rb, line 172
def dump_additional_regexes
  rows = []
  @@additional_regexes.each do |country, types|
    types.each do |type, regexes|
      regexes.each do |regex|
        rows << [country, type, regex]
      end
    end
  end
  rows
end
extension_separate_symbols() click to toggle source

getter method for extension_separate_symbols variable @return [String] Default extension separator symbols used for parsing

# File lib/phonelib/core.rb, line 66
def extension_separate_symbols
  @@extension_separate_symbols
end
extension_separate_symbols=(separator) click to toggle source

setter method for extension_separate_symbols variable @param separator [String] extension separator symbols used for parsing @return [String] Default extension separator symbols used for parsing

# File lib/phonelib/core.rb, line 73
def extension_separate_symbols=(separator)
  @@extension_separate_symbols = separator
end
extension_separator() click to toggle source

getter method for extension_separator variable @return [String] Default extension separator used for formatting

# File lib/phonelib/core.rb, line 50
def extension_separator
  @@extension_separator
end
extension_separator=(separator) click to toggle source

setter method for extension_separator variable @param separator [String] extension separator used for formatting @return [String] Default extension separator used for formatting

# File lib/phonelib/core.rb, line 57
def extension_separator=(separator)
  @@extension_separator = separator
end
impossible?(phone_number) click to toggle source

method checks if passed phone number is impossible @param phone_number [String] the phone number to be parsed @return [Boolean] phone impossible or not

# File lib/phonelib/core.rb, line 402
def impossible?(phone_number)
  parse(phone_number).impossible?
end
invalid?(phone_number) click to toggle source

method checks if passed phone number is invalid @param phone_number [String] the phone number to be parsed @return [Boolean] phone invalid or not

# File lib/phonelib/core.rb, line 388
def invalid?(phone_number)
  parse(phone_number).invalid?
end
invalid_for_country?(phone_number, country) click to toggle source

method checks if passed phone number is invalid for provided country @param phone_number [String] the phone number to be parsed @param country [String] ISO2 country code for phone parsing @return [Boolean] phone invalid for specified country or not

# File lib/phonelib/core.rb, line 418
def invalid_for_country?(phone_number, country)
  parse(phone_number, country).invalid_for_country?(country)
end
override_phone_data() click to toggle source
# File lib/phonelib/core.rb, line 148
def override_phone_data
  @@override_phone_data
end
override_phone_data=(file_path) click to toggle source

setter for data file to use

# File lib/phonelib/core.rb, line 144
def override_phone_data=(file_path)
  @@override_phone_data = file_path
end
parse(phone, passed_country = nil) click to toggle source

method for parsing phone number. On first run fills @@phone_data with data present in yaml file @param phone [String] the phone number to be parsed @param passed_country [nil|String|Symbol] country for phone parsing @return [Phonelib::Phone] parsed phone entity

# File lib/phonelib/core.rb, line 374
def parse(phone, passed_country = nil)
  Phonelib::Phone.new phone, passed_country
end
parse_special() click to toggle source

getter for flag for special phone types parsing @return [Boolean] Flag defines whether to parse special phone types

# File lib/phonelib/core.rb, line 83
def parse_special
  @@parse_special
end
parse_special=(special) click to toggle source

setter for flag for special phone types parsing @param special [Boolean] parse special phone types value @return [Boolean] Flag defines whether to parse special phone types

# File lib/phonelib/core.rb, line 90
def parse_special=(special)
  @@parse_special = special
end
phone_data() click to toggle source

getter for phone data for other modules of gem, can be used outside @return [Hash] all data for phone parsing

# File lib/phonelib/core.rb, line 9
def phone_data
  @@phone_data ||= load_data.freeze
end
phone_ext_data() click to toggle source

@private getter for extended phone data

# File lib/phonelib/core.rb, line 25
def phone_ext_data
  @@phone_ext_data ||= load_ext_data.freeze
end
phone_regexp_cache() click to toggle source

@private getter for phone regexp cache (internal use only)

# File lib/phonelib/core.rb, line 17
def phone_regexp_cache
  @@phone_regexp_cache
end
possible?(phone_number) click to toggle source

method checks if passed phone number is possible @param phone_number [String] the phone number to be parsed @return [Boolean] phone possible or not

# File lib/phonelib/core.rb, line 395
def possible?(phone_number)
  parse(phone_number).possible?
end
sanitize_regex() click to toggle source

getter for sanitize regex @return [String] regex of symbols to wipe from parsed number

# File lib/phonelib/core.rb, line 115
def sanitize_regex
  @@sanitize_regex
end
sanitize_regex=(regex) click to toggle source

setter for sanitize regex @param regex [String] symbols to wipe from parsed number @return [String] regex of symbols to wipe from parsed number

# File lib/phonelib/core.rb, line 122
def sanitize_regex=(regex)
  @@sanitize_regex = regex.is_a?(String) ? regex : regex.to_s
end
strict_check() click to toggle source

getter for strict check flag @return [Boolean] Flag defines whether to do strict parsing check

# File lib/phonelib/core.rb, line 99
def strict_check
  @@strict_check
end
strict_check=(strict) click to toggle source

setter for strict check flag @param strict [Boolean] make a strict parsing or not @return [Boolean] Flag defines whether to do strict parsing check

# File lib/phonelib/core.rb, line 106
def strict_check=(strict)
  @@strict_check = strict
end
strict_double_prefix_check() click to toggle source

getter for strict double prefix check flag @return [Boolean] Flag defines whether to do strict double prefix parsing check

# File lib/phonelib/core.rb, line 131
def strict_double_prefix_check
  @@strict_double_prefix_check
end
strict_double_prefix_check=(strict) click to toggle source

setter for strict double prefix check flag @param strict [Boolean] make a strict double prefix parsing or not @return [Boolean] Flag defines whether to do strict double prefix parsing check

# File lib/phonelib/core.rb, line 138
def strict_double_prefix_check=(strict)
  @@strict_double_prefix_check = strict
end
valid?(phone_number) click to toggle source

method checks if passed phone number is valid @param phone_number [String] the phone number to be parsed @return [Boolean] phone valid or not

# File lib/phonelib/core.rb, line 381
def valid?(phone_number)
  parse(phone_number).valid?
end
valid_for_country?(phone_number, country) click to toggle source

method checks if passed phone number is valid for provided country @param phone_number [String] the phone number to be parsed @param country [String] ISO2 country code for phone parsing @return [Boolean] phone valid for specified country or not

# File lib/phonelib/core.rb, line 410
def valid_for_country?(phone_number, country)
  parse(phone_number, country).valid_for_country?(country)
end
vanity_conversion() click to toggle source
# File lib/phonelib/core.rb, line 194
def vanity_conversion
  @@vanity_conversion
end
vanity_conversion=(value) click to toggle source

setter for vanity phone numbers chars replacement

# File lib/phonelib/core.rb, line 190
def vanity_conversion=(value)
  @@vanity_conversion = value
end

Private Instance Methods

load_data() click to toggle source

@private Load data file into memory

# File lib/phonelib/core.rb, line 425
def load_data
  data_file = "#{File.dirname(__FILE__)}/../../#{FILE_MAIN_DATA}"
  default_data = Marshal.load(File.binread(data_file))
  if override_phone_data
    override_data_file = Marshal.load(File.binread(override_phone_data))
    default_data.merge!(override_data_file)
  end
  additional_regexes.each do |country, types|
    types.each do |type, regex|
      default_data[country][Core::TYPES][type] ||= {}
      [Core::VALID_PATTERN, Core::POSSIBLE_PATTERN].each do |key|
        if default_data[country][Core::TYPES][type][key]
          default_data[country][Core::TYPES][type][key] << "|#{regex.join('|')}"
        else
          default_data[country][Core::TYPES][type][key] = regex.join('|')
        end
        if type != Core::GENERAL
          default_data[country][Core::TYPES][Core::GENERAL][key] << "|#{regex.join('|')}"
        end
      end
    end
  end
  default_data
end
load_ext_data() click to toggle source

@private Load extended data file into memory

# File lib/phonelib/core.rb, line 451
def load_ext_data
  data_file = "#{File.dirname(__FILE__)}/../../#{FILE_EXT_DATA}"
  Marshal.load(File.binread(data_file))
end