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