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