class TelephoneNumber::Formatter
Attributes
country[R]
normalized_number[R]
original_number[R]
valid[R]
valid?[R]
Public Class Methods
new(number_obj)
click to toggle source
# File lib/telephone_number/formatter.rb, line 6 def initialize(number_obj) @normalized_number = number_obj.normalized_number @country = number_obj.country @valid = number_obj.valid? @original_number = number_obj.original_number end
Public Instance Methods
e164_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 18 def e164_number(formatted: true) return original_or_default if !valid? build_e164_number(formatted: formatted) end
international_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 23 def international_number(formatted: true) return original_or_default if !valid? || !number_format build_international_number(formatted: formatted) end
national_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 13 def national_number(formatted: true) return original_or_default if !valid? || !number_format build_national_number(formatted: formatted) end
Private Instance Methods
build_e164_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 48 def build_e164_number(formatted: true) formatted_string = "+#{country.country_code}#{normalized_number}" formatted ? formatted_string : TelephoneNumber.sanitize(formatted_string) end
build_international_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 53 def build_international_number(formatted: true) return original_or_default if !valid? || number_format.nil? format_to_use = number_format.intl_format || number_format.format formatted_string = normalized_number.sub(number_format.pattern, format_to_use.gsub(/\$/, '\\\\')) formatted_string = "+#{country.country_code} #{formatted_string}" formatted ? formatted_string : TelephoneNumber.sanitize(formatted_string) end
build_national_number(formatted: true)
click to toggle source
# File lib/telephone_number/formatter.rb, line 36 def build_national_number(formatted: true) national_prefix_formatting_rule = number_format.national_prefix_formatting_rule formatted_number = if national_prefix_formatting_rule national_prefix_formatting_rule = national_prefix_formatting_rule.sub(/\$NP/, country.national_prefix.to_s).sub(/\$FG/, '\\\1') format = number_format.format.sub(/(\$\d)/, national_prefix_formatting_rule).gsub(/\$/, '\\\\') normalized_number.sub(number_format.pattern, format) else normalized_number.sub(number_format.pattern, number_format.format.gsub(/\$/, '\\\\')) end formatted ? formatted_number : TelephoneNumber.sanitize(formatted_number) end
number_format()
click to toggle source
# File lib/telephone_number/formatter.rb, line 32 def number_format @number_format ||= country.detect_format(normalized_number) end
original_or_default()
click to toggle source
# File lib/telephone_number/formatter.rb, line 65 def original_or_default return original_number unless TelephoneNumber.default_format_string && TelephoneNumber.default_format_pattern captures = original_number.match(TelephoneNumber.default_format_pattern).captures format(ruby_format_string(TelephoneNumber.default_format_string), *captures) end
ruby_format_string(format_string)
click to toggle source
# File lib/telephone_number/formatter.rb, line 61 def ruby_format_string(format_string) format_string.gsub(/(\$\d)/) { |cap| "%#{cap.reverse}s" } end