Class: KamalBackup::Databases::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/kamal_backup/databases/base.rb

Direct Known Subclasses

Mysql, Postgres, Sqlite

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config, redactor:) ⇒ Base

Returns a new instance of Base.



24
25
26
27
# File 'lib/kamal_backup/databases/base.rb', line 24

def initialize(config, redactor:)
  @config = config
  @redactor = redactor
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



22
23
24
# File 'lib/kamal_backup/databases/base.rb', line 22

def config
  @config
end

#redactorObject (readonly)

Returns the value of attribute redactor.



22
23
24
# File 'lib/kamal_backup/databases/base.rb', line 22

def redactor
  @redactor
end

Class Method Details

.build(config, redactor:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/kamal_backup/databases/base.rb', line 9

def self.build(config, redactor:)
  case config.database_adapter
  when 'postgres'
    Postgres.new(config, redactor: redactor)
  when 'mysql'
    Mysql.new(config, redactor: redactor)
  when 'sqlite'
    Sqlite.new(config, redactor: redactor)
  else
    raise ConfigurationError, "unsupported DATABASE_ADAPTER: #{config.database_adapter.inspect}"
  end
end

Instance Method Details

#adapter_nameObject

Raises:

  • (NotImplementedError)


56
57
58
# File 'lib/kamal_backup/databases/base.rb', line 56

def adapter_name
  raise NotImplementedError
end

#backup(restic) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/kamal_backup/databases/base.rb', line 29

def backup(restic)
  restic.backup_stream(
    dump_command,
    filename: database_filename,
    tags: backup_tags
  )
end

#backup_tagsObject



52
53
54
# File 'lib/kamal_backup/databases/base.rb', line 52

def backup_tags
  ['type:database', "database:#{config.database_name}", "adapter:#{adapter_name}"]
end

#current_restore_commandObject

Raises:

  • (NotImplementedError)


68
69
70
# File 'lib/kamal_backup/databases/base.rb', line 68

def current_restore_command
  raise NotImplementedError
end

#current_target_identifierObject

Raises:

  • (NotImplementedError)


80
81
82
# File 'lib/kamal_backup/databases/base.rb', line 80

def current_target_identifier
  raise NotImplementedError
end

#database_filenameObject



46
47
48
49
50
# File 'lib/kamal_backup/databases/base.rb', line 46

def database_filename
  app = config.app_name.gsub(/[^A-Za-z0-9_.-]+/, '-')
  database = config.database_name.gsub(/[^A-Za-z0-9_.-]+/, '-')
  "databases/#{app}/#{database}/#{adapter_name}.#{dump_extension}"
end

#dump_commandObject

Raises:

  • (NotImplementedError)


64
65
66
# File 'lib/kamal_backup/databases/base.rb', line 64

def dump_command
  raise NotImplementedError
end

#dump_extensionObject

Raises:

  • (NotImplementedError)


60
61
62
# File 'lib/kamal_backup/databases/base.rb', line 60

def dump_extension
  raise NotImplementedError
end

#restore_to_current(restic, snapshot, filename) ⇒ Object



37
38
39
# File 'lib/kamal_backup/databases/base.rb', line 37

def restore_to_current(restic, snapshot, filename)
  restic.pipe_dump_to_command(snapshot, filename, current_restore_command)
end

#restore_to_scratch(restic, snapshot, filename, target:) ⇒ Object



41
42
43
44
# File 'lib/kamal_backup/databases/base.rb', line 41

def restore_to_scratch(restic, snapshot, filename, target:)
  validate_scratch_restore_target(target)
  restic.pipe_dump_to_command(snapshot, filename, scratch_restore_command(target))
end

#scratch_restore_command(target) ⇒ Object

Raises:

  • (NotImplementedError)


72
73
74
# File 'lib/kamal_backup/databases/base.rb', line 72

def scratch_restore_command(target)
  raise NotImplementedError
end

#scratch_target_identifier(target) ⇒ Object

Raises:

  • (NotImplementedError)


84
85
86
# File 'lib/kamal_backup/databases/base.rb', line 84

def scratch_target_identifier(target)
  raise NotImplementedError
end

#validate_scratch_restore_target(target) ⇒ Object



76
77
78
# File 'lib/kamal_backup/databases/base.rb', line 76

def validate_scratch_restore_target(target)
  config.validate_database_restore_target(scratch_target_identifier(target))
end