require “active_record” require “db_patch/migration” require “db_patch/patch_version”
namespace :db do
namespace :patch do desc "initialize database" task :init => :environment do if ActiveRecord::Base.connection.table_exists? "patch_versions" puts "patch_versions already exists." else DbPatch::Migration::CreatePatchVersions.new.up Dir.mkdir patch_root unless Dir.exists? patch_root end end desc "clear database" task :clear => :environment do DbPatch::Migration::CreatePatchVersions.down DbPatch::Migration::CreatePatchVersions.new.up end desc "create new patch file" task :new => :environment do patch_name = "#{patch_root}/#{Time.now.strftime("%Y%m%d%H%M%S")}.rb" File.open(patch_name, "w").close p patch_name end desc "execute patch" task :execute => :environment do patches = Dir.glob("#{patch_root}/*.rb") patches.each do |patch| basename = File.basename(patch, ".rb") next unless DbPatch::PatchVersion.find_by(version: basename).nil? # execute script load patch DbPatch::PatchVersion.create!( version: basename ) puts "#{basename}.rb executed." end end desc "show patch history" task :history => :environment do DbPatch::PatchVersion.all.each do |row| p "patch: #{row.version}.rb at #{row.updated_at}." end end def patch_root "#{Rails.root}/db/patch" end end
end