Module: Phonelib::DataImporterHelper
- Included in:
- Phonelib::DataImporter::Importer
- Defined in:
- lib/phonelib/data_importer_helper.rb
Constant Summary collapse
- XML_COMMENT_ATTRIBUTES =
xml comments attributes names that should not be parsed
%w(text comment)
- XML_FORMAT_NAMES =
xml format attributes names
%w(intlFormat format)
Instance Method Summary collapse
-
#camel2snake(s) ⇒ Object
method that converts camel case to snake case.
- #file_path(file) ⇒ Object
-
#fill_prefixes(key, value, prefix, prefixes) ⇒ Object
method updates prefixes hash recursively.
-
#hash_from_xml(data, type) ⇒ Object
method creates hash from xml elements/element attributes.
-
#main_from_xml(file) ⇒ Object
get main body from parsed xml document.
-
#name2sym(name) ⇒ Object
helper that converts xml element name to symbol.
-
#not_format?(name) ⇒ Boolean
method for checking if element name is not a format element.
-
#parse_raw_file(file) ⇒ Object
method parses raw data file.
- #possible_length_regex(attributes) ⇒ Object
-
#save_data_file ⇒ Object
method saves parsed data to data files.
-
#save_extended_data_file ⇒ Object
method saves extended data file.
-
#str_clean(s, white_space = true) ⇒ Object
helper that cleans string.
-
#without_comments(data) ⇒ Object
method filters xml elements excluding comments elements.
Instance Method Details
#camel2snake(s) ⇒ Object
method that converts camel case to snake case
131 132 133 |
# File 'lib/phonelib/data_importer_helper.rb', line 131 def camel2snake(s) s.gsub(/[A-Z]+/) { |m| "_#{m.downcase}" } end |
#file_path(file) ⇒ Object
11 12 13 |
# File 'lib/phonelib/data_importer_helper.rb', line 11 def file_path(file) "#{File.dirname(__FILE__)}/../../#{file}" end |
#fill_prefixes(key, value, prefix, prefixes) ⇒ Object
method updates prefixes hash recursively
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/phonelib/data_importer_helper.rb', line 38 def fill_prefixes(key, value, prefix, prefixes) prefixes = {} if prefixes.nil? if prefix.size == 1 pr = prefix.to_i prefixes[pr] ||= {} prefixes[pr][key] = value else pr = prefix[0].to_i prefixes[pr] = fill_prefixes(key, value, prefix[1..-1], prefixes[pr]) end prefixes end |
#hash_from_xml(data, type) ⇒ Object
method creates hash from xml elements/element attributes
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/phonelib/data_importer_helper.rb', line 64 def hash_from_xml(data, type) hash = {} case type when :attributes data.attributes.each do |k, v| hash[name2sym(k)] = str_clean(v) end when :children data.each do |f| hash[name2sym(f[0])] = f[1] end when :element data.elements.each do |child| if child.name == 'possibleLengths' hash[Core::POSSIBLE_PATTERN] = possible_length_regex(hash_from_xml(child, :attributes)) else hash[name2sym(child.name)] = str_clean(child.children.first) end end end hash end |
#main_from_xml(file) ⇒ Object
get main body from parsed xml document
112 113 114 115 116 117 118 |
# File 'lib/phonelib/data_importer_helper.rb', line 112 def main_from_xml(file) xml_data = File.read(file) xml_data.force_encoding('utf-8') doc = Nokogiri::XML(xml_data) doc.elements.first.elements.first end |
#name2sym(name) ⇒ Object
helper that converts xml element name to symbol
126 127 128 |
# File 'lib/phonelib/data_importer_helper.rb', line 126 def name2sym(name) camel2snake(name).to_sym end |
#not_format?(name) ⇒ Boolean
method for checking if element name is not a format element
52 53 54 |
# File 'lib/phonelib/data_importer_helper.rb', line 52 def not_format?(name) !XML_FORMAT_NAMES.include? name end |
#parse_raw_file(file) ⇒ Object
method parses raw data file
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/phonelib/data_importer_helper.rb', line 100 def parse_raw_file(file) data = {} File.readlines(file).each do |line| line = str_clean line, false next if line.empty? || line[0] == '#' prefix, line_data = line.split('|') data[prefix] = line_data && line_data.strip.split('&') end data end |
#possible_length_regex(attributes) ⇒ Object
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/phonelib/data_importer_helper.rb', line 88 def possible_length_regex(attributes) return '' unless attributes[:national] attributes[:national].split(',').map do |m| if m.include? '-' "\\d{#{m.gsub(/[\[\]]/, '').gsub('-', ',')}}" else "\\d{#{m}}" end end.join('|') end |
#save_data_file ⇒ Object
method saves parsed data to data files
16 17 18 19 20 |
# File 'lib/phonelib/data_importer_helper.rb', line 16 def save_data_file File.open(file_path(Phonelib::Core::FILE_MAIN_DATA), 'wb+') do |f| Marshal.dump(@data, f) end end |
#save_extended_data_file ⇒ Object
method saves extended data file
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/phonelib/data_importer_helper.rb', line 23 def save_extended_data_file extended = { Phonelib::Core::EXT_PREFIXES => @prefixes, Phonelib::Core::EXT_GEO_NAMES => @geo_names, Phonelib::Core::EXT_COUNTRY_NAMES => @countries, Phonelib::Core::EXT_TIMEZONES => @timezones, Phonelib::Core::EXT_CARRIERS => @carriers } File.open(file_path(Phonelib::Core::FILE_EXT_DATA), 'wb+') do |f| Marshal.dump(extended, f) end puts 'DATA SAVED' end |
#str_clean(s, white_space = true) ⇒ Object
helper that cleans string
121 122 123 |
# File 'lib/phonelib/data_importer_helper.rb', line 121 def str_clean(s, white_space = true) s.to_s.tr(white_space ? " \n" : "\n", '') end |
#without_comments(data) ⇒ Object
method filters xml elements excluding comments elements
57 58 59 60 61 |
# File 'lib/phonelib/data_importer_helper.rb', line 57 def without_comments(data) data.select do |el| !XML_COMMENT_ATTRIBUTES.include? el.name end end |