class TelBr

Attributes

telephone[R]

Public Class Methods

new(telephone) click to toggle source
# File lib/telefonia_br.rb, line 5
def initialize(telephone)
  @telephone = telephone.to_s
  validate_telephone
end

Public Instance Methods

ddd() click to toggle source
# File lib/telefonia_br.rb, line 18
def ddd
  stripped[0,2]
end
error() click to toggle source
# File lib/telefonia_br.rb, line 14
def error
  @error
end
formatted() click to toggle source
# File lib/telefonia_br.rb, line 38
def formatted
  number.size == 8 ? "(#{ddd}) #{number[0,4]}-#{number[4,4]}" : "(#{ddd}) #{number[0,5]}-#{number[5,4]}"
end
number() click to toggle source
# File lib/telefonia_br.rb, line 30
def number
  stripped[2,9]
end
region() click to toggle source
# File lib/telefonia_br.rb, line 26
def region
  DDDS[ddd][:region]
end
state() click to toggle source
# File lib/telefonia_br.rb, line 22
def state
  DDDS[ddd][:state]
end
stripped() click to toggle source
# File lib/telefonia_br.rb, line 34
def stripped
  @telephone.scan(/[0-9]/).join
end
type() click to toggle source
# File lib/telefonia_br.rb, line 42
def type
  number_type
end
valid?() click to toggle source
# File lib/telefonia_br.rb, line 10
def valid?
  @error.empty? ? true : false
end

Private Instance Methods

ddd_requires_nineth_digit?() click to toggle source
# File lib/telefonia_br.rb, line 81
def ddd_requires_nineth_digit?
  DDDS[ddd][:ninth_digit] && is_mobile?
end
is_mobile?() click to toggle source
# File lib/telefonia_br.rb, line 77
def is_mobile?
  type == 'mobile' ? true : false
end
number_type() click to toggle source
# File lib/telefonia_br.rb, line 85
def number_type
  return 'invalid' if number.nil? || (number.size == 9 && number[0].to_i != 9)
  number.size == 9 ? eight_digits = number[1,8] : eight_digits = number
  case
    # SPECIAL CASES
    when MOBILE_SME_FIRST_2_DIGITS[DDDS[ddd][:state]].include?(eight_digits[0,2].to_i)
      return 'mobile sme'
    when MOBILE_SPECIAL_CASES_FIRST_4_DIGITS[DDDS[ddd][:state]].include?(eight_digits[0,4].to_i)
      return 'mobile'
    when MOBILE_SPECIAL_CASES_FIRST_2_DIGITS[DDDS[ddd][:state]].include?(eight_digits[0,2].to_i)
      return 'mobile'

    # DEFAULT CASES
    when eight_digits[0,2].to_i == 57                 # 57            rural landline
      return 'rural landline'
    when (2..5).include?(eight_digits[0,1].to_i)      # 2 to 5        landline
      return 'landline'
    when MOBILE_BANDS[DDDS[ddd][:state]].include?(eight_digits[0,2].to_i)
      return 'mobile'
    else
      return 'invalid'
  end
end
should_have_eight_digits?() click to toggle source
# File lib/telefonia_br.rb, line 69
def should_have_eight_digits?
  (!ddd_requires_nineth_digit? && number.size == 9) || (!is_mobile? && number.size == 9)
end
should_have_nine_digits?() click to toggle source
# File lib/telefonia_br.rb, line 73
def should_have_nine_digits?
  ddd_requires_nineth_digit? && is_mobile? && number.size == 8
end
valid_ddd?() click to toggle source
# File lib/telefonia_br.rb, line 61
def valid_ddd?
  DDDS.keys.include?(ddd)
end
valid_number_type?() click to toggle source
# File lib/telefonia_br.rb, line 65
def valid_number_type?
  number_type != 'invalid'
end
valid_string?() click to toggle source
# File lib/telefonia_br.rb, line 57
def valid_string?
  [10, 11].include?(stripped.size)
end
validate_telephone() click to toggle source
# File lib/telefonia_br.rb, line 48
def validate_telephone
  return @error = "Invalid telephone"              unless valid_string?
  return @error = "Invalid DDD"                    unless valid_ddd?
  return @error = "Invalid number"                 unless valid_number_type?
  return @error = "Number should have 8 digits"    if should_have_eight_digits?
  return @error = "Number should have 9 digits"    if should_have_nine_digits?
  return @error = ""
end