class Prodder::Project
Constants
- SeedConfigFileMissing
Attributes
name[R]
workspace[R]
Public Class Methods
new(name, workspace, definition)
click to toggle source
# File lib/prodder/project.rb, line 19 def initialize(name, workspace, definition) @name = name @workspace = workspace @defn = definition end
Public Instance Methods
commit()
click to toggle source
# File lib/prodder/project.rb, line 61 def commit return unless git.dirty? git.add structure_file_name git.add seed_file_name git.add quality_check_file_name if separate_quality_checks? git.add permissions_file_name if dump_permissions? git.add settings_file_name git.commit "Auto-commit by prodder", @defn['git']['author'] end
db_credentials()
click to toggle source
# File lib/prodder/project.rb, line 84 def db_credentials @defn['db'] end
dump()
click to toggle source
# File lib/prodder/project.rb, line 29 def dump FileUtils.mkdir_p File.dirname(structure_file_name) pg.dump_structure db_credentials['name'], structure_file_name, exclude_tables: excluded_tables, exclude_schemas: excluded_schemas FileUtils.mkdir_p File.dirname(settings_file_name) pg.dump_settings db_credentials['name'], settings_file_name FileUtils.mkdir_p File.dirname(seed_file_name) pg.dump_tables db_credentials['name'], seed_tables, seed_file_name # must split the structure file to allow data to be loaded after tables # being created but before triggers and foreign keys are created. this # facilitates validation during loading, yet avoids extra overhead and # false errors if separate_quality_checks? contents = File.readlines(structure_file_name) rgx = /^\-\- .* Type: INDEX; |^\-\- .* Type: TRIGGER; |^\-\- .* Type: FK CONSTRAINT; / structure, *quality = contents.slice_before(rgx).to_a File.open(quality_check_file_name, 'w') { |f| f.write(quality.join) } File.open(structure_file_name, 'w') { |f| f.write(structure.join) } end if dump_permissions? FileUtils.mkdir_p File.dirname(permissions_file_name) pg.dump_permissions db_credentials['name'], permissions_file_name, included_users: included_users, exclude_tables: excluded_tables, exclude_schemas: excluded_schemas end end
dump_permissions?()
click to toggle source
# File lib/prodder/project.rb, line 124 def dump_permissions? @defn.key?('permissions') && permissions.key?('file') end
excluded_schemas()
click to toggle source
# File lib/prodder/project.rb, line 128 def excluded_schemas db_credentials['exclude_schemas'] || [] end
excluded_tables()
click to toggle source
# File lib/prodder/project.rb, line 132 def excluded_tables db_credentials['exclude_tables'] || [] end
git_origin()
click to toggle source
# File lib/prodder/project.rb, line 96 def git_origin @defn['git']['origin'] end
included_users()
click to toggle source
# File lib/prodder/project.rb, line 136 def included_users permissions['included_users'] || [] end
init()
click to toggle source
# File lib/prodder/project.rb, line 25 def init git.clone_or_remote_update end
local_git_path()
click to toggle source
# File lib/prodder/project.rb, line 92 def local_git_path workspace end
nothing_to_push?()
click to toggle source
# File lib/prodder/project.rb, line 79 def nothing_to_push? git.remote_update git.no_new_commits? end
permissions()
click to toggle source
# File lib/prodder/project.rb, line 88 def permissions @defn['permissions'] end
permissions_file_name()
click to toggle source
# File lib/prodder/project.rb, line 116 def permissions_file_name File.join workspace, permissions['file'] end
push()
click to toggle source
# File lib/prodder/project.rb, line 71 def push if git.fast_forward? git.push else raise Prodder::Git::NotFastForward.new(git_origin) end end
quality_check_file_name()
click to toggle source
# File lib/prodder/project.rb, line 112 def quality_check_file_name File.join workspace, @defn['quality_check_file'] end
seed_file_name()
click to toggle source
# File lib/prodder/project.rb, line 108 def seed_file_name File.join workspace, @defn['seed_file'] end
seed_tables()
click to toggle source
# File lib/prodder/project.rb, line 140 def seed_tables value = db_credentials['tables'] return value unless value.is_a?(String) path = File.join(workspace, value) raise SeedConfigFileMissing.new(File.join(name, value)) unless File.exist?(path) YAML.load IO.read(path) end
separate_quality_checks?()
click to toggle source
# File lib/prodder/project.rb, line 120 def separate_quality_checks? @defn.key? 'quality_check_file' end
settings_file_name()
click to toggle source
# File lib/prodder/project.rb, line 104 def settings_file_name File.join workspace, 'db/settings.sql' end
structure_file_name()
click to toggle source
# File lib/prodder/project.rb, line 100 def structure_file_name File.join workspace, @defn['structure_file'] end