pg_export 1.0.0.rc5 → 1.0.0.rc6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +19 -4
  3. data/CHANGELOG.md +7 -5
  4. data/README.md +46 -24
  5. data/bin/pg_export +27 -29
  6. data/lib/pg_export/configuration.rb +70 -18
  7. data/lib/pg_export/factory.rb +148 -0
  8. data/lib/pg_export/lib/pg_export/adapters/{bash_adapter.rb → shell_adapter.rb} +1 -1
  9. data/lib/pg_export/lib/pg_export/entities/dump.rb +22 -10
  10. data/lib/pg_export/lib/pg_export/factories/cipher_factory.rb +8 -4
  11. data/lib/pg_export/lib/pg_export/factories/dump_factory.rb +0 -1
  12. data/lib/pg_export/lib/pg_export/factories/ftp_gateway_factory.rb +7 -4
  13. data/lib/pg_export/lib/pg_export/factories/ssh_gateway_factory.rb +7 -4
  14. data/lib/pg_export/lib/pg_export/gateways/ftp.rb +1 -3
  15. data/lib/pg_export/lib/pg_export/gateways/ssh.rb +2 -6
  16. data/lib/pg_export/lib/pg_export/listeners/interactive/build_dump.rb +1 -1
  17. data/lib/pg_export/lib/pg_export/listeners/interactive/close_connection.rb +1 -1
  18. data/lib/pg_export/lib/pg_export/listeners/interactive/remove_old_dumps.rb +1 -1
  19. data/lib/pg_export/lib/pg_export/listeners/interactive/restore.rb +1 -1
  20. data/lib/pg_export/lib/pg_export/listeners/interactive/upload_dump.rb +1 -1
  21. data/lib/pg_export/lib/pg_export/listeners/interactive_listener.rb +4 -3
  22. data/lib/pg_export/lib/pg_export/listeners/plain/prepare_params.rb +1 -1
  23. data/lib/pg_export/lib/pg_export/listeners/plain_listener.rb +11 -5
  24. data/lib/pg_export/lib/pg_export/operations/decrypt_dump.rb +16 -6
  25. data/lib/pg_export/lib/pg_export/operations/encrypt_dump.rb +14 -5
  26. data/lib/pg_export/lib/pg_export/operations/open_connection.rb +14 -5
  27. data/lib/pg_export/lib/pg_export/operations/remove_old_dumps.rb +14 -6
  28. data/lib/pg_export/lib/pg_export/repositories/gateway_dump_file_repository.rb +0 -1
  29. data/lib/pg_export/lib/pg_export/repositories/gateway_dump_repository.rb +2 -7
  30. data/lib/pg_export/lib/pg_export/transactions/evaluator.rb +59 -0
  31. data/lib/pg_export/lib/pg_export/transactions/export_dump.rb +27 -21
  32. data/lib/pg_export/lib/pg_export/transactions/import_dump_interactively.rb +31 -29
  33. data/lib/pg_export/lib/pg_export/value_objects/dump_file.rb +2 -2
  34. data/lib/pg_export/lib/pg_export/value_objects/result.rb +49 -0
  35. data/lib/pg_export/version.rb +1 -1
  36. data/lib/pg_export.rb +13 -8
  37. data/pg_export.gemspec +1 -6
  38. metadata +13 -89
  39. data/lib/pg_export/container.rb +0 -23
  40. data/lib/pg_export/import.rb +0 -7
  41. data/lib/pg_export/lib/pg_export/types.rb +0 -14
  42. data/lib/pg_export/system/boot/config.rb +0 -27
  43. data/lib/pg_export/system/boot/ftp.rb +0 -11
  44. data/lib/pg_export/system/boot/interactive.rb +0 -16
  45. data/lib/pg_export/system/boot/operations.rb +0 -17
  46. data/lib/pg_export/system/boot/plain.rb +0 -16
  47. data/lib/pg_export/system/boot/ssh.rb +0 -11
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
3
  require 'pg_export/lib/pg_export/gateways/ftp'
6
- require 'pg_export/import'
7
4
 
