pg_export 1.0.0.rc3 → 1.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +19 -4
  3. data/CHANGELOG.md +7 -4
  4. data/README.md +46 -24
  5. data/bin/pg_export +55 -47
  6. data/lib/pg_export/configuration.rb +69 -21
  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 +12 -11
  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 +8 -11
  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/{download_dump_from_ftp.rb → download_dump.rb} +1 -1
  19. data/lib/pg_export/lib/pg_export/listeners/interactive/{fetch_dumps_from_ftp.rb → fetch_dumps.rb} +1 -1
  20. data/lib/pg_export/lib/pg_export/listeners/interactive/open_connection.rb +1 -1
  21. data/lib/pg_export/lib/pg_export/listeners/interactive/{remove_old_dumps_from_ftp.rb → remove_old_dumps.rb} +2 -2
  22. data/lib/pg_export/lib/pg_export/listeners/interactive/restore.rb +1 -1
  23. data/lib/pg_export/lib/pg_export/listeners/interactive/select_database.rb +12 -0
  24. data/lib/pg_export/lib/pg_export/listeners/interactive/select_dump.rb +12 -0
  25. data/lib/pg_export/lib/pg_export/listeners/interactive/{upload_dump_to_ftp.rb → upload_dump.rb} +2 -2
  26. data/lib/pg_export/lib/pg_export/listeners/interactive_listener.rb +4 -3
  27. data/lib/pg_export/lib/pg_export/listeners/plain/{download_dump_from_ftp.rb → download_dump.rb} +1 -1
  28. data/lib/pg_export/lib/pg_export/listeners/plain/{fetch_dumps_from_ftp.rb → fetch_dumps.rb} +1 -1
  29. data/lib/pg_export/lib/pg_export/listeners/plain/prepare_params.rb +15 -0
  30. data/lib/pg_export/lib/pg_export/listeners/plain/{remove_old_dumps_from_ftp.rb → remove_old_dumps.rb} +1 -1
  31. data/lib/pg_export/lib/pg_export/listeners/plain/{upload_dump_to_ftp.rb → upload_dump.rb} +1 -1
  32. data/lib/pg_export/lib/pg_export/listeners/plain_listener.rb +11 -5
  33. data/lib/pg_export/lib/pg_export/operations/decrypt_dump.rb +16 -6
  34. data/lib/pg_export/lib/pg_export/operations/encrypt_dump.rb +14 -5
  35. data/lib/pg_export/lib/pg_export/operations/open_connection.rb +14 -5
  36. data/lib/pg_export/lib/pg_export/operations/remove_old_dumps.rb +34 -0
  37. data/lib/pg_export/lib/pg_export/repositories/gateway_dump_file_repository.rb +0 -1
  38. data/lib/pg_export/lib/pg_export/repositories/gateway_dump_repository.rb +2 -7
  39. data/lib/pg_export/lib/pg_export/transactions/evaluator.rb +59 -0
  40. data/lib/pg_export/lib/pg_export/transactions/export_dump.rb +28 -22
  41. data/lib/pg_export/lib/pg_export/transactions/import_dump_interactively.rb +35 -33
  42. data/lib/pg_export/lib/pg_export/value_objects/dump_file.rb +2 -2
  43. data/lib/pg_export/lib/pg_export/value_objects/result.rb +49 -0
  44. data/lib/pg_export/version.rb +1 -1
  45. data/lib/pg_export.rb +12 -15
  46. data/pg_export.gemspec +2 -7
  47. metadata +27 -99
  48. data/lib/pg_export/build_logger.rb +0 -21
  49. data/lib/pg_export/container.rb +0 -57
  50. data/lib/pg_export/import.rb +0 -7
  51. data/lib/pg_export/lib/pg_export/operations/remove_old_dumps_from_ftp.rb +0 -26
  52. data/lib/pg_export/lib/pg_export/types.rb +0 -14
  53. data/lib/pg_export/system/boot/config.rb +0 -11
  54. data/lib/pg_export/system/boot/interactive.rb +0 -32
  55. data/lib/pg_export/system/boot/logger.rb +0 -15
  56. data/lib/pg_export/system/boot/plain.rb +0 -33
@@ -1,17 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry-initializer'
4
- require 'pg_export/lib/pg_export/types'
5
-
6
3
  class PgExport
