lib/pg_objects/manager.rb in pg_objects-1.2.0 vs lib/pg_objects/manager.rb in pg_objects-1.2.1

- old
+ new

@@ -7,58 +7,60 @@ # # or # # Manager.new(config, logger).load_files(:after).create_objects class PgObjects::Manager - attr_reader :objects, :config + include Import['db_object_factory', 'config', 'logger'] - def initialize(config, logger) - raise PgObjects::UnsupportedAdapterError if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL' - - @objects = [] - @config = config - @log = logger.mute(config.silent) # Logger.new(silent: config.silent) - end - ## # event: +:before+ or +:after+ # # used to reference configuration settings +before_path+ and +after_path+ def load_files(event) + validate_workability + dir = config.send "#{event}_path" Dir[File.join(dir, '**', "*.{#{config.extensions.join(',')}}")].each do |path| - @objects << PgObjects::DbObject.new(path).create + objects << db_object_factory.create_instance(path) end self end def create_objects objects.each { create_object(_1) } end + def objects + @objects ||= [] + end + private + def validate_workability + raise PgObjects::UnsupportedAdapterError if ActiveRecord::Base.connection.adapter_name != 'PostgreSQL' + end + def create_object(obj) return if obj.status == :done raise PgObjects::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 + logger.write("creating #{obj.name}") + ActiveRecord::Base.connection.execute(obj.sql_query) obj.status = :done end def create_dependencies(dependencies) dependencies.each { |dep_name| create_object(find_object(dep_name)) } end def find_object(dep_name) - result = @objects.select { |obj| [obj.name, obj.full_name, obj.object_name].compact.include? dep_name } + result = objects.select { |obj| [obj.name, obj.full_name, obj.object_name].compact.include? dep_name } raise PgObjects::AmbiguousDependencyError, dep_name if result.size > 1 raise PgObjects::DependencyNotExistError, dep_name if result.empty? result[0]