class DbCompile::Transaction
Encapsulates entire transaction and dependency checking
Public Class Methods
new(path)
click to toggle source
# File lib/dbcompile/transaction.rb, line 11 def initialize(path) @path = path @run_queue = [] @deps_queue = [] @manifest = YAML::load_file(File.join(path, 'compile.yml')) @manifest.each{ |construct_name, data| if data data.each{ |object_name, dependencies| install_dependencies(construct_name, object_name) } end } end
Public Instance Methods
build_contruct(construct_name, object_name)
click to toggle source
# File lib/dbcompile/transaction.rb, line 46 def build_contruct(construct_name, object_name) klass = "DbCompile::#{construct_name.singularize.camelize}".constantize klass.new(object_name, @path) end
execute()
click to toggle source
# File lib/dbcompile/transaction.rb, line 51 def execute @run_queue.each{ |construct_name, object_name| construct = build_contruct(construct_name, object_name) msg = "Compiling #{construct.path}" puts msg ActiveRecord::Base.logger.info msg construct.execute } end
install_dependencies(construct_name, object_name)
click to toggle source
# File lib/dbcompile/transaction.rb, line 26 def install_dependencies(construct_name, object_name) if @deps_queue.include? [construct_name, object_name] raise CircularDependenciesException.new( "Dependency of #{construct_name} #{object_name} referenced it as a dependency!") end @deps_queue << [construct_name, object_name] if not @run_queue.include? [construct_name, object_name] dependencies = @manifest[construct_name][object_name] if dependencies dependencies.each{ |dep_construct_name, name_list| name_list.each{ |dep_object_name| install_dependencies(dep_construct_name, dep_object_name) } } end @run_queue << [construct_name, object_name] end @deps_queue.pop end
verify()
click to toggle source
# File lib/dbcompile/transaction.rb, line 61 def verify msg = "Verifying compilation" puts msg ActiveRecord::Base.logger.info msg no_errors = true @run_queue.each{ |construct_name, object_name| construct = build_contruct(construct_name, object_name) case construct.verify when nil msg = "#{construct_name.capitalize} #{object_name} could not be verified." when true msg = "#{construct_name.capitalize} #{object_name} successfully created." when false msg = "#{construct_name.capitalize} #{object_name} creation failed." no_errors = false end puts msg ActiveRecord::Base.logger.info msg } return no_errors end