7
4
  module Entities
8
5
  class Dump
9
- extend Dry::Initializer[undefined: false]
6
+ attr_reader :name, :type, :database, :file
7
+
8
+ def initialize(name: nil, type: nil, database: nil, file: nil)
9
+ @name = String(name)
10
+ raise ArgumentError, 'Dump name must not be empty' if @name.empty?
11
+ raise ArgumentError, 'Dump name does not match criteria' unless /.+_20[0-9]{6}_[0-9]{6}\Z/.match?(@name)
10
12
 
11
- option :name, Types::DumpName
12
- option :type, Types::DumpType
13
- option :database, Types::Strict::String.constrained(filled: true)
14
- option :file, Types::DumpFile, default: proc { PgExport::ValueObjects::DumpFile.new }
13
+ @type = String(type)
14
+ @type = 'plain' if @type.empty?
15
+ raise ArgumentError, 'Dump type must be one of: plain, encrypted' unless %w[plain encrypted].include?(@type)
16
+
17
+ @database = database
18
+
19
+ @file = file
20
+ @file = ValueObjects::DumpFile.new if @file.nil?
21
+ raise ArgumentError, "Invalid file type: #{@file.class}" unless @file.is_a?(ValueObjects::DumpFile)
22
+ end
15
23
 
16
24
  def encrypt(cipher_factory:)
17
25
  self.file = file.copy(cipher: cipher_factory.encryptor)
@@ -32,13 +40,17 @@ class PgExport
32
40
  end
33
41
 
34
42
  def file=(f)
35
- @file = Types::DumpFile[f]
43
+ @file = f
44
+
45
+ raise ArgumentError, "Invalid file type: '#{f}'" unless @file.is_a?(ValueObjects::DumpFile)
36
46
  end
37
47
 
38
48
  protected
39
49
 
40
50
  def type=(t)
41
- @type = Types::DumpType[t]
51
+ @type = t.to_s
52
+
53
+ raise ArgumentError, "Dump type '#{t}' must be one of: plain, encrypted" unless %w[plain encrypted].include?(@type)
42
54
  end
43
55
  end
44
56
  end
@@ -1,31 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'openssl'
4
- require 'pg_export/import'
5
4
 
6
5
  class PgExport
7
6
  module Factories
8
7
  class CipherFactory
9
- include Import['config']
8
+ def initialize(encryption_algorithm:, encryption_key:)
9
+ @encryption_algorithm = encryption_algorithm
10
+ @encryption_key = encryption_key
11
+ end
10
12
 
11
13
  def encryptor
12
- cipher(:encrypt)
14
+ build_cipher(:encrypt)
13
15
  end
14
16
 
15
17
  def decryptor
16
- cipher(:decrypt)
18
+ build_cipher(:decrypt)
17
19
  end
18
20
 
19
21
  private
20
22
 
21
- ALGORITHM = 'AES-128-CBC'
22
- private_constant :ALGORITHM
23
+ attr_reader :encryption_algorithm, :encryption_key
23
24
 
24
- def cipher(type)
25
- OpenSSL::Cipher.new(ALGORITHM).tap do |cipher|
26
- cipher.public_send(type)
27
- cipher.key = config.dump_encryption_key
28
- end
25
+ def build_cipher(type)
26
+ cipher = OpenSSL::Cipher.new(encryption_algorithm)
27
+ cipher.public_send(type)
28
+ cipher.key = encryption_key
29
+ cipher
29
30
  end
30
31
  end
31
32
  end
@@ -4,7 +4,6 @@ require 'open3'
4
4
  require 'tempfile'
5
5
 
6
6
  require 'pg_export/lib/pg_export/entities/dump'
7
- require 'pg_export/import'
8
7
 
9
8
  class PgExport
10
9
  module Factories
@@ -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,22 +7,21 @@ 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
17
13
 
18
14
  def open
19
- if password.nil?
20
- @ssh = Net::SSH.start(host, user)
21
- else
22
- @ssh = Net::SSH.start(host, user, password)
23
- end
15
+ @ssh =
16
+ if password.nil?
17
+ Net::SSH.start(host, user)
18
+ else
19
+ Net::SSH.start(host, user, password)
20
+ end
24
21
  end
25
22
 
26
23
  def welcome