8
5
  class PgExport
9
6
  module Factories
10
7
  class FtpGatewayFactory
11
- include Import['config']
8
+ def initialize(config:)
9
+ @config = config
10
+ end
12
11
 
13
12
  def gateway
14
13
  ::PgExport::Gateways::Ftp.new(
@@ -17,6 +16,10 @@ class PgExport
17
16
  password: config.gateway_password
18
17
  )
19
18
  end
19
+
20
+ private
21
+
22
+ attr_reader :config
20
23
  end
21
24
  end
22
25
  end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
3
  require 'pg_export/lib/pg_export/gateways/ssh'
6
- require 'pg_export/import'
7
4
 
8
5
  class PgExport
9
6
  module Factories
10
7
  class SshGatewayFactory
11
- include Import['config']
8
+ def initialize(config:)
9
+ @config = config
10
+ end
12
11
 
13
12
  def gateway
14
13
  ::PgExport::Gateways::Ssh.new(
@@ -17,6 +16,10 @@ class PgExport
17
16
  password: config.gateway_password
18
17
  )
19
18
  end
19
+
20
+ private
21
+
22
+ attr_reader :config
20
23
  end
21
24
  end
22
25
  end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
3
  require 'net/ftp'
6
4
 
7
5
  class PgExport
8
6
  module Gateways
9
7
  class Ftp
10
- CHUNK_SIZE = (2**16).freeze
8
+ CHUNK_SIZE = (2**16)
11
9
 
12
10
  def initialize(host:, user:, password:)
13
11
  @host, @user, @password, @logger = host, user, password
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
3
  require 'ed25519'
6
4
  require 'net/ssh'
7
5
  require 'net/scp'
@@ -9,8 +7,6 @@ require 'net/scp'
9
7
  class PgExport
10
8
  module Gateways
11
9
  class Ssh
12
- CHUNK_SIZE = (2**16).freeze
13
-
14
10
  def initialize(host:, user:, password:)
15
11
  @host, @user, @password, @logger = host, user, password
16
12
  end
@@ -25,7 +21,7 @@ class PgExport
25
21
  end
26
22
 
27
23
  def welcome
28
- open.exec!('hostname')
24
+ open.exec!('hostname; whoami')
29
25
  end
30
26
 
31
27
  def close
@@ -49,7 +45,7 @@ class PgExport
49
45
  end
50
46
 
51
47
  def delete(name)
52
- # @TODO
48
+ ssh.exec!("rm #{name}")
53
49
  end
54
50
 
55
51
  def persist(file, name)
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class BuildDump < InteractiveListener
9
9
  def on_step(event)
10
- @spinner = build_spinner("Dumping database #{event[:args].first[:database_name]}")
10
+ @spinner = build_spinner("Dumping database #{event[:value][:database_name]}")
11
11
  end
12
12
 
13
13
  def on_step_succeeded(event)
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class CloseConnection < InteractiveListener
9
9
  def on_step(*)
10
- @spinner = build_spinner('Closing FTP')
10
+ @spinner = build_spinner('Closing connection')
11
11
  end
12
12
 
13
13
  def on_step_succeeded(*)
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class RemoveOldDumps < InteractiveListener
9
9
  def on_step(event)
10
- @spinner = build_spinner("Checking for old dumps on #{event[:args].first[:gateway]}")
10
+ @spinner = build_spinner("Checking for old dumps on #{event[:value][:gateway]}")
11
11
  end
12
12
 
13
13
  def on_step_succeeded(event)
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class Restore < InteractiveListener
9
9
  def on_step(event)
10
- @spinner = build_spinner("Restoring dump to database #{event[:args].first[:database]}")
10
+ @spinner = build_spinner("Restoring dump to database #{event[:value][:database]}")
11
11
  end
12
12
 
13
13
  def on_step_succeeded(*)
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class UploadDump < InteractiveListener
9
9
  def on_step(event)
