class AusPhones

Constants

CNF
VERSION

Attributes

input[R]
phone_number[R]

Public Class Methods

new(input='') click to toggle source
# File lib/aus_phones.rb, line 11
def initialize(input='')
  raise RuntimeError.new('Not a string') unless input.is_a? String
  @input        = input
  @phone_number = build
end

Public Instance Methods

area_code() click to toggle source
# File lib/aus_phones.rb, line 77
def area_code
  phone_number.area_code
end
carrier() click to toggle source
# File lib/aus_phones.rb, line 69
def carrier
  phone_number.carrier
end
description() click to toggle source
# File lib/aus_phones.rb, line 73
def description
  phone_number.description
end
dial_domestic() click to toggle source
# File lib/aus_phones.rb, line 85
def dial_domestic
  if (phone_number.number.to_s.size == 0)
    return nil
  else
    "#{phone_number.area_code}#{phone_number.number}"
  end
end
dial_international() click to toggle source
# File lib/aus_phones.rb, line 93
def dial_international
  if (phone_number.area_code.start_with?('0') || phone_number.number.start_with?('0'))
    dial = "#{phone_number.area_code}#{phone_number.number}"
    return dial.sub(/^0/, CNF.prefix)
  else
    return nil
  end
end
dial_local() click to toggle source
# File lib/aus_phones.rb, line 81
def dial_local
  phone_number.number
end
format_domestic() click to toggle source
# File lib/aus_phones.rb, line 124
def format_domestic
  if phone_number.number.to_s.size == 0
    nil
  else
    if phone_number.area_code.to_s.size == 0
      format_local
    else
      "(#{phone_number.area_code}) #{format_local}"
    end
  end
end
format_international() click to toggle source
# File lib/aus_phones.rb, line 136
def format_international
  if phone_number.area_code.start_with?('0')
    area_code = phone_number.area_code.sub(/^0/, '')
    number = format_local
    return "+#{CNF.prefix} (#{area_code}) #{number}"
  elsif phone_number.number.start_with?('0')
    number = format_local
    number = number.sub(/^0/, '')
    return "+#{CNF.prefix} #{number}"
 else
    return nil
  end
end
format_local() click to toggle source
# File lib/aus_phones.rb, line 102
def format_local
  if (phone_number.number.to_s.size == 0)
    return nil
  elsif (phone_number.number.to_s.size == 12)
    return phone_number.number.sub(/^([0-9]{4})([0-9]{4})([0-9]{4})$/, '\1 \2 \3')
  elsif (phone_number.number.to_s.size == 11)
    return phone_number.number.sub(/^([0-9]{4})([0-9]{3})([0-9]{4})$/, '\1 \2 \3')
  elsif (phone_number.number.to_s.size == 10)
    return phone_number.number.sub(/^([0-9]{4})([0-9]{3})([0-9]{3})$/, '\1 \2 \3')
  elsif (phone_number.number.to_s.size == 9)
    return phone_number.number.sub(/^([0-9]{3})([0-9]{3})([0-9]{3})$/, '\1 \2 \3')
  elsif (phone_number.number.to_s.size == 8)
    return phone_number.number.sub(/^([0-9]{4})([0-9]{4})$/, '\1 \2')
  elsif (phone_number.number.to_s.size == 7)
    return phone_number.number.sub(/^([0-9]{3})([0-9]{4})$/, '\1 \2')
  elsif (phone_number.number.to_s.size == 6)
    return phone_number.number.sub(/^([0-9]{3})([0-9]{3})$/, '\1 \2')
  elsif (phone_number.number.to_s.size < 6)
    return phone_number.number
  end
end
is_data?() click to toggle source
# File lib/aus_phones.rb, line 45
def is_data?
  phone_number.type == 'data'
end
is_emergency?() click to toggle source
# File lib/aus_phones.rb, line 25
def is_emergency?
  phone_number.type == 'emergency'
end
is_fictitious?() click to toggle source
# File lib/aus_phones.rb, line 57
def is_fictitious?
  phone_number.type == 'fictitious'
end
is_form_valid?() click to toggle source
# File lib/aus_phones.rb, line 21
def is_form_valid?
  phone_number.is_form_valid
end
is_landline?() click to toggle source
# File lib/aus_phones.rb, line 33
def is_landline?
  phone_number.type == 'landline'
end
is_mobile?() click to toggle source
# File lib/aus_phones.rb, line 29
def is_mobile?
  phone_number.type == 'mobile'
end
is_nongeo?() click to toggle source
# File lib/aus_phones.rb, line 49
def is_nongeo?
  phone_number.type == 'nongeo'
end
is_satellite?() click to toggle source
# File lib/aus_phones.rb, line 37
def is_satellite?
  phone_number.type == 'satellite'
end
is_test?() click to toggle source
# File lib/aus_phones.rb, line 53
def is_test?
  phone_number.type == 'test'
end
is_valid?() click to toggle source
# File lib/aus_phones.rb, line 17
def is_valid?
  phone_number.is_valid
end
is_voip?() click to toggle source
# File lib/aus_phones.rb, line 41
def is_voip?
  phone_number.type == 'voip'
end
region() click to toggle source
# File lib/aus_phones.rb, line 65
def region
  phone_number.region
end
type() click to toggle source
# File lib/aus_phones.rb, line 61
def type
  phone_number.type
end

Private Instance Methods

build() click to toggle source
# File lib/aus_phones.rb, line 153
def build
  # Create a data structure
  phone_number = OpenStruct.new(
      is_valid:      false,
      is_form_valid: false,
      type:          nil,
      region:        nil,
      carrier:       nil,
      description:   nil,
      area_code:     nil,
      number:        nil
  )

  # Clean out non standard characters
  cleaned      = input.gsub(/[^0-9\+]/, '')

  # Remove international prefix
  cleaned      = cleaned.gsub(/\+#{CNF.prefix}/, '0')

  # Match Number to profile
  CNF.phones.each do |profile|
    m = Regexp.new(profile[:pattern]).match(cleaned)
    if m then
      phone_number.is_valid      = true
      phone_number.is_form_valid = profile[:valid]
      phone_number.area_code     = profile[:area_code]
      phone_number.type          = profile[:type]
      phone_number.carrier       = profile[:carrier]
      phone_number.state         = profile[:state]
      phone_number.region        = profile[:region]
      phone_number.description   = profile[:description]
      phone_number.number        = m[1]
    end
  end

  phone_number
end