27
- open.exec!('hostname')
24
+ open.exec!('hostname; whoami')
28
25
  end
29
26
 
30
27
  def close
@@ -48,7 +45,7 @@ class PgExport
48
45
  end
49
46
 
50
47
  def delete(name)
51
- # @TODO
48
+ ssh.exec!("rm #{name}")
52
49
  end
53
50
 
54
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(*)
@@ -5,7 +5,7 @@ require_relative '../interactive_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Interactive
8
- class DownloadDumpFromFtp < InteractiveListener
8
+ class DownloadDump < InteractiveListener
9
9
  def on_step(*)
10
10
  @spinner = build_spinner('Downloading')
11
11
  end
@@ -5,7 +5,7 @@ require_relative '../interactive_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Interactive
8
- class FetchDumpsFromFtp < InteractiveListener
8
+ class FetchDumps < InteractiveListener
9
9
  def on_step(*)
10
10
  @spinner = build_spinner('Fetching dumps')
11
11
  end
@@ -7,7 +7,7 @@ class PgExport
7
7
  class Interactive
8
8
  class OpenConnection < InteractiveListener
9
9
  def on_step(*)
10
- @spinner = build_spinner('Opening ftp connection')
10
+ @spinner = build_spinner('Opening connection')
11
11
  end
12
12
 
13
13
  def on_step_succeeded(*)
@@ -5,9 +5,9 @@ require_relative '../interactive_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Interactive
8
- class RemoveOldDumpsFromFtp < InteractiveListener
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(*)
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../interactive_listener'
4
+
5
+ class PgExport
6
+ module Listeners
7
+ class Interactive
8
+ class SelectDatabase < InteractiveListener
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../interactive_listener'
4
+
5
+ class PgExport
6
+ module Listeners
7
+ class Interactive
8
+ class SelectDump < InteractiveListener
9
+ end
10
+ end
11
+ end
12
+ end
@@ -5,9 +5,9 @@ require_relative '../interactive_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Interactive
8
- class UploadDumpToFtp < InteractiveListener
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
@@ -5,7 +5,7 @@ require_relative '../plain_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Plain
8
- class DownloadDumpFromFtp < PlainListener
8
+ class DownloadDump < PlainListener
9
9
  def on_step_succeeded(event)
10
10
  logger.info("Download #{event[:value][:dump]}")
11
11
  end
@@ -5,7 +5,7 @@ require_relative '../plain_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Plain
8
- class FetchDumpsFromFtp < PlainListener
8
+ class FetchDumps < PlainListener
9
9
  def on_step_succeeded(event)
10
10
  logger.info("Fetch dumps (#{event[:value][:dumps].count} items)")
11
11
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../plain_listener'
4
+
5
+ class PgExport
6
+ module Listeners
7
+ class Plain
8
+ class PrepareParams < PlainListener
9
+ def on_step_succeeded(event)
10
+ logger.info('Init')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -5,7 +5,7 @@ require_relative '../plain_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Plain
8
- class RemoveOldDumpsFromFtp < PlainListener
8
+ class RemoveOldDumps < PlainListener
9
9
  def on_step_succeeded(event)
10
10
  event[:value][:removed_dumps].each do |filename|
11
11
  logger.info("Remove #{filename} from #{event[:value][:gateway]}")
@@ -5,7 +5,7 @@ require_relative '../plain_listener'
5
5
  class PgExport
6
6
  module Listeners
7
7
  class Plain
8
- class UploadDumpToFtp < PlainListener
8
+ class UploadDump < PlainListener
9
9
  def on_step_succeeded(event)
10
10
  logger.info("Upload #{event[:value][:dump]} to #{event[:value][:gateway]}")
11
11
  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
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pg_export/lib/pg_export/value_objects/result'
4
+
5
+ class PgExport
6
+ module Operations
7
+ class RemoveOldDumps
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
15
+
16
+ def call(dump:, gateway:)
17
+ dumps = gateway_dump_repository.by_database_name(
18
+ database_name: dump.database,
19
+ gateway: gateway,
20
+ offset: keep
21
+ )
22
+ dumps.each do |d|
23
+ gateway.delete(d.name)
24
+ end
25
+
26
+ ValueObjects::Success.new(removed_dumps: dumps, gateway: gateway)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :gateway_dump_repository, :keep
32
+ end
33
+ end
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