10
- @spinner = build_spinner("Uploading #{event[:args].first[:dump]} to #{event[:args].first[:gateway]}")
10
+ @spinner = build_spinner("Uploading #{event[:value][:dump]} to #{event[:value][:gateway]}")
11
11
  end
12
12
 
13
13
  def on_step_succeeded(*)
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
- require 'pg_export/import'
6
3
  require 'tty-spinner'
7
4
 
8
5
  class PgExport
9
6
  module Listeners
10
7
  class InteractiveListener
8
+ def on_step(*); end
9
+
10
+ def on_step_succeeded(*); end
11
+
11
12
  def on_step_failed(event)
12
13
  @spinner.error([error, self.class.red(event[:value][:message])].join("\n"))
13
14
  end
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Plain
8
8
  class PrepareParams < PlainListener
9
9
  def on_step_succeeded(event)
10
- logger.info("Init")
10
+ logger.info('Init')
11
11
  end
12
12
  end
13
13
  end
@@ -1,17 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
- require 'pg_export/import'
6
-
7
3
  class PgExport
8
4
  module Listeners
9
5
  class PlainListener
10
- include Import['logger']
6
+ def initialize(logger:)
7
+ @logger = logger
8
+ end
9
+
10
+ def on_step(*); end
11
+
12
+ def on_step_succeeded(*); end
11
13
 
12
14
  def on_step_failed(event)
13
15
  logger.info("Error: #{event[:value][:message]}")
14
16
  end
17
+
18
+ private
19
+
20
+ attr_reader :logger
15
21
  end
16
22
  end
17
23
  end
@@ -1,20 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/transaction/operation'
4
- require 'pg_export/import'
3
+ require 'pg_export'
4
+ require 'pg_export/lib/pg_export/value_objects/result'
5
5
 
6
6
  class PgExport
7
7
  module Operations
8
8
  class DecryptDump
9
- include Dry::Transaction::Operation
10
- include Import['factories.cipher_factory']
9
+ def initialize(cipher_factory:)
10
+ @cipher_factory = cipher_factory
11
+ end
12
+
13
+ def name
14
+ :decrypt_dump
15
+ end
11
16
 
12
17
  def call(dump:)
13
18
  dump.decrypt(cipher_factory: cipher_factory)
14
- Success(dump: dump)
19
+
20
+ ValueObjects::Success.new(dump: dump)
15
21
  rescue OpenSSL::Cipher::CipherError => e
16
- Failure(message: "Problem decrypting dump file: #{e}. Try again.")
22
+ ValueObjects::Failure.new(message: "Problem decrypting dump file: #{e}. Try again.")
17
23
  end
24
+
25
+ private
26
+
27
+ attr_reader :cipher_factory
18
28
  end
19
29
  end
20
30
  end
@@ -1,18 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/transaction/operation'
4
- require 'pg_export/import'
3
+ require 'pg_export/lib/pg_export/value_objects/result'
5
4
 
6
5
  class PgExport
7
6
  module Operations
8
7
  class EncryptDump
9
- include Dry::Transaction::Operation
10
- include Import['factories.cipher_factory']
8
+ def initialize(cipher_factory:)
9
+ @cipher_factory = cipher_factory
10
+ end
11
+
12
+ def name
13
+ :encrypt_dump
14
+ end
11
15
 
12
16
  def call(dump:)
13
17
  dump.encrypt(cipher_factory: cipher_factory)
14
- Success(dump: dump)
18
+
19
+ ValueObjects::Success.new(dump: dump)
15
20
  end
21
+
22
+ private
23
+
24
+ attr_reader :cipher_factory
16
25
  end
17
26
  end
18
27
  end
@@ -1,19 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/transaction/operation'
4
- require 'pg_export/import'
3
+ require 'pg_export/lib/pg_export/value_objects/result'
5
4
 
6
5
  class PgExport
7
6
  module Operations
8
7
  class OpenConnection
9
- include Dry::Transaction::Operation
10
- include Import['factories.gateway_factory']
8
+ def initialize(gateway_factory:)
9
+ @gateway_factory = gateway_factory
10
+ end
11
+
12
+ def name
13
+ :open_connection
14
+ end
11
15
 
