module Ruphone

Constants

VERSION

Public Class Methods

normalize(phone, args = {}) click to toggle source

Normalize russian phone numbers to +7XXXXXXXXXX format. Examples:

Ruphone.normalize('8921-746-95-48')
# => "+79217469548"

Ruphone.normalize('8(921) 746-95-48')
# => "+79217469548"

Ruphone.normalize('746-95-48', city_code: '+7843')
# => "+78437469548"
# File lib/ruphone.rb, line 15
def self.normalize(phone, args = {})
  return phone if phone.nil?

  phone = phone.tr('^0-9', '')
  return phone if phone.size.zero?

  return prefix(phone) if phone.size == 10

  if phone.size == 11
    return plus(phone) if phone.start_with?('7')
    return prefix(phone[1..-1]) if phone.start_with?('8')
  end

  city_code = normalize_city_code(args[:city_code])
  if city_code && phone.size == 11 - city_code.size
    return plus("#{city_code}#{phone}")
  end

  phone
end

Private Class Methods

normalize_city_code(city_code) click to toggle source
# File lib/ruphone.rb, line 47
def normalize_city_code(city_code)
  return city_code if city_code.nil?
  return city_code[1..-1] if city_code.start_with?('+')
  city_code
end
plus(phone) click to toggle source
# File lib/ruphone.rb, line 43
def plus(phone)
  "+#{phone}"
end
prefix(phone) click to toggle source
# File lib/ruphone.rb, line 39
def prefix(phone)
  "+7#{phone}"
end