module GlobalPhone::Parsing

Public Instance Methods

parse(string, territory_name) click to toggle source
# File lib/global_phone/parsing.rb, line 6
def parse(string, territory_name)
  string = Number.normalize(string)
  territory = self.territory(territory_name)
  raise ArgumentError, "unknown territory `#{territory_name}'" unless territory

  if starts_with_plus?(string)
    parse_international_string(string)
  elsif string =~ territory.international_prefix
    string = strip_international_prefix(territory, string)
    parse_international_string(string)
  else
    territory.parse_national_string(string)
  end
end
parse_international_string(string) click to toggle source
# File lib/global_phone/parsing.rb, line 21
def parse_international_string(string)
  string = Number.normalize(string)
  string = strip_leading_plus(string) if starts_with_plus?(string)

  if region = region_for_string(string)
    region.parse_national_string(string)
  end
end

Protected Instance Methods

country_code_candidates_for(string) click to toggle source
# File lib/global_phone/parsing.rb, line 48
def country_code_candidates_for(string)
  (1..3).map { |length| string[0, length] }
end
region_for_string(string) click to toggle source
# File lib/global_phone/parsing.rb, line 43
def region_for_string(string)
  candidates = country_code_candidates_for(string)
  Utils.map_detect(candidates) { |country_code| region(country_code) }
end
starts_with_plus?(string) click to toggle source
# File lib/global_phone/parsing.rb, line 31
def starts_with_plus?(string)
  string[0, 1] == "+"
end
strip_international_prefix(territory, string) click to toggle source
# File lib/global_phone/parsing.rb, line 39
def strip_international_prefix(territory, string)
  string.sub(territory.international_prefix, "")
end
strip_leading_plus(string) click to toggle source
# File lib/global_phone/parsing.rb, line 35
def strip_leading_plus(string)
  string[1..-1]
end