12
16
  def call(inputs)
13
17
  gateway = gateway_factory.gateway
14
18
  gateway.open
15
- Success(inputs.merge(gateway: gateway))
19
+
20
+ ValueObjects::Success.new(inputs.merge(gateway: gateway))
16
21
  end
22
+
23
+ private
24
+
25
+ attr_reader :gateway_factory
17
26
  end
18
27
  end
19
28
  end
@@ -1,26 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/transaction/operation'
4
- require 'pg_export/import'
3
+ require 'pg_export/lib/pg_export/value_objects/result'
5
4
 
6
5
  class PgExport
7
6
  module Operations
8
7
  class RemoveOldDumps
9
- include Dry::Transaction::Operation
10
- include Import['repositories.gateway_dump_repository', 'config']
8
+ def initialize(gateway_dump_repository:, keep:)
9
+ @gateway_dump_repository, @keep = gateway_dump_repository, keep
10
+ end
11
+
12
+ def name
13
+ :remove_old_dumps
14
+ end
11
15
 
12
16
  def call(dump:, gateway:)
13
17
  dumps = gateway_dump_repository.by_database_name(
14
18
  database_name: dump.database,
15
19
  gateway: gateway,
16
- offset: config.keep_dumps
20
+ offset: keep
17
21
  )
18
22
  dumps.each do |d|
19
23
  gateway.delete(d.name)
20
24
  end
21
25
 
22
- Success(removed_dumps: dumps, gateway: gateway)
26
+ ValueObjects::Success.new(removed_dumps: dumps, gateway: gateway)
23
27
  end
28
+
29
+ private
30
+
31
+ attr_reader :gateway_dump_repository, :keep
24
32
  end
25
33
  end
26
34
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open3'
4
- require 'pg_export/import'
5
4
  require 'pg_export/lib/pg_export/entities/dump'
6
5
  require 'pg_export/lib/pg_export/value_objects/dump_file'
7
6
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open3'
4
- require 'pg_export/import'
5
4
  require 'pg_export/lib/pg_export/entities/dump'
6
5
  require 'pg_export/lib/pg_export/value_objects/dump_file'
7
6
 
@@ -10,11 +9,7 @@ class PgExport
10
9
  class GatewayDumpRepository
11
10
  def all(database_name:, gateway:)
12
11
  gateway.list(database_name).map do |item|
13
- begin
14
- dump(item[:name], database_name, item[:size])
15
- rescue Dry::Types::ConstraintError
16
- nil
17
- end
12
+ dump(item[:name], database_name, item[:size])
18
13
  end.compact
19
14
  end
20
15
 
@@ -22,7 +17,7 @@ class PgExport
22
17
  gateway.list(database_name).drop(offset).map do |item|
23
18
  begin
24
19
  dump(item[:name], database_name, item[:size])
25
- rescue Dry::Types::ConstraintError
20
+ rescue ArgumentError
26
21
  nil
27
22
  end
28
23
  end.compact
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PgExport
4
+ module Transactions
5
+ class Evaluator
6
+ def initialize(listeners)
7
+ @operations = []
8
+ @listeners = listeners
9
+ end
10
+
11
+ def <<(operation)
12
+ operations << operation
13
+ end
14
+
15
+ def call(input)
16
+ result = ValueObjects::Success.new(input)
17
+
18
+ operations.each do |operation|
19
+ result = result.bind do
20
+ call_operation(operation, result)
21
+ end
22
+ end
23
+
24
+ result
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :operations, :listeners
30
+
31
+ def call_operation(operation, input)
32
+ listener = listeners[operation.name]
33
+
34
+ before_call(listener, input)
35
+ result = operation.call(**input.value)
36
+ after_call(listener, result)
37
+ result
38
+ end
39
+
40
+ def before_call(listener, input)
41
+ return if listener.nil?
42
+
43
+ listener.on_step(value: input.value)
44
+ end
45
+
46
+ def after_call(listener, result)
47
+ return if listener.nil?
48
+
49
+ result.on_success do
50
+ listener.on_step_succeeded(value: result.value)
51
+ end
52
+
53
+ result.on_failure do
54
+ listener.on_step_failed(value: result.value)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,35 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
- require 'dry/transaction'
6
-
7
- require 'pg_export/import'
8
- require 'pg_export/container'
3
+ require 'pg_export/lib/pg_export/transactions/evaluator'
9
4
  require 'pg_export/lib/pg_export/value_objects/dump_file'
