class GlobalPhone::DatabaseGenerator
Constants
- VERSION
Attributes
doc[R]
Public Class Methods
load(xml)
click to toggle source
# File lib/global_phone/database_generator.rb, line 12 def self.load(xml) new(Nokogiri.XML(xml)) end
load_file(filename)
click to toggle source
# File lib/global_phone/database_generator.rb, line 8 def self.load_file(filename) load(File.read(filename)) end
new(doc)
click to toggle source
# File lib/global_phone/database_generator.rb, line 18 def initialize(doc) @doc = doc end
Public Instance Methods
inspect()
click to toggle source
# File lib/global_phone/database_generator.rb, line 34 def inspect "#<#{self.class.name} (#{doc.search("*").size} elements)>" end
record_data()
click to toggle source
# File lib/global_phone/database_generator.rb, line 28 def record_data @record_data ||= territory_nodes_by_region.map do |country_code, territory_nodes| truncate(compile_region(territory_nodes, country_code)) end end
test_cases()
click to toggle source
# File lib/global_phone/database_generator.rb, line 22 def test_cases @test_cases ||= territory_nodes.map do |node| example_numbers_for_territory_node(node) end.flatten(1) end
Protected Instance Methods
compile_format(node)
click to toggle source
# File lib/global_phone/database_generator.rb, line 114 def compile_format(node) [ node["pattern"], text_or_nil(node, "format"), pattern(node, "leadingDigits"), node["nationalPrefixFormattingRule"], text_or_nil(node, "intlFormat") ] end
compile_formats(territory_nodes)
click to toggle source
# File lib/global_phone/database_generator.rb, line 108 def compile_formats(territory_nodes) format_nodes_for(territory_nodes).map do |node| truncate(compile_format(node)) end end
compile_region(territory_nodes, country_code)
click to toggle source
# File lib/global_phone/database_generator.rb, line 67 def compile_region(territory_nodes, country_code) territories, main_territory_node = compile_territories(territory_nodes) formats = compile_formats(territory_nodes) [ country_code, formats, territories, main_territory_node["internationalPrefix"], main_territory_node["nationalPrefix"], squish(main_territory_node["nationalPrefixForParsing"]), squish(main_territory_node["nationalPrefixTransformRule"]) ] end
compile_territories(territory_nodes)
click to toggle source
# File lib/global_phone/database_generator.rb, line 82 def compile_territories(territory_nodes) territories = [] main_territory_node = territory_nodes.first territory_nodes.each do |node| territory = truncate(compile_territory(node)) if node["mainCountryForCode"] main_territory_node = node territories.unshift(territory) else territories.push(territory) end end [territories, main_territory_node] end
compile_territory(node)
click to toggle source
# File lib/global_phone/database_generator.rb, line 99 def compile_territory(node) [ territory_name(node), pattern(node, "generalDesc possibleNumberPattern"), pattern(node, "generalDesc nationalNumberPattern"), squish(node["nationalPrefixFormattingRule"]) ] end
example_number_types_to_exclude()
click to toggle source
# File lib/global_phone/database_generator.rb, line 63 def example_number_types_to_exclude %w( emergency shortCode ) end
example_numbers_for_territory_node(node)
click to toggle source
# File lib/global_phone/database_generator.rb, line 51 def example_numbers_for_territory_node(node) name = territory_name(node) return [] if name == "001" node.search(example_numbers_selector).map { |node| [node.text, name] } end
example_numbers_selector()
click to toggle source
# File lib/global_phone/database_generator.rb, line 57 def example_numbers_selector "./*[not(" + example_number_types_to_exclude.map do |type| "self::#{type}" end.join(" or ") + ")]/exampleNumber" end
format_nodes_for(territory_nodes)
click to toggle source
# File lib/global_phone/database_generator.rb, line 124 def format_nodes_for(territory_nodes) territory_nodes.map do |node| node.search("availableFormats numberFormat").to_a end.flatten end
pattern(node, selector)
click to toggle source
# File lib/global_phone/database_generator.rb, line 140 def pattern(node, selector) squish(text_or_nil(node, selector)) end
squish(string)
click to toggle source
# File lib/global_phone/database_generator.rb, line 136 def squish(string) string.gsub(/\s+/, "") if string end
territory_name(node)
click to toggle source
# File lib/global_phone/database_generator.rb, line 47 def territory_name(node) node["id"] end
territory_nodes()
click to toggle source
# File lib/global_phone/database_generator.rb, line 39 def territory_nodes doc.search("territory") end
territory_nodes_by_region()
click to toggle source
# File lib/global_phone/database_generator.rb, line 43 def territory_nodes_by_region territory_nodes.group_by { |node| node["countryCode"] } end
text_or_nil(node, selector)
click to toggle source
# File lib/global_phone/database_generator.rb, line 144 def text_or_nil(node, selector) nodes = node.search(selector) nodes.empty? ? nil : nodes.text end
truncate(array)
click to toggle source
# File lib/global_phone/database_generator.rb, line 130 def truncate(array) array.dup.tap do |result| result.pop while result.any? && result.last.nil? end end