class Backhoe::MysqlSkipColumns::SanitizedDatabase

Public Instance Methods

dump() { |skip_tables| ... } click to toggle source
# File lib/backhoe/mysql.rb, line 50
def dump
  with_sanitized_tables do
    yield skip_tables
  end
  skip_tables.each do |table|
    File.write file_path, "RENAME TABLE `sanitized_#{table}` TO `#{table}`;", mode: "a"
  end
end

Private Instance Methods

skip_tables() click to toggle source
# File lib/backhoe/mysql.rb, line 61
def skip_tables
  config.keys
end
sql(queries) click to toggle source
# File lib/backhoe/mysql.rb, line 85
def sql queries
  queries.split(";").select(&:present?).each do |query|
    ActiveRecord::Base.connection.execute query
  end
end
with_sanitized_tables() { || ... } click to toggle source
# File lib/backhoe/mysql.rb, line 65
      def with_sanitized_tables
        ActiveRecord::Base.transaction do
          config.each do |table, columns|
            sanitized_table = "sanitized_#{table}"
            sql <<-SQL
              DROP TABLE IF EXISTS `#{sanitized_table}`;
              CREATE TABLE `#{sanitized_table}` LIKE `#{table}`;
              INSERT INTO `#{sanitized_table}` SELECT * FROM `#{table}`;
              ALTER TABLE `#{sanitized_table}` #{columns.map { |column| "DROP `#{column}`" }.join(", ")};
            SQL
          end

          yield

          config.each do |table, _|
            sql "DROP TABLE `sanitized_#{table}`"
          end
        end
      end