5
+ require 'pg_export/lib/pg_export/value_objects/result'
10
6
 
11
7
  class PgExport
12
8
  module Transactions
13
9
  class ExportDump
14
- include Dry::Transaction(container: PgExport::Container)
15
- include Import['factories.dump_factory', 'adapters.bash_adapter']
10
+ def initialize(dump_factory:, bash_adapter:, encrypt_dump:, open_connection:, remove_old_dumps:, listeners:)
11
+ @dump_factory = dump_factory
12
+ @bash_adapter = bash_adapter
13
+
14
+ @evaluator = Evaluator.new(listeners)
15
+ @evaluator << method(:prepare_params)
16
+ @evaluator << method(:build_dump)
17
+ @evaluator << encrypt_dump
18
+ @evaluator << open_connection
19
+ @evaluator << method(:upload_dump)
20
+ @evaluator << remove_old_dumps
21
+ @evaluator << method(:close_connection)
22
+ end
16
23
 
17
- step :prepare_params
18
- step :build_dump
19
- step :encrypt_dump, with: 'operations.encrypt_dump'
20
- step :open_connection, with: 'operations.open_connection'
21
- step :upload_dump
22
- step :remove_old_dumps, with: 'operations.remove_old_dumps'
23
- step :close_connection
24
+ def call(input)
25
+ evaluator.call(input)
26
+ end
24
27
 
25
28
  private
26
29
 
30
+ attr_reader :evaluator, :dump_factory, :bash_adapter
31
+
32
+
27
33
  def prepare_params(database_name:)
28
34
  database_name = database_name.to_s
29
35
 
30
- return Failure(message: 'Invalid database name') if database_name.empty?
36
+ return ValueObjects::Failure.new(message: 'Invalid database name') if database_name.empty?
31
37
 
32
- Success(database_name: database_name)
38
+ ValueObjects::Success.new(database_name: database_name)
33
39
  end
34
40
 
35
41
  def build_dump(database_name:)
@@ -37,19 +43,19 @@ class PgExport
37
43
  database: database_name,
38
44
  file: bash_adapter.pg_dump(ValueObjects::DumpFile.new, database_name)
39
45
  )
40
- Success(dump: dump)
46
+ ValueObjects::Success.new(dump: dump)
41
47
  rescue bash_adapter.class::PgDumpError => e
42
- Failure(message: 'Unable to dump database: ' + e.to_s)
48
+ ValueObjects::Failure.new(message: 'Unable to dump database: ' + e.to_s)
43
49
  end
44
50
 
45
51
  def upload_dump(dump:, gateway:)
46
52
  gateway.persist(dump.file, dump.name)
47
- Success(dump: dump, gateway: gateway)
53
+ ValueObjects::Success.new(dump: dump, gateway: gateway)
48
54
  end
49
55
 
50
56
  def close_connection(removed_dumps:, gateway:)
51
57
  gateway.close
52
- Success(gateway: gateway)
58
+ ValueObjects::Success.new(gateway: gateway)
53
59
  end
54
60
  end
55
61
  end
@@ -1,66 +1,68 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # auto_register: false
4
-
5
- require 'dry/transaction'
6
-
7
- require 'pg_export/import'
8
- require 'pg_export/container'
3
+ require 'pg_export/lib/pg_export/transactions/evaluator'
4
+ require 'pg_export/lib/pg_export/value_objects/result'
9
5
 
10
6
  class PgExport
11
7
  module Transactions
12
8
  class ImportDumpInteractively
