pg_export 1.0.0.rc5 → 1.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
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,