class PgSeeder
Attributes
current_env[R]
root[R]
version[R]
Public Class Methods
new(current_env: Rails.env, version: Time.now.to_i.to_s, root: Rails.root)
click to toggle source
# File lib/pg_seeder.rb, line 9 def initialize(current_env: Rails.env, version: Time.now.to_i.to_s, root: Rails.root) @current_env = current_env @version = version @root = root @setups = [] @generates = [] end
Public Instance Methods
attachment_data_restorable?()
click to toggle source
# File lib/pg_seeder.rb, line 37 def attachment_data_restorable? directory.join("seed.tar.bz2").exist? end
cmd(line)
click to toggle source
# File lib/pg_seeder.rb, line 105 def cmd(line) unless system(line) raise CommandFailed, "command failed '#{line}'" end end
db_config()
click to toggle source
# File lib/pg_seeder.rb, line 111 def db_config ActiveRecord::Base.connection_config end
directory()
click to toggle source
# File lib/pg_seeder.rb, line 115 def directory directory = root.join("db/seed") ensure FileUtils.mkdir_p(directory) end
dump_restorable?()
click to toggle source
# File lib/pg_seeder.rb, line 33 def dump_restorable? directory.join("seed.pg_dump").exist? end
execute(with_dump: true, ignore_restore: false)
click to toggle source
# File lib/pg_seeder.rb, line 49 def execute(with_dump: true, ignore_restore: false) return restore if !ignore_restore && restorable? puts "\033[33;5;7m Generating seed data \033[0m" (@setups + @generates).each(&:call) store if with_dump end
generate(env: current_env, &block)
click to toggle source
# File lib/pg_seeder.rb, line 45 def generate(env: current_env, &block) @generates << block if [*env].include?(current_env) end
restorable?()
click to toggle source
# File lib/pg_seeder.rb, line 23 def restorable? version_match? && dump_restorable? && attachment_data_restorable? end
restore()
click to toggle source
# File lib/pg_seeder.rb, line 56 def restore puts "\033[33;5;7m Restoring \033[0m from db/seed.psql and attachment data from db/seed.tar.bz2" restore_dump restore_attachment_data end
restore_attachment_data()
click to toggle source
# File lib/pg_seeder.rb, line 75 def restore_attachment_data cmd "tar xjf '#{directory.join("seed.tar.bz2")}'" end
restore_dump()
click to toggle source
# File lib/pg_seeder.rb, line 62 def restore_dump cmd "pg_restore " + %W[ --username='#{db_config[:username]}' --host='#{db_config[:hostname]}' --clean --if-exists --jobs 4 --no-acl --dbname='#{db_config[:database]}' '#{directory.join("seed.pg_dump")}' ].join(" ") end
setup(env: current_env, &block)
click to toggle source
# File lib/pg_seeder.rb, line 41 def setup(env: current_env, &block) @setups << block if [*env].include?(current_env) end
store()
click to toggle source
# File lib/pg_seeder.rb, line 79 def store puts "\033[33;5;7m Storing \033[0m database to db/seed/seed.pg_dump and attachment data to db/seed/seed.tar.bz2" store_dump store_attachment_data puts "\033[33;5;7m Writing new seed version \033[0m #{version}" File.open(directory.join("SEED_VERSION"), "w") { |f| f.write(version) } end
store_attachment_data()
click to toggle source
# File lib/pg_seeder.rb, line 101 def store_attachment_data cmd "tar cjf '#{directory.join("seed.tar.bz2")}' public/system 2>&1" if root.join("public/system").exist? end
store_dump()
click to toggle source
# File lib/pg_seeder.rb, line 87 def store_dump cmd "pg_dump " + %W[ --username='#{db_config[:username]}' --host='#{db_config[:hostname]}' --clean --no-owner --no-acl --compress=9 --format=c '#{db_config[:database]}' > '#{directory.join("seed.pg_dump")}' ].join(" ") end
stored_version()
click to toggle source
# File lib/pg_seeder.rb, line 17 def stored_version File.read(directory.join("SEED_VERSION")).strip rescue nil end
version_match?()
click to toggle source
# File lib/pg_seeder.rb, line 29 def version_match? version == stored_version end