class Lite::Address::Regexp

Attributes

list[R]

Public Class Methods

new(list) click to toggle source
# File lib/lite/address/regexp.rb, line 9
def initialize(list)
  @list = list
end

Public Instance Methods

avoid_unit() click to toggle source
# File lib/lite/address/regexp.rb, line 13
def avoid_unit
  @avoid_unit ||= /(?:[^\#\w]+|\Z)/ix
end
cardinal_code() click to toggle source
# File lib/lite/address/regexp.rb, line 17
def cardinal_code
  @cardinal_code ||= begin
    values = list.cardinal_codes.keys
    ::Regexp.new(values.join('|'), ::Regexp::IGNORECASE)
  end
end
cardinal_type() click to toggle source
# File lib/lite/address/regexp.rb, line 24
def cardinal_type
  @cardinal_type ||= begin
    values = list.cardinal_types.each_with_object([]) do |(key, val), array|
      array << key
      array << [::Regexp.quote(val.gsub(/(\w)/, '\1.')), ::Regexp.quote(val)]
    end

    ::Regexp.new(values.join('|'), ::Regexp::IGNORECASE)
  end
end
city_state() click to toggle source
# File lib/lite/address/regexp.rb, line 35
def city_state
  @city_state ||= /(?:(?<city> [^\d,]+?)\W+(?<state> #{subdivision}))/ix
end
corner() click to toggle source
# File lib/lite/address/regexp.rb, line 39
def corner
  @corner ||= /(?:\band\b|\bat\b|&|@)/ix
end
formal_address() click to toggle source
# File lib/lite/address/regexp.rb, line 43
def formal_address
  @formal_address ||= /\A[^\w\x23]*
    #{number} \W*
    #{street}\W+
    (?:#{unit}\W+)?
    #{place}\W*\z
  /ix
end
informal_address() click to toggle source
# File lib/lite/address/regexp.rb, line 52
def informal_address
  @informal_address ||= /\A\s*
    (?:#{unit} #{separator} #{place})?
    (?:#{number})? \W*
    #{street} #{avoid_unit}
    (?:#{unit} #{separator})?
    (?:#{place})?
  /ix
end
intersectional_address() click to toggle source
# File lib/lite/address/regexp.rb, line 62
def intersectional_address
  @intersectional_address ||= /\A\W*
    #{street}\W*?
    \s+#{corner}\s+
    #{street}\W+
    #{place}\W*\z
  /ix
end
number() click to toggle source

rubocop:disable Lint/MixedRegexpCaptureTypes

# File lib/lite/address/regexp.rb, line 72
def number
  # Utah and Wisconsin have a more elaborate system of block numbering
  # http://en.wikipedia.org/wiki/House_number#Block_numbers
  @number ||= /(?<number>(n|s|e|w)?\d+[.-]?\d*)(?=\D)/ix
end
place() click to toggle source

rubocop:enable Lint/MixedRegexpCaptureTypes

# File lib/lite/address/regexp.rb, line 79
def place
  @place ||= /(?:#{city_state}\W*)? (?:#{postal_code})?/ix
end
postal_code() click to toggle source
# File lib/lite/address/regexp.rb, line 83
def postal_code
  @postal_code ||= /(?:(?<postal_code>\d{5})(?:-?(?<postal_code_ext>\d{4}))?)/ix
end
separator() click to toggle source
# File lib/lite/address/regexp.rb, line 87
def separator
  @separator ||= /(?:\W+|\Z)/ix
end
street() click to toggle source
# File lib/lite/address/regexp.rb, line 91
def street
  @street ||= /(?:
    (?:
      (?<street> #{cardinal_type})\W+
      (?<street_type> #{street_type})\b
    )
    | (?:(?<prefix> #{cardinal_type})\W+)?
    (?:
      (?<street> [^,]*\d)
      (?:[^\w,]* (?<suffix> #{cardinal_type})\b)
      |
      (?<street> [^,]+)
      (?:[^\w,]+(?<street_type> #{street_type})\b)
      (?:[^\w,]+(?<suffix> #{cardinal_type})\b)?
      |
      (?<street> [^,]+?)
      (?:[^\w,]+(?<street_type> #{street_type})\b)?
      (?:[^\w,]+(?<suffix> #{cardinal_type})\b)?
    )
  )/ix
end
street_type() click to toggle source
# File lib/lite/address/regexp.rb, line 113
def street_type
  @street_type ||= begin
    values = (list.street_types.keys + list.street_types.values).uniq
    ::Regexp.new(values.join('|'), ::Regexp::IGNORECASE)
  end
end
subdivision() click to toggle source
# File lib/lite/address/regexp.rb, line 120
def subdivision
  @subdivision ||= begin
    values = list.subdivision_codes.flatten.map { |code| ::Regexp.quote(code) }
    ::Regexp.new("\b#{values.join('|')}\b", ::Regexp::IGNORECASE)
  end
end
unit() click to toggle source
# File lib/lite/address/regexp.rb, line 127
def unit
  @unit ||= %r{
    (?:
      (?:
        (?:#{unit_numbered} \W*)
        | (?<unit_prefix> \#)\W*
      )
      (?<unit> [\w/-]+)
    ) | #{unit_unnumbered}
  }ix
end
unit_numbered() click to toggle source
# File lib/lite/address/regexp.rb, line 139
def unit_numbered
  @unit_numbered ||= begin
    values = list.unit_abbr_numbered_regexps.values
    /(?<unit_prefix>#{values.join('|')})(?![a-z])/ix
  end
end
unit_unnumbered() click to toggle source
# File lib/lite/address/regexp.rb, line 146
def unit_unnumbered
  @unit_unnumbered ||= begin
    values = list.unit_abbr_unnumbered_regexps.values
    /(?<unit_prefix>#{values.join('|')})\b/ix
  end
end