class FiasReader::Cache::AddressPart

Constants

ZERO_STR

Public Class Methods

index(reader) click to toggle source
# File lib/fias_reader/cache/address_part.rb, line 50
def self.index(reader)
  attrs = properties.map(&:name)
  FiasReader::Table::AddressPart.new(reader).query.all do |row|
    next if row[:LIVESTATUS] == ZERO_STR
    begin
      params = FiasReader::Cache::Guid.new(row[:AOGUID]).to_attr(:id)
      params.merge! FiasReader::Cache::Guid.new(row[:PARENTGUID]).to_attr(:parent)
      params[:SHORTNAME] = row[:SHORTNAME]
      params[:OFFNAME] = row[:OFFNAME]
      params[:AOLEVEL] = row[:AOLEVEL]
      create params
    rescue DataObjects::IntegrityError => e
    end
  end
end
index_levels() click to toggle source
# File lib/fias_reader/cache/address_part.rb, line 66
def self.index_levels
  puts "Части 4..."
  index_levels_batch '4'
  puts "Части 6..."
  index_levels_batch '6'
  puts "Части 7..."
  index_levels_batch '7'
end
index_levels_batch(level) click to toggle source
# File lib/fias_reader/cache/address_part.rb, line 75
def self.index_levels_batch(level)
  start = -1
  i = 0

  while start != i
    start = i
    all(offset: i, limit: 1000, AOLEVEL: level).each do |item|
      i += 1
      puts Time.new if (i % 10_000).zero?
      item.parent_string
    end
  end
end

Public Instance Methods

levels() click to toggle source
# File lib/fias_reader/cache/address_part.rb, line 89
def levels
  @levels ||= FiasReader::Cache::AddressPart::LevelAdapter.new(self)
end
parent_string() click to toggle source
# File lib/fias_reader/cache/address_part.rb, line 93
def parent_string
  return levels if levels_filled

  if parent0.nil?
    levels.reset_own
  else
    # some bug with parent DataObjects::SyntaxError, so using first
    parent_item = FiasReader::Cache::AddressPart.first(id0: parent0, id1: parent1, id2: parent2, id3: parent3)

    if parent_item
      levels.copy(parent_item.parent_string)
    else
      levels.reset_own
    end
    save
  end

  levels
end