def number_to_phone(number, options = {})
return nil if number.nil?
begin
Float(number)
is_number_html_safe = true
rescue ArgumentError, TypeError
if options[:raise]
raise InvalidNumberError, number
else
is_number_html_safe = number.to_s.html_safe?
end
end
number = number.to_s.strip
options = options.symbolize_keys
area_code = options[:area_code] || nil
delimiter = options[:delimiter] || "-"
extension = options[:extension].to_s.strip || nil
country_code = options[:country_code] || nil
str = ""
str << "+#{country_code}#{delimiter}" unless country_code.blank?
str << if area_code
number.gsub!(/([0-9]{1,3})([0-9]{3})([0-9]{4}$)/,"(\\1) \\2#{delimiter}\\3")
else
number.gsub!(/([0-9]{0,3})([0-9]{3})([0-9]{4})$/,"\\1#{delimiter}\\2#{delimiter}\\3")
number.starts_with?('-') ? number.slice!(1..-1) : number
end
str << " x #{extension}" unless extension.blank?
is_number_html_safe ? str.html_safe : str
end