class Torasup::Operator

Attributes

area_code[RW]
country_code[RW]
full_number[RW]
local_number[RW]
prefix[RW]

Public Class Methods

all() click to toggle source
# File lib/torasup/operator.rb, line 25
def self.all
  build_metadata(:prefixes)
end
new(country_code, area_code_or_prefix, unresolved_local_number) click to toggle source
# File lib/torasup/operator.rb, line 5
def initialize(country_code, area_code_or_prefix, unresolved_local_number)
  self.country_code = country_code
  self.full_number = full_prefix(area_code_or_prefix, unresolved_local_number)
  parse_phone_number(area_code_or_prefix, unresolved_local_number)
end
registered() click to toggle source
# File lib/torasup/operator.rb, line 21
def self.registered
  build_metadata(:registered_operator_prefixes)
end

Private Class Methods

build_metadata(operator_type) click to toggle source
# File lib/torasup/operator.rb, line 60
def self.build_metadata(operator_type)
  operators = {}
  Torasup.send(operator_type).each do |prefix, prefix_metadata|
    prefix_country_id = prefix_metadata["country_id"]
    country_operators = operators[prefix_country_id] ||= {}
    prefix_operator_id = prefix_metadata["id"]
    operator_metadata = country_operators[prefix_operator_id] ||= prefix_metadata.dup
    operator_metadata.delete("prefix")
    operator_metadata.delete("type")
    operator_metadata.delete("subscriber_number_min")
    operator_metadata.delete("subscriber_number_max")
    operator_metadata.delete("subscriber_number_pattern")
    type = prefix_metadata["type"]
    typed_prefixes = operator_metadata["#{type}_prefixes"] ||= {}
    typed_prefixes[prefix] = {
      "subscriber_number_min" => prefix_metadata["subscriber_number_min"],
      "subscriber_number_max" => prefix_metadata["subscriber_number_max"],
      "subscriber_number_pattern" => prefix_metadata["subscriber_number_pattern"],
    }
  end
  operators
end

Public Instance Methods

method_missing(method, interpolations = {}) click to toggle source
# File lib/torasup/operator.rb, line 11
def method_missing(method, interpolations = {})
  value = Torasup.prefix_data(full_prefix)[method.to_s]
  return value unless value.is_a?(String)
  interpolated_result = value.dup
  interpolations.each do |interpolation, interpolated_value|
    interpolated_result.gsub!("%{#{interpolation}}", interpolated_value.to_s)
  end
  interpolated_result
end

Private Instance Methods

full_prefix(*parts) click to toggle source
# File lib/torasup/operator.rb, line 55
def full_prefix(*parts)
  parts = [area_code, prefix] if parts.empty?
  country_code + parts.join
end
parse_phone_number(area_code_or_prefix, unresolved_local_number) click to toggle source
# File lib/torasup/operator.rb, line 31
def parse_phone_number(area_code_or_prefix, unresolved_local_number)
  resolve_number_parts(area_code_or_prefix, unresolved_local_number)
end
resolve_number_parts(area_code_or_prefix, unresolved_local_number) click to toggle source
# File lib/torasup/operator.rb, line 35
def resolve_number_parts(area_code_or_prefix, unresolved_local_number)
  unresolved_local_number_length = unresolved_local_number.length
  unresolved_local_number_length.times do |n|
    return if set_number_parts(
      full_prefix(area_code_or_prefix, unresolved_local_number[0..(unresolved_local_number_length - n - 1)])
    )
  end

  set_number_parts(full_prefix(area_code_or_prefix))
end
set_number_parts(test_prefix) click to toggle source
# File lib/torasup/operator.rb, line 46
def set_number_parts(test_prefix)
  prefix_data = Torasup.prefix_data(test_prefix)
  self.area_code = prefix_data["area_code"]
  self.prefix = prefix_data["prefix"]
  local_number = full_number.gsub(/^#{full_prefix}/, "")
  self.local_number = local_number.empty? ? nil : local_number
  prefix_data.any?
end