class AddressLineDivider::AddressParser
Public Class Methods
new()
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 5 def initialize @path = AddressLineDivider.configuration.streets_file_path end
Public Instance Methods
parse(address_line)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 9 def parse(address_line) street = search_street_on_file(address_line) result = [street, street_no(address_line, street)] if street result ||= parse_using_regex(address_line) return if invalid_result(address_line, result) result end
Private Instance Methods
invalid_result(address_line, result)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 32 def invalid_result(address_line, result) result.nil? || result.any? { |r| r.nil? || r.strip.empty? } || squish(result.join(" ")) != squish(address_line) end
last_number(address_line)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 38 def last_number(address_line) squish(address_line).split(" ").select do |substr| substr =~ /[[:digit:]]/ end.last end
parse_using_regex(address_line)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 21 def parse_using_regex(address_line) last_number = last_number(address_line) return unless last_number last_number_index = address_line.index(last_number) street_name = address_line[0..last_number_index - 1].strip street_no = address_line[last_number_index..-1].strip [street_name, street_no] end
search_street_on_file(address_line)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 48 def search_street_on_file(address_line) return false if @path.nil? IO.foreach(@path) do |street_name| street_name.chop! return street_name if Regexp.new(/^#{street_name}/).match?(address_line) end false end
squish(string)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 44 def squish(string) string.gsub(" ", " ").strip end
street_no(address_line, street)
click to toggle source
# File lib/address_line_divider/address_parser.rb, line 59 def street_no(address_line, street) address_line.gsub(street, "").strip end