class ReeNumber::NumberToPhone
def call(number, **opts)
def call(number, **opts) options = DEFAULTS.merge(opts) str = country_code(options[:country_code], options[:delimiter]).dup str << convert_to_phone_number( number.to_s.strip, options[:delimiter], options[:area_code], options[:pattern] ) str << phone_extension(options[:extension]) if options[:extension] str end
def convert_to_phone_number(phone, delimiter, area_code, pattern)
def convert_to_phone_number(phone, delimiter, area_code, pattern) if area_code convert_with_area_code(phone, delimiter, pattern) else convert_without_area_code(phone, delimiter, pattern) end end
def convert_with_area_code(phone, delimiter, pattern)
def convert_with_area_code(phone, delimiter, pattern) phone.gsub( pattern || DEFAULT_AREA_PHONE_PATTERN, "(\\1) \\2#{delimiter}\\3" ) end
def convert_without_area_code(phone, delimiter, pattern)
def convert_without_area_code(phone, delimiter, pattern) converted_phone = phone.gsub( pattern || DEFAULT_PHONE_PATTERN, "\\1#{delimiter}\\2#{delimiter}\\3" ) delimiter && converted_phone.start_with?(delimiter) ? converted_phone[1..-1] : converted_phone end
def country_code(country_code, delimiter)
def country_code(country_code, delimiter) country_code ? "+#{country_code}#{delimiter}" : "" end
def phone_extension(extension)
def phone_extension(extension) " x #{extension}" end