13
- include Dry::Transaction(container: PgExport::Container)
14
- include Import[
15
- 'ui.interactive.input',
16
- 'adapters.bash_adapter',
17
- 'repositories.gateway_dump_repository',
18
- 'repositories.gateway_dump_file_repository'
19
- ]
9
+ def initialize(input:, bash_adapter:, gateway_dump_repository:, gateway_dump_file_repository:, open_connection:, decrypt_dump:, listeners:)
10
+ @input = input
11
+ @bash_adapter = bash_adapter
12
+ @gateway_dump_repository = gateway_dump_repository
13
+ @gateway_dump_file_repository = gateway_dump_file_repository
14
+
15
+ @evaluator = Evaluator.new(listeners)
16
+ @evaluator << open_connection
17
+ @evaluator << method(:fetch_dumps)
18
+ @evaluator << method(:select_dump)
19
+ @evaluator << method(:download_dump)
20
+ @evaluator << method(:close_connection)
21
+ @evaluator << decrypt_dump
22
+ @evaluator << method(:select_database)
23
+ @evaluator << method(:restore)
24
+ end
20
25
 
21
- step :open_connection, with: 'operations.open_connection'
22
- step :fetch_dumps
23
- step :select_dump
24
- step :download_dump
25
- step :close_connection
26
- step :decrypt_dump, with: 'operations.decrypt_dump'
27
- step :select_database
28
- step :restore
26
+ def call(input)
27
+ evaluator.call(input)
28
+ end
29
29
 
30
30
  private
31
31
 
32
+ attr_reader :evaluator, :input, :bash_adapter, :gateway_dump_repository, :gateway_dump_file_repository
33
+
32
34
  def fetch_dumps(database_name:, gateway:)
33
35
  dumps = gateway_dump_repository.all(database_name: database_name, gateway: gateway)
34
- return Failure(message: 'No dumps') if dumps.none?
36
+ return ValueObjects::Failure.new(message: 'No dumps') if dumps.none?
35
37
 
36
- Success(gateway: gateway, dumps: dumps)
38
+ ValueObjects::Success.new(gateway: gateway, dumps: dumps)
37
39
  end
38
40
 
39
41
  def select_dump(dumps:, gateway:)
40
42
  dump = input.select_dump(dumps)
41
- Success(dump: dump, gateway: gateway)
43
+ ValueObjects::Success.new(dump: dump, gateway: gateway)
42
44
  end
43
45
 
44
46
  def download_dump(dump:, gateway:)
45
47
  dump.file = gateway_dump_file_repository.by_name(name: dump.name, gateway: gateway)
46
- Success(dump: dump, gateway: gateway)
48
+ ValueObjects::Success.new(dump: dump, gateway: gateway)
47
49
  end
48
50
 
49
51
  def close_connection(dump:, gateway:)
50
52
  Thread.new { gateway.close }
51
- Success(dump: dump)
53
+ ValueObjects::Success.new(dump: dump)
52
54
  end
53
55
 
54
56
  def select_database(dump:)
55
57
  name = input.enter_database_name(dump.database)
56
- Success(dump: dump, database: name)
58
+ ValueObjects::Success.new(dump: dump, database: name)
57
59
  end
58
60
 
59
61
  def restore(dump:, database:)
60
62
  bash_adapter.pg_restore(dump.file, database)
61
- Success({})
63
+ ValueObjects::Success.new({})
62
64
  rescue bash_adapter.class::PgRestoreError => e
63
- Failure(message: e.to_s)
65
+ ValueObjects::Failure.new(message: e.to_s)
64
66
  end
65
67
  end
66
68
  end
@@ -54,9 +54,9 @@ class PgExport
54
54
 
55
55
  private
56
56
 
57
- CHUNK_SIZE = (2**16).freeze
57
+ CHUNK_SIZE = (2**16)
58
58
  MAPPING = {
59
- 'B' => 1024,
59
+ 'B' => 1024,
60
60
  'kB' => 1024 * 1024,
61
61
  'MB' => 1024 * 1024 * 1024,
62
62
  'GB' => 1024 * 1024 * 1024 * 1024,