gzigzigzeo/pg_closure_tree_rebuild

View on GitHub
lib/pg_closure_tree_rebuild/runner.rb

Summary

Maintainability
A
35 mins
Test Coverage
module PgClosureTreeRebuild
  class Runner
    def initialize(db, table, hierarchies = nil, parent_id = 'parent_id', id = 'id')
      @db = db

      hierarchies ||= "#{table.singularize}_hierarchies"
      parent_id ||= 'parent_id'
      id ||= 'id'

      @scope = db[table.to_sym]
      hierarchies = hierarchies.to_sym

      @builder = PgClosureTreeRebuild::Builder.new(
        @scope,
        hierarchies.to_sym,
        id: id.to_sym,
        parent_id: parent_id.to_sym
      )
    end

    def run
      puts 'Calculating chains...'
      bar = ProgressBar.create(total: @builder.chains.size)

      puts "Records: #{@scope.count}"

      puts 'Importing...'
      @builder.rebuild(@db) { bar.increment }
    end
  end
end