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.



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

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

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



33
34
35
# File 'lib/kamal_backup/databases/base.rb', line 33

def config
  @config
end

#redactorObject (readonly)

Returns the value of attribute redactor.



33
34
35
# File 'lib/kamal_backup/databases/base.rb', line 33

def redactor
  @redactor
end

Class Method Details

.build(config, redactor:) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/kamal_backup/databases/base.rb', line 20

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)


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

def adapter_name
  raise NotImplementedError
end

#backup(restic) ⇒ Object



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

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

#backup_tagsObject



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

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

#current_restore_commandObject

Raises:

  • (NotImplementedError)


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

def current_restore_command
  raise NotImplementedError
end

#current_target_identifierObject

Raises:

  • (NotImplementedError)


91
92
93
# File 'lib/kamal_backup/databases/base.rb', line 91

def current_target_identifier
  raise NotImplementedError
end

#database_filenameObject



57
58
59
60
61
# File 'lib/kamal_backup/databases/base.rb', line 57

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)


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

def dump_command
  raise NotImplementedError
end

#dump_extensionObject

Raises:

  • (NotImplementedError)


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

def dump_extension
  raise NotImplementedError
end

#restore_to_current(restic, snapshot, filename) ⇒ Object



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

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



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

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)


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

def scratch_restore_command(target)
  raise NotImplementedError
end

#scratch_target_identifier(target) ⇒ Object

Raises:

  • (NotImplementedError)


95
96
97
# File 'lib/kamal_backup/databases/base.rb', line 95

def scratch_target_identifier(target)
  raise NotImplementedError
end

#validate_scratch_restore_target(target) ⇒ Object



87
88
89
# File 'lib/kamal_backup/databases/base.rb', line 87

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