class ActiveRecord::Snapshot::Import

Attributes

snapshot[R]
tables[R]
version[R]

Public Class Methods

call(*args) click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 4
def self.call(*args)
  new(*args).call
end
new(version: nil, tables: []) click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 8
def initialize(version: nil, tables: [])
  @version = version
  if named_version?
    name = version
  else
    @version, name = SelectSnapshot.call(version)
  end
  @snapshot = Snapshot.new(name)
  @tables = tables
end

Public Instance Methods

call() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 19
def call
  Stepper.call(self, **steps)
end

Private Instance Methods

config() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 27
def config
  ActiveRecord::Snapshot.config
end
decompress() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 71
def decompress
  Bzip2.decompress(snapshot.compressed)
end
decrypt() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 64
def decrypt
  OpenSSL.decrypt(
    input: snapshot.encrypted,
    output: snapshot.compressed
  ) && FileUtils.rm(snapshot.encrypted)
end
download() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 60
def download
  snapshot.download
end
filter_tables() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 80
def filter_tables
  FilterTables.call(tables: tables, sql_dump: snapshot.dump)
end
import() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 84
def import
  config.adapter.import(input: snapshot.dump)
  Rake::Task["db:schema:dump"].invoke
end
named_version?() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 31
def named_version?
  !version.blank? && version.to_i.to_s != version.to_s
end
reset_database() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 75
def reset_database
  Rake::Task["db:drop"].invoke
  Rake::Task["db:create"].invoke
end
save() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 93
def save
  Version.write(version)
end
set_env() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 89
def set_env
  Rake::Task["db:environment:set"].invoke
end
steps() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 39
def steps
  steps = {}
  unless version_downloaded?
    steps[:download] = "Download snapshot to #{snapshot.encrypted}"
    steps[:decrypt] = "Decrypt snapshot to #{snapshot.compressed}"
    steps[:decompress] = "Decompress snapshot to #{snapshot.dump}"
  end

  if tables.empty?
    steps[:reset_database] = "Reset database"
  else
    steps[:filter_tables] = "Filter tables"
  end

  steps[:import] = "Importing the snapshot into #{config.db.database}"
  steps[:save] = "Caching the new snapshot version" unless named_version? || tables.present?
  steps[:set_env] = "Setting database environment to #{Rails.env}" if Rails::VERSION::MAJOR >= 5

  steps
end
version_downloaded?() click to toggle source
# File lib/active_record/snapshot/actions/import.rb, line 35
def version_downloaded?
  version.to_i == Version.current && File.file?(snapshot.dump)
end