class PgObjects::Manager

Manages process to create objects

Usage:

Manager.new.load_files(:before).create_objects

or

Manager.new.load_files(:after).create_objects

Attributes

config[R]
log[R]
objects[R]

Public Class Methods

new() click to toggle source
# File lib/pg_objects/manager.rb, line 15
def initialize
  raise UnsupportedAdapterError if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL'

  @objects = []
  @config = PgObjects.config
  @log = Logger.new(silent: config.silent)
end

Public Instance Methods

create_objects() click to toggle source
# File lib/pg_objects/manager.rb, line 36
def create_objects
  @objects.each { |obj| create_object obj }
end
load_files(event) click to toggle source

event: :before or :after

used to reference configuration settings before_path and after_path

# File lib/pg_objects/manager.rb, line 27
def load_files(event)
  dir = config.send "#{event}_path"
  Dir[File.join(dir, '**', "*.{#{config.extensions.join(',')}}")].each do |path|
    @objects << PgObjects::DbObject.new(path)
  end

  self
end

Private Instance Methods

create_dependencies(dependencies) click to toggle source
# File lib/pg_objects/manager.rb, line 56
def create_dependencies(dependencies)
  dependencies.each { |dep_name| create_object find_object(dep_name) }
end
create_object(obj) click to toggle source
# File lib/pg_objects/manager.rb, line 42
def create_object(obj)
  return if obj.status == :done
  raise CyclicDependencyError, obj.name if obj.status == :processing

  obj.status = :processing

  create_dependencies(obj.dependencies)

  log.write("creating #{obj.name}")
  ActiveRecord::Base.connection.execute obj.sql_query

  obj.status = :done
end
find_object(dep_name) click to toggle source
# File lib/pg_objects/manager.rb, line 60
def find_object(dep_name)
  result = @objects.select { |obj| [obj.name, obj.full_name, obj.object_name].compact.include? dep_name }

  raise AmbiguousDependencyError, dep_name if result.size > 1
  raise DependencyNotExistError, dep_name if result.empty?

  result[0]
end