Module: Phonelib::Core
- Included in:
- PhoneValidator, Phonelib
- Defined in:
- lib/phonelib/core.rb
Overview
main module that includes all basic data and methods
Constant Summary collapse
- FILE_MAIN_DATA =
'data/phone_data.dat'
- FILE_EXT_DATA =
'data/extended_data.dat'
- GENERAL =
Validation patterns keys constants
:general_desc
- PREMIUM_RATE =
:premium_rate
- TOLL_FREE =
:toll_free
- SHARED_COST =
between caller and recipient, and is hence typically less than PREMIUM_RATE calls
:shared_cost
- VOIP =
:voip
- PERSONAL_NUMBER =
and may be routed to either a MOBILE or FIXED_LINE number.
:personal_number
- PAGER =
:pager
- UAN =
:uan
- VOICEMAIL =
:voicemail
- FIXED_LINE =
:fixed_line
- MOBILE =
:mobile
- FIXED_OR_MOBILE =
:fixed_or_mobile
- SHORT_CODE =
:short_code
- EMERGENCY =
:emergency
- CARRIER_SPECIFIC =
:carrier_specific
- SMS_SERVICES =
:sms_services
- EXPANDED_EMERGENCY =
:expanded_emergency
- NO_INTERNATIONAL_DIALING =
:no_international_dialling
- CARRIER_SERVICES =
:carrier_services
- DIRECTORY_SERVICES =
:directory_services
- STANDARD_RATE =
:standard_rate
- CARRIER_SELECTION_CODES =
:carrier_selection_codes
- AREA_CODE_OPTIONAL =
:area_code_optional
- VALID_PATTERN =
Internal use keys for validations
:national_number_pattern
- POSSIBLE_PATTERN =
:possible_number_pattern
- NATIONAL_PREFIX =
:national_prefix
- NATIONAL_PREFIX_FOR_PARSING =
:national_prefix_for_parsing
- NATIONAL_PREFIX_TRANSFORM_RULE =
:national_prefix_transform_rule
- NATIONAL_PREFIX_RULE =
:national_prefix_formatting_rule
- COUNTRY_CODE =
:country_code
- LEADING_DIGITS =
:leading_digits
- INTERNATIONAL_PREFIX =
:international_prefix
- MAIN_COUNTRY_FOR_CODE =
:main_country_for_code
- DOUBLE_COUNTRY_PREFIX_FLAG =
:double_prefix
- TYPES =
:types
- FORMATS =
:formats
- PATTERN =
:pattern
- SHORT =
:short
- PLUS_SIGN =
'+'.freeze
- VANITY_4_LETTERS_KEYS_REGEX =
/[SVYZ]/.freeze
- AREA_CODE_TYPES =
[FIXED_LINE, FIXED_OR_MOBILE, MOBILE].freeze
- AREA_CODE_MOBILE_COUNTRIES =
%w(AR MX BR).freeze
- AREA_CODE_MOBILE_TOKENS =
{ 'MX' => '1', 'AR' => '9' }.freeze
- DEFAULT_NUMBER_FORMAT =
{ pattern: '(\\d+)(\\d{3})(\\d{4})', format: '$1 $2 $3' }.freeze
- TYPES_DESC =
{ general_desc: 'General Pattern', premium_rate: 'Premium Rate', toll_free: 'Toll Free', shared_cost: 'Shared Cost', voip: 'VoIP', personal_number: 'Personal Number', pager: 'Pager', uan: 'UAN', voicemail: 'VoiceMail', fixed_line: 'Fixed Line', mobile: 'Mobile', fixed_or_mobile: 'Fixed Line or Mobile', short_code: 'Short code', emergency: 'Emergency services', carrier_specific: 'Carrier specific number', sms_services: 'SMS Services only phone', expanded_emergency: 'Expanded emergency', no_international_dialling: 'No International Dialing phone', carrier_services: 'Carrier Services', directory_services: 'Directory Services', standard_rate: 'Standard Rate Destination', carrier_selection_codes: 'Carrier Selection codes', area_code_optional: 'Are code optional' }.freeze
- SHORT_CODES =
[ :short_code, :emergency, :carrier_specific, :sms_services, :expanded_emergency, :no_international_dialling, :carrier_services, :directory_services, :standard_rate, :carrier_selection_codes, :area_code_optional ].freeze
- EXT_PREFIXES =
:prefixes
- EXT_GEO_NAMES =
:geo_names
- EXT_COUNTRY_NAMES =
:country_names
- EXT_TIMEZONES =
:timezones
- EXT_CARRIERS =
:carriers
- EXT_GEO_NAME_KEY =
:g
- EXT_TIMEZONE_KEY =
:t
- EXT_CARRIER_KEY =
:c
- @@phone_data =
nil
- @@skip_eager_loading =
false
- @@phone_regexp_cache =
{}
- @@phone_ext_data =
nil
- @@default_country =
nil
- @@extension_separator =
';'
- @@extension_separate_symbols =
'#;'
- @@parse_special =
false
- @@strict_check =
false
- @@ignore_plus =
false
- @@sanitize_regex =
'[^0-9]+'
- @@strict_double_prefix_check =
false
- @@override_phone_data =
nil
- @@additional_regexes =
{}
- @@vanity_conversion =
false
Instance Method Summary collapse
- #add_additional_regex(country, type, national_regex) ⇒ Object
- #additional_regexes ⇒ Object
-
#additional_regexes=(data) ⇒ Object
setter for data file to use.
- #data_by_country_codes ⇒ Object
-
#default_country ⇒ String, ...
getter method for default_country variable.
-
#default_country=(country) ⇒ String, ...
setter method for default_country variable.
- #dump_additional_regexes ⇒ Object
-
#eager_load! ⇒ Object
eagerly initialize the gem, loads data into memory.
-
#extension_separate_symbols ⇒ String
getter method for extension_separate_symbols variable.
-
#extension_separate_symbols=(separator) ⇒ String
setter method for extension_separate_symbols variable.
-
#extension_separator ⇒ String
getter method for extension_separator variable.
-
#extension_separator=(separator) ⇒ String
setter method for extension_separator variable.
-
#ignore_plus ⇒ Boolean
getter for ignore plus flag.
-
#ignore_plus=(ignore_plus) ⇒ Boolean
setter for ignore plus flag.
-
#impossible?(phone_number) ⇒ Boolean
method checks if passed phone number is impossible.
-
#invalid?(phone_number) ⇒ Boolean
method checks if passed phone number is invalid.
-
#invalid_for_country?(phone_number, country) ⇒ Boolean
method checks if passed phone number is invalid for provided country.
- #override_phone_data ⇒ Object
-
#override_phone_data=(file_path) ⇒ Object
setter for data file to use.
-
#parse(phone, passed_country = nil) ⇒ Phonelib::Phone
method for parsing phone number.
-
#parse_special ⇒ Boolean
getter for flag for special phone types parsing.
-
#parse_special=(special) ⇒ Boolean
setter for flag for special phone types parsing.
-
#phone_data ⇒ Hash
getter for phone data for other modules of gem, can be used outside.
- #phone_data_int_prefixes ⇒ Object
- #phone_ext_data ⇒ Object
- #phone_regexp_cache ⇒ Object
-
#possible?(phone_number) ⇒ Boolean
method checks if passed phone number is possible.
-
#sanitize_regex ⇒ String
getter for sanitize regex.
-
#sanitize_regex=(regex) ⇒ String
setter for sanitize regex.
- #skip_eager_loading! ⇒ Object
-
#strict_check ⇒ Boolean
getter for strict check flag.
-
#strict_check=(strict) ⇒ Boolean
setter for strict check flag.
-
#strict_double_prefix_check ⇒ Boolean
getter for strict double prefix check flag.
-
#strict_double_prefix_check=(strict) ⇒ Boolean
setter for strict double prefix check flag.
-
#valid?(phone_number) ⇒ Boolean
method checks if passed phone number is valid.
-
#valid_for_country?(phone_number, country) ⇒ Boolean
method checks if passed phone number is valid for provided country.
- #vanity_conversion ⇒ Object
-
#vanity_conversion=(value) ⇒ Object
setter for vanity phone numbers chars replacement.
Instance Method Details
#add_additional_regex(country, type, national_regex) ⇒ Object
202 203 204 205 206 207 208 209 |
# File 'lib/phonelib/core.rb', line 202 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 = @@data_by_country_codes = 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 ⇒ Object
223 224 225 |
# File 'lib/phonelib/core.rb', line 223 def additional_regexes @@additional_regexes end |
#additional_regexes=(data) ⇒ Object
setter for data file to use
193 194 195 196 197 198 199 200 |
# File 'lib/phonelib/core.rb', line 193 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 |
#data_by_country_codes ⇒ Object
27 28 29 |
# File 'lib/phonelib/core.rb', line 27 def data_by_country_codes @@data_by_country_codes ||= phone_data.each_value.group_by { |d| d[COUNTRY_CODE] }.freeze end |
#default_country ⇒ String, ...
getter method for default_country variable
57 58 59 |
# File 'lib/phonelib/core.rb', line 57 def default_country @@default_country end |
#default_country=(country) ⇒ String, ...
setter method for default_country variable
64 65 66 |
# File 'lib/phonelib/core.rb', line 64 def default_country=(country) @@default_country = country end |
#dump_additional_regexes ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/phonelib/core.rb', line 211 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 |
#eager_load! ⇒ Object
eagerly initialize the gem, loads data into memory. not required, initialization is done lazily otherwise, but may be desirable in production enviroments to avoid initialization time on first use.
9 10 11 12 13 |
# File 'lib/phonelib/core.rb', line 9 def eager_load! return if @@skip_eager_loading phone_data phone_ext_data end |
#extension_separate_symbols ⇒ String
getter method for extension_separate_symbols variable
89 90 91 |
# File 'lib/phonelib/core.rb', line 89 def extension_separate_symbols @@extension_separate_symbols end |
#extension_separate_symbols=(separator) ⇒ String
setter method for extension_separate_symbols variable
96 97 98 |
# File 'lib/phonelib/core.rb', line 96 def extension_separate_symbols=(separator) @@extension_separate_symbols = separator end |
#extension_separator ⇒ String
getter method for extension_separator variable
73 74 75 |
# File 'lib/phonelib/core.rb', line 73 def extension_separator @@extension_separator end |
#extension_separator=(separator) ⇒ String
setter method for extension_separator variable
80 81 82 |
# File 'lib/phonelib/core.rb', line 80 def extension_separator=(separator) @@extension_separator = separator end |
#ignore_plus ⇒ Boolean
getter for ignore plus flag
138 139 140 |
# File 'lib/phonelib/core.rb', line 138 def ignore_plus @@ignore_plus end |
#ignore_plus=(ignore_plus) ⇒ Boolean
setter for ignore plus flag
145 146 147 |
# File 'lib/phonelib/core.rb', line 145 def ignore_plus=(ignore_plus) @@ignore_plus = ignore_plus end |
#impossible?(phone_number) ⇒ Boolean
method checks if passed phone number is impossible
441 442 443 |
# File 'lib/phonelib/core.rb', line 441 def impossible?(phone_number) parse(phone_number).impossible? end |
#invalid?(phone_number) ⇒ Boolean
method checks if passed phone number is invalid
427 428 429 |
# File 'lib/phonelib/core.rb', line 427 def invalid?(phone_number) parse(phone_number).invalid? end |
#invalid_for_country?(phone_number, country) ⇒ Boolean
method checks if passed phone number is invalid for provided country
457 458 459 |
# File 'lib/phonelib/core.rb', line 457 def invalid_for_country?(phone_number, country) parse(phone_number, country).invalid_for_country?(country) end |
#override_phone_data ⇒ Object
187 188 189 |
# File 'lib/phonelib/core.rb', line 187 def override_phone_data @@override_phone_data end |
#override_phone_data=(file_path) ⇒ Object
setter for data file to use
183 184 185 |
# File 'lib/phonelib/core.rb', line 183 def override_phone_data=(file_path) @@override_phone_data = file_path end |
#parse(phone, passed_country = nil) ⇒ Phonelib::Phone
method for parsing phone number. On first run fills @@phone_data with data present in yaml file
413 414 415 |
# File 'lib/phonelib/core.rb', line 413 def parse(phone, passed_country = nil) Phonelib::Phone.new phone, passed_country end |
#parse_special ⇒ Boolean
getter for flag for special phone types parsing
106 107 108 |
# File 'lib/phonelib/core.rb', line 106 def parse_special @@parse_special end |
#parse_special=(special) ⇒ Boolean
setter for flag for special phone types parsing
113 114 115 |
# File 'lib/phonelib/core.rb', line 113 def parse_special=(special) @@parse_special = special end |
#phone_data ⇒ Hash
getter for phone data for other modules of gem, can be used outside
22 23 24 |
# File 'lib/phonelib/core.rb', line 22 def phone_data @@phone_data ||= load_data.freeze end |
#phone_data_int_prefixes ⇒ Object
32 33 34 |
# File 'lib/phonelib/core.rb', line 32 def phone_data_int_prefixes @@all_int_prefixes ||= phone_data.map {|k,v| v[:international_prefix] }.select { |v| v != '' }.compact.uniq.join('|').freeze end |
#phone_ext_data ⇒ Object
48 49 50 |
# File 'lib/phonelib/core.rb', line 48 def phone_ext_data @@phone_ext_data ||= load_ext_data.freeze end |
#phone_regexp_cache ⇒ Object
40 41 42 |
# File 'lib/phonelib/core.rb', line 40 def phone_regexp_cache @@phone_regexp_cache end |
#possible?(phone_number) ⇒ Boolean
method checks if passed phone number is possible
434 435 436 |
# File 'lib/phonelib/core.rb', line 434 def possible?(phone_number) parse(phone_number).possible? end |
#sanitize_regex ⇒ String
getter for sanitize regex
154 155 156 |
# File 'lib/phonelib/core.rb', line 154 def sanitize_regex @@sanitize_regex end |
#sanitize_regex=(regex) ⇒ String
setter for sanitize regex
161 162 163 |
# File 'lib/phonelib/core.rb', line 161 def sanitize_regex=(regex) @@sanitize_regex = regex.is_a?(String) ? regex : regex.to_s end |
#skip_eager_loading! ⇒ Object
16 17 18 |
# File 'lib/phonelib/core.rb', line 16 def skip_eager_loading! @@skip_eager_loading = true end |
#strict_check ⇒ Boolean
getter for strict check flag
122 123 124 |
# File 'lib/phonelib/core.rb', line 122 def strict_check @@strict_check end |
#strict_check=(strict) ⇒ Boolean
setter for strict check flag
129 130 131 |
# File 'lib/phonelib/core.rb', line 129 def strict_check=(strict) @@strict_check = strict end |
#strict_double_prefix_check ⇒ Boolean
getter for strict double prefix check flag
170 171 172 |
# File 'lib/phonelib/core.rb', line 170 def strict_double_prefix_check @@strict_double_prefix_check end |
#strict_double_prefix_check=(strict) ⇒ Boolean
setter for strict double prefix check flag
177 178 179 |
# File 'lib/phonelib/core.rb', line 177 def strict_double_prefix_check=(strict) @@strict_double_prefix_check = strict end |
#valid?(phone_number) ⇒ Boolean
method checks if passed phone number is valid
420 421 422 |
# File 'lib/phonelib/core.rb', line 420 def valid?(phone_number) parse(phone_number).valid? end |
#valid_for_country?(phone_number, country) ⇒ Boolean
method checks if passed phone number is valid for provided country
449 450 451 |
# File 'lib/phonelib/core.rb', line 449 def valid_for_country?(phone_number, country) parse(phone_number, country).valid_for_country?(country) end |
#vanity_conversion ⇒ Object
233 234 235 |
# File 'lib/phonelib/core.rb', line 233 def vanity_conversion @@vanity_conversion end |
#vanity_conversion=(value) ⇒ Object
setter for vanity phone numbers chars replacement
229 230 231 |
# File 'lib/phonelib/core.rb', line 229 def vanity_conversion=(value) @@vanity_conversion = value end |