class BrazilianValidators::Phone

Public Class Methods

is_mobile?(number = '') click to toggle source
# File lib/brazilian_validators/phone.rb, line 31
def self.is_mobile?(number = '')
  phone = new(number)
  phone.is_mobile?
end
new(number = '') click to toggle source
# File lib/brazilian_validators/phone.rb, line 3
def initialize(number = '')
  number = remove_non_digits(number.to_s)
  @area_code = number.slice!(0..1)
  @number = number
end
valid?(number = '') click to toggle source
# File lib/brazilian_validators/phone.rb, line 36
def self.valid?(number = '')
  phone = new(number)
  phone.valid?
end

Public Instance Methods

area_code() click to toggle source
# File lib/brazilian_validators/phone.rb, line 9
def area_code
  @area_code
end
area_code=(area_code) click to toggle source
# File lib/brazilian_validators/phone.rb, line 13
def area_code=(area_code)
  area_code = remove_non_digits(area_code)
  @area_code = area_code
end
is_mobile?() click to toggle source
# File lib/brazilian_validators/phone.rb, line 18
def is_mobile?
  valid? && valid_mobile?
end
number() click to toggle source
# File lib/brazilian_validators/phone.rb, line 22
def number
  @number
end
number=(number) click to toggle source
# File lib/brazilian_validators/phone.rb, line 26
def number=(number)
  number = remove_non_digits(number)
  @number = number
end
valid?() click to toggle source
# File lib/brazilian_validators/phone.rb, line 41
def valid?
  valid_area_code? && valid_number?
end

Private Instance Methods

remove_non_digits(string) click to toggle source
# File lib/brazilian_validators/phone.rb, line 70
def remove_non_digits(string)
  string.gsub!(/\D/, "")
  string.gsub!(/\A0/, "")
  string
end
valid_area_code?() click to toggle source
# File lib/brazilian_validators/phone.rb, line 47
def valid_area_code?
  return false unless @area_code.size == 2
  return false if @area_code.match(/\A0|[1-9]0|2[3569]|3[69]|45|5[26-9]|7[268]/)
  true
end
valid_mobile?() click to toggle source
# File lib/brazilian_validators/phone.rb, line 53
def valid_mobile?
  return false if @number.match(/\A[0-6]/)
  return true if @number.size == 9 && @number.match(/\A9/) && @area_code.match(/\A[0-37-9]/)
  if @number.size == 8
    return true if @number.match(/\A70/) && @area_code.match(/1[1-9]|2[124]/)
    return true if @number.match(/\A77/) && @area_code.match(/1[1-9]|2[124]|3[147]/)
    return true if @number.match(/\A78/) && @area_code.match(/1[1-9]|2[1247]|3[147]|4[1-478]|5[14]|6[125]|7[135]|8[15]/)
    return true if @number.match(/\A79/) && @area_code.match(/1[1-9]/)
    return true if @area_code.match(/\A[456]/) && @number.match(/\A[89]/)
  end
  false
end
valid_number?() click to toggle source
# File lib/brazilian_validators/phone.rb, line 66
def valid_number?
  valid_mobile? || (!@number.match(/\A[2-5]/).nil? && @number.size == 8)
end