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