lib/torasup/operator.rb in torasup-0.0.9 vs lib/torasup/operator.rb in torasup-0.0.10

- old
+ new

@@ -1,11 +1,12 @@ module Torasup class Operator - attr_accessor :prefix, :local_number, :area_code, :country_code + attr_accessor :prefix, :local_number, :area_code, :country_code, :full_number def initialize(country_code, area_code_or_prefix, unresolved_local_number) - @country_code = country_code + 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 def method_missing(method, interpolations = {}) value = Torasup.prefix_data(full_prefix)[method.to_s] @@ -26,40 +27,56 @@ end private def parse_phone_number(area_code_or_prefix, unresolved_local_number) - if Torasup.prefix_data(full_prefix(area_code_or_prefix, local_number_parts(unresolved_local_number)[0])).any? - @area_code = area_code_or_prefix - @prefix = local_number_parts(unresolved_local_number)[0] - @local_number = local_number_parts(unresolved_local_number)[1] - elsif Torasup.prefix_data(full_prefix(area_code_or_prefix)).any? - @prefix = area_code_or_prefix - @local_number = unresolved_local_number - else - @local_number = area_code_or_prefix + unresolved_local_number + resolve_number_parts(area_code_or_prefix, unresolved_local_number) + end + + 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 - def local_number_parts(number) - [number[0..1], number[2..-1]] + 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 def full_prefix(*parts) - parts = [@area_code, @prefix] if parts.empty? - @country_code + parts.join + parts = [area_code, prefix] if parts.empty? + country_code + parts.join end def self.build_metadata(operator_type) operators = {} - Torasup.send(operator_type).each do |prefix, metadata| - prefix_country_id = metadata["country_id"] + 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 = metadata["id"] - operator_metadata = country_operators[prefix_operator_id] ||= metadata.dup + prefix_operator_id = prefix_metadata["id"] + operator_metadata = country_operators[prefix_operator_id] ||= prefix_metadata.dup operator_metadata.delete("prefix") - prefixes = operator_metadata["prefixes"] ||= [] - prefixes << 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 private_class_method :build_metadata