pg_export 0.7.6 → 1.0.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +6 -3
  4. data/CHANGELOG.md +15 -0
  5. data/README.md +14 -11
  6. data/bin/pg_export +91 -26
  7. data/lib/pg_export.rb +5 -13
  8. data/lib/pg_export/configuration.rb +21 -13
  9. data/lib/pg_export/container.rb +5 -30
  10. data/lib/pg_export/import.rb +1 -1
  11. data/lib/pg_export/lib/pg_export/factories/cipher_factory.rb +7 -10
  12. data/lib/pg_export/lib/pg_export/factories/ftp_gateway_factory.rb +22 -0
  13. data/lib/pg_export/lib/pg_export/factories/ssh_gateway_factory.rb +22 -0
  14. data/lib/pg_export/lib/pg_export/{adapters/ftp_adapter.rb → gateways/ftp.rb} +11 -8
  15. data/lib/pg_export/lib/pg_export/gateways/ssh.rb +83 -0
  16. data/lib/pg_export/lib/pg_export/listeners/interactive/build_dump.rb +4 -4
  17. data/lib/pg_export/lib/pg_export/listeners/interactive/{close_ftp_connection.rb → close_connection.rb} +1 -1
  18. data/lib/pg_export/lib/pg_export/listeners/interactive/decrypt_dump.rb +2 -2
  19. data/lib/pg_export/lib/pg_export/listeners/interactive/{download_dump_from_ftp.rb → download_dump.rb} +3 -3
  20. data/lib/pg_export/lib/pg_export/listeners/interactive/encrypt_dump.rb +2 -2
  21. data/lib/pg_export/lib/pg_export/listeners/interactive/{fetch_dumps_from_ftp.rb → fetch_dumps.rb} +1 -1
  22. data/lib/pg_export/lib/pg_export/listeners/interactive/{open_ftp_connection.rb → open_connection.rb} +2 -2
  23. data/lib/pg_export/lib/pg_export/listeners/interactive/{remove_old_dumps_from_ftp.rb → remove_old_dumps.rb} +6 -6
  24. data/lib/pg_export/lib/pg_export/listeners/interactive/restore.rb +2 -2
  25. data/lib/pg_export/lib/pg_export/listeners/interactive/{upload_dump_to_ftp.rb → upload_dump.rb} +3 -3
  26. data/lib/pg_export/lib/pg_export/listeners/interactive_listener.rb +2 -2
  27. data/lib/pg_export/lib/pg_export/listeners/plain/build_dump.rb +2 -2
  28. data/lib/pg_export/lib/pg_export/listeners/plain/{close_ftp_connection.rb → close_connection.rb} +2 -2
  29. data/lib/pg_export/lib/pg_export/listeners/plain/decrypt_dump.rb +2 -2
  30. data/lib/pg_export/lib/pg_export/listeners/plain/{download_dump_from_ftp.rb → download_dump.rb} +3 -3
  31. data/lib/pg_export/lib/pg_export/listeners/plain/encrypt_dump.rb +2 -2
  32. data/lib/pg_export/lib/pg_export/listeners/plain/fetch_dumps.rb +15 -0
  33. data/lib/pg_export/lib/pg_export/listeners/plain/open_connection.rb +15 -0
  34. data/lib/pg_export/lib/pg_export/listeners/plain/remove_old_dumps.rb +17 -0
  35. data/lib/pg_export/lib/pg_export/listeners/plain/restore.rb +1 -1
  36. data/lib/pg_export/lib/pg_export/listeners/plain/upload_dump.rb +15 -0
  37. data/lib/pg_export/lib/pg_export/listeners/plain_listener.rb +2 -2
  38. data/lib/pg_export/lib/pg_export/operations/{open_ftp_connection.rb → open_connection.rb} +5 -5
  39. data/lib/pg_export/lib/pg_export/operations/{remove_old_dumps_from_ftp.rb → remove_old_dumps.rb} +7 -7
  40. data/lib/pg_export/lib/pg_export/repositories/{ftp_dump_file_repository.rb → gateway_dump_file_repository.rb} +3 -3
  41. data/lib/pg_export/lib/pg_export/repositories/{ftp_dump_repository.rb → gateway_dump_repository.rb} +7 -7
  42. data/lib/pg_export/lib/pg_export/transactions/export_dump.rb +10 -10
  43. data/lib/pg_export/lib/pg_export/transactions/import_dump_interactively.rb +16 -16
  44. data/lib/pg_export/system/boot/config.rb +17 -1
  45. data/lib/pg_export/system/boot/ftp.rb +11 -0
  46. data/lib/pg_export/system/boot/interactive.rb +4 -10
  47. data/lib/pg_export/system/boot/operations.rb +17 -0
  48. data/lib/pg_export/system/boot/plain.rb +5 -11
  49. data/lib/pg_export/system/boot/ssh.rb +11 -0
  50. data/lib/pg_export/version.rb +1 -1
  51. data/pg_export.gemspec +10 -6
  52. metadata +98 -39
  53. data/lib/pg_export/build_logger.rb +0 -21
  54. data/lib/pg_export/lib/pg_export/factories/ftp_adapter_factory.rb +0 -22
  55. data/lib/pg_export/lib/pg_export/listeners/plain/fetch_dumps_from_ftp.rb +0 -15
  56. data/lib/pg_export/lib/pg_export/listeners/plain/open_ftp_connection.rb +0 -15
  57. data/lib/pg_export/lib/pg_export/listeners/plain/remove_old_dumps_from_ftp.rb +0 -17
  58. data/lib/pg_export/lib/pg_export/listeners/plain/upload_dump_to_ftp.rb +0 -15
  59. data/lib/pg_export/system/boot/logger.rb +0 -15
@@ -6,7 +6,7 @@ class PgExport
6
6
  module Listeners
7
7
  class Plain
8
8
  class Restore < PlainListener
9
- def on_step_succeeded(step_name:, args:, value:)
9
+ def on_step_succeeded(event)
10
10
  logger.info("Restore dump to database #{args.first[:database]}")
11
11
  end
12
12
  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 UploadDump < PlainListener
9
+ def on_step_succeeded(event)
10
+ logger.info("Upload #{event[:value][:dump]} to #{event[:value][:gateway]}")
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -9,8 +9,8 @@ class PgExport
9
9
  class PlainListener
10
10
  include Import['logger']
11
11
 
12
- def on_step_failed(step_name:, args:, value:)
13
- logger.info("Error: #{value[:message]}")
12
+ def on_step_failed(event)
13
+ logger.info("Error: #{event[:value][:message]}")
14
14
  end
15
15
  end
16
16
  end
@@ -5,14 +5,14 @@ require 'pg_export/import'
5
5
 
6
6
  class PgExport
7
7
  module Operations
8
- class OpenFtpConnection
8
+ class OpenConnection
9
9
  include Dry::Transaction::Operation
10
- include Import['factories.ftp_adapter_factory']
10
+ include Import['factories.gateway_factory']
11
11
 
12
12
  def call(inputs)
13
- ftp_adapter = ftp_adapter_factory.ftp_adapter
14
- ftp_adapter.open_ftp
15
- Success(inputs.merge(ftp_adapter: ftp_adapter))
13
+ gateway = gateway_factory.gateway
14
+ gateway.open
15
+ Success(inputs.merge(gateway: gateway))
16
16
  end
17
17
  end
18
18
  end
@@ -5,21 +5,21 @@ require 'pg_export/import'
5
5
 
6
6
  class PgExport
7
7
  module Operations
8
- class RemoveOldDumpsFromFtp
8
+ class RemoveOldDumps
9
9
  include Dry::Transaction::Operation
10
- include Import['repositories.ftp_dump_repository', 'config']
10
+ include Import['repositories.gateway_dump_repository', 'config']
11
11
 
12
- def call(dump:, ftp_adapter:)
13
- dumps = ftp_dump_repository.by_database_name(
12
+ def call(dump:, gateway:)
13
+ dumps = gateway_dump_repository.by_database_name(
14
14
  database_name: dump.database,
15
- ftp_adapter: ftp_adapter,
15
+ gateway: gateway,
16
16
  offset: config.keep_dumps
17
17
  )
18
18
  dumps.each do |d|
19
- ftp_adapter.delete(d.name)
19
+ gateway.delete(d.name)
20
20
  end
21
21
 
22
- Success(removed_dumps: dumps, ftp_adapter: ftp_adapter)
22
+ Success(removed_dumps: dumps, gateway: gateway)
23
23
  end
24
24
  end
25
25
  end
@@ -7,10 +7,10 @@ require 'pg_export/lib/pg_export/value_objects/dump_file'
7
7
 
8
8
  class PgExport
9
9
  module Repositories
10
- class FtpDumpFileRepository
11
- def by_name(name:, ftp_adapter:)
10
+ class GatewayDumpFileRepository
11
+ def by_name(name:, gateway:)
12
12
  file = ValueObjects::DumpFile.new
13
- ftp_adapter.get(file, name)
13
+ gateway.get(file, name)
14
14
 
15
15
  file
16
16
  end
@@ -7,21 +7,21 @@ require 'pg_export/lib/pg_export/value_objects/dump_file'
7
7
 
8
8
  class PgExport
9
9
  module Repositories
10
- class FtpDumpRepository
11
- def all(database_name:, ftp_adapter:)
12
- ftp_adapter.list([database_name, '*'].compact.join('_')).map do |name:, size:|
10
+ class GatewayDumpRepository
11
+ def all(database_name:, gateway:)
12
+ gateway.list(database_name).map do |item|
13
13
  begin
14
- dump(name, database_name, size)
14
+ dump(item[:name], database_name, item[:size])
15
15
  rescue Dry::Types::ConstraintError
16
16
  nil
17
17
  end
18
18
  end.compact
19
19
  end
20
20
 
21
- def by_database_name(database_name:, ftp_adapter:, offset:)
22
- ftp_adapter.list(database_name + '_*').drop(offset).map do |name:, size:|
21
+ def by_database_name(database_name:, gateway:, offset:)
22
+ gateway.list(database_name).drop(offset).map do |item|
23
23
  begin
24
- dump(name, database_name, size)
24
+ dump(item[:name], database_name, item[:size])
25
25
  rescue Dry::Types::ConstraintError
26
26
  nil
27
27
  end
@@ -17,10 +17,10 @@ class PgExport
17
17
  step :prepare_params
18
18
  step :build_dump
19
19
  step :encrypt_dump, with: 'operations.encrypt_dump'
20
- step :open_ftp_connection, with: 'operations.open_ftp_connection'
21
- step :upload_dump_to_ftp
22
- step :remove_old_dumps_from_ftp, with: 'operations.remove_old_dumps_from_ftp'
23
- step :close_ftp_connection
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
24
 
25
25
  private
26
26
 
@@ -42,14 +42,14 @@ class PgExport
42
42
  Failure(message: 'Unable to dump database: ' + e.to_s)
43
43
  end
44
44
 
45
- def upload_dump_to_ftp(dump:, ftp_adapter:)
46
- ftp_adapter.persist(dump.file, dump.name)
47
- Success(dump: dump, ftp_adapter: ftp_adapter)
45
+ def upload_dump(dump:, gateway:)
46
+ gateway.persist(dump.file, dump.name)
47
+ Success(dump: dump, gateway: gateway)
48
48
  end
49
49
 
50
- def close_ftp_connection(removed_dumps:, ftp_adapter:)
51
- ftp_adapter.close_ftp
52
- Success(ftp_adapter: ftp_adapter)
50
+ def close_connection(removed_dumps:, gateway:)
51
+ gateway.close
52
+ Success(gateway: gateway)
53
53
  end
54
54
  end
55
55
  end
@@ -13,41 +13,41 @@ class PgExport
13
13
  include Dry::Transaction(container: PgExport::Container)
14
14
  include Import[
15
15
  'adapters.bash_adapter',
16
- 'repositories.ftp_dump_repository',
17
- 'repositories.ftp_dump_file_repository',
16
+ 'repositories.gateway_dump_repository',
17
+ 'repositories.gateway_dump_file_repository',
18
18
  'ui_input'
19
19
  ]
20
20
 
21
- step :open_ftp_connection, with: 'operations.open_ftp_connection'
22
- step :fetch_dumps_from_ftp
21
+ step :open_connection, with: 'operations.open_connection'
22
+ step :fetch_dumps
23
23
  step :select_dump
24
- step :download_dump_from_ftp
25
- step :close_ftp_connection
24
+ step :download_dump
25
+ step :close_connection
26
26
  step :decrypt_dump, with: 'operations.decrypt_dump'
27
27
  step :select_database
28
28
  step :restore
29
29
 
30
30
  private
31
31
 
32
- def fetch_dumps_from_ftp(database_name:, ftp_adapter:)
33
- dumps = ftp_dump_repository.all(database_name: database_name, ftp_adapter: ftp_adapter)
32
+ def fetch_dumps(database_name:, gateway:)
33
+ dumps = gateway_dump_repository.all(database_name: database_name, gateway: gateway)
34
34
  return Failure(message: 'No dumps') if dumps.none?
35
35
 
36
- Success(ftp_adapter: ftp_adapter, dumps: dumps)
36
+ Success(gateway: gateway, dumps: dumps)
37
37
  end
38
38
 
39
- def select_dump(dumps:, ftp_adapter:)
39
+ def select_dump(dumps:, gateway:)
40
40
  dump = ui_input.select_dump(dumps)
41
- Success(dump: dump, ftp_adapter: ftp_adapter)
41
+ Success(dump: dump, gateway: gateway)
42
42
  end
43
43
 
44
- def download_dump_from_ftp(dump:, ftp_adapter:)
45
- dump.file = ftp_dump_file_repository.by_name(name: dump.name, ftp_adapter: ftp_adapter)
46
- Success(dump: dump, ftp_adapter: ftp_adapter)
44
+ def download_dump(dump:, gateway:)
45
+ dump.file = gateway_dump_file_repository.by_name(name: dump.name, gateway: gateway)
46
+ Success(dump: dump, gateway: gateway)
47
47
  end
48
48
 
49
- def close_ftp_connection(dump:, ftp_adapter:)
50
- Thread.new { ftp_adapter.close_ftp }
49
+ def close_connection(dump:, gateway:)
50
+ Thread.new { gateway.close }
51
51
  Success(dump: dump)
52
52
  end
53
53
 
@@ -2,10 +2,26 @@
2
2
 
3
3
  PgExport::Container.boot :config do
4
4
  init do
5
+ require 'logger'
6
+ require 'pg_export/lib/pg_export/types'
5
7
  require 'pg_export/configuration'
6
8
  end
7
9
 
8
10
  start do
9
- register(:config, memoize: true) { PgExport::Configuration.build(ENV) }
11
+ config = PgExport::Configuration.build(ENV)
12
+
13
+ formatters = {
14
+ plain: ->(_, _, _, message) { "#{message}\n" },
15
+ muted: ->(*) { raise 'Do not initialize logger when it is muted' },
16
+ timestamped: lambda do |severity, datetime, progname, message|
17
+ "#{datetime} #{Process.pid} TID-#{Thread.current.object_id.to_s(36)}#{progname} #{severity}: #{message}\n"
18
+ end
19
+ }
20
+
21
+ register(:logger, memoize: true) do
22
+ Logger.new($stdout, formatter: formatters.fetch(config.logger_format.to_sym))
23
+ end
24
+
25
+ register(:config, memoize: true) { config }
10
26
  end
11
27
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ PgExport::Container.boot(:ftp) do
4
+ init do
5
+ require 'pg_export/lib/pg_export/factories/ftp_gateway_factory'
6
+ end
7
+
8
+ start do
9
+ register('factories.gateway_factory') { ::PgExport::Factories::FtpGatewayFactory.new }
10
+ end
11
+ end
@@ -6,20 +6,14 @@ PgExport::Container.boot(:interactive) do
6
6
  end
7
7
 
8
8
  start do
9
- use :main
10
-
11
- # type = 'plain'
12
9
  type = 'interactive'
13
-
14
10
  transaction = PgExport::Transactions::ImportDumpInteractively.new(ui_input: target["ui.#{type}.input"])
15
11
 
16
12
  unless target[:config].logger_muted?
17
- use :logger
18
-
19
13
  %i[
20
- open_ftp_connection
21
- fetch_dumps_from_ftp
22
- download_dump_from_ftp
14
+ open_connection
15
+ fetch_dumps
16
+ download_dump
23
17
  decrypt_dump
24
18
  restore
25
19
  ].each do |step|
@@ -27,6 +21,6 @@ PgExport::Container.boot(:interactive) do
27
21
  end
28
22
  end
29
23
 
30
- register('transactions.import_dump_interactively', memoize: true) { transaction }
24
+ register('transaction', memoize: true) { transaction }
31
25
  end
32
26
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ PgExport::Container.boot(:operations) do
4
+ init do
5
+ require 'pg_export/lib/pg_export/operations/encrypt_dump'
6
+ require 'pg_export/lib/pg_export/operations/decrypt_dump'
7
+ require 'pg_export/lib/pg_export/operations/remove_old_dumps'
8
+ require 'pg_export/lib/pg_export/operations/open_connection'
9
+ end
10
+
11
+ start do
12
+ register('operations.encrypt_dump') { ::PgExport::Operations::EncryptDump.new }
13
+ register('operations.decrypt_dump') { ::PgExport::Operations::DecryptDump.new }
14
+ register('operations.remove_old_dumps') { ::PgExport::Operations::RemoveOldDumps.new }
15
+ register('operations.open_connection') { ::PgExport::Operations::OpenConnection.new }
16
+ end
17
+ end
@@ -6,28 +6,22 @@ PgExport::Container.boot(:plain) do
6
6
  end
7
7
 
8
8
  start do
9
- use :main
10
-
11
9
  transaction = PgExport::Transactions::ExportDump.new
12
10
 
13
11
  unless target[:config].logger_muted?
14
- use :logger
15
-
16
12
  type = 'plain'
17
- # type = 'interactive'
18
-
19
13
  %i[
20
14
  build_dump
21
15
  encrypt_dump
22
- open_ftp_connection
23
- upload_dump_to_ftp
24
- remove_old_dumps_from_ftp
25
- close_ftp_connection
16
+ open_connection
17
+ upload_dump
18
+ remove_old_dumps
19
+ close_connection
26
20
  ].each do |step|
27
21
  transaction.subscribe(step => target["listeners.#{type}.#{step}"])
28
22
  end
29
23
  end
30
24
 
31
- register('transactions.export_dump', memoize: true) { transaction }
25
+ register('transaction', memoize: true) { transaction }
32
26
  end
33
27
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ PgExport::Container.boot(:ssh) do
4
+ init do
5
+ require 'pg_export/lib/pg_export/factories/ssh_gateway_factory'
6
+ end
7
+
8
+ start do
9
+ register('factories.gateway_factory') { ::PgExport::Factories::SshGatewayFactory.new }
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class PgExport
4
- VERSION = '0.7.6'
4
+ VERSION = '1.0.0.rc4'
5
5
  end
data/pg_export.gemspec CHANGED
@@ -10,29 +10,33 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['Krzysztof Maicher']
11
11
  spec.email = ['krzysztof.maicher@gmail.com']
12
12
 
13
- spec.summary = 'CLI for creating and exporting PostgreSQL dumps to FTP.'
14
- spec.description = "CLI for creating and exporting PostgreSQL dumps to FTP.\
13
+ spec.summary = 'CLI for exporting/importing PostgreSQL dumps via FTP/SSH.'
14
+ spec.description = "CLI for exporting/importing PostgreSQL dumps via FTP/SSH.\
15
15
  Can be used for backups or synchronizing databases between production and development environments."
16
16
  spec.homepage = 'https://github.com/maicher/pg_export'
17
17
  spec.license = 'MIT'
18
18
 
19
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
20
20
  spec.executables = ['pg_export']
21
21
  spec.require_paths = ['lib']
22
22
  spec.required_ruby_version = '>= 2.3.0'
23
23
 
24
- spec.add_dependency 'dry-initializer', '~> 2.5'
25
- spec.add_dependency 'dry-types', '~> 1.0'
24
+ spec.add_dependency 'bcrypt_pbkdf'
25
+ spec.add_dependency 'dry-initializer', '~> 3.0'
26
26
  spec.add_dependency 'dry-struct', '~> 1.0'
27
27
  spec.add_dependency 'dry-system', '~> 0.18'
28
28
  spec.add_dependency 'dry-transaction', '~> 0.13'
29
+ spec.add_dependency 'dry-types', '~> 1.0'
30
+ spec.add_dependency 'ed25519'
31
+ spec.add_dependency 'net-scp'
32
+ spec.add_dependency 'net-ssh'
29
33
  spec.add_dependency 'tty-prompt'
30
34
  spec.add_dependency 'tty-spinner'
31
35
 
32
36
  spec.add_development_dependency 'bundler', '~> 2.1'
33
37
  spec.add_development_dependency 'pg', '~> 0.21'
34
38
  spec.add_development_dependency 'pry'
35
- spec.add_development_dependency 'rake', '~> 10.0'
39
+ spec.add_development_dependency 'rake', '>= 12.3.3'
36
40
  spec.add_development_dependency 'rspec', '~> 3.4'
37
41
  spec.add_development_dependency 'rubocop', '~> 0.59.2'
38
42
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_export
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 1.0.0.rc4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Maicher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-07 00:00:00.000000000 Z
11
+ date: 2021-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: dry-initializer
14
+ name: bcrypt_pbkdf
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.5'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-types
28
+ name: dry-initializer
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dry-struct
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,62 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.13'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dry-types
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: ed25519
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: net-scp
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: net-ssh
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: tty-prompt
85
141
  requirement: !ruby/object:Gem::Requirement
@@ -154,16 +210,16 @@ dependencies:
154
210
  name: rake
155
211
  requirement: !ruby/object:Gem::Requirement
156
212
  requirements:
157
- - - "~>"
213
+ - - ">="
158
214
  - !ruby/object:Gem::Version
159
- version: '10.0'
215
+ version: 12.3.3
160
216
  type: :development
161
217
  prerelease: false
162
218
  version_requirements: !ruby/object:Gem::Requirement
163
219
  requirements:
164
- - - "~>"
220
+ - - ">="
165
221
  - !ruby/object:Gem::Version
166
- version: '10.0'
222
+ version: 12.3.3
167
223
  - !ruby/object:Gem::Dependency
168
224
  name: rspec
169
225
  requirement: !ruby/object:Gem::Requirement
@@ -192,7 +248,7 @@ dependencies:
192
248
  - - "~>"
193
249
  - !ruby/object:Gem::Version
194
250
  version: 0.59.2
195
- description: CLI for creating and exporting PostgreSQL dumps to FTP. Can
251
+ description: CLI for exporting/importing PostgreSQL dumps via FTP/SSH. Can
196
252
  be used for backups or synchronizing databases between production and development
197
253
  environments.
198
254
  email:
@@ -217,44 +273,45 @@ files:
217
273
  - bin/pg_export
218
274
  - bin/setup
219
275
  - lib/pg_export.rb
220
- - lib/pg_export/build_logger.rb
221
276
  - lib/pg_export/configuration.rb
222
277
  - lib/pg_export/container.rb
223
278
  - lib/pg_export/import.rb
224
279
  - lib/pg_export/lib/pg_export/adapters/bash_adapter.rb
225
- - lib/pg_export/lib/pg_export/adapters/ftp_adapter.rb
226
280
  - lib/pg_export/lib/pg_export/entities/dump.rb
227
281
  - lib/pg_export/lib/pg_export/factories/cipher_factory.rb
228
282
  - lib/pg_export/lib/pg_export/factories/dump_factory.rb
229
- - lib/pg_export/lib/pg_export/factories/ftp_adapter_factory.rb
283
+ - lib/pg_export/lib/pg_export/factories/ftp_gateway_factory.rb
284
+ - lib/pg_export/lib/pg_export/factories/ssh_gateway_factory.rb
285
+ - lib/pg_export/lib/pg_export/gateways/ftp.rb
286
+ - lib/pg_export/lib/pg_export/gateways/ssh.rb
230
287
  - lib/pg_export/lib/pg_export/listeners/interactive/build_dump.rb
231
- - lib/pg_export/lib/pg_export/listeners/interactive/close_ftp_connection.rb
288
+ - lib/pg_export/lib/pg_export/listeners/interactive/close_connection.rb
232
289
  - lib/pg_export/lib/pg_export/listeners/interactive/decrypt_dump.rb
233
- - lib/pg_export/lib/pg_export/listeners/interactive/download_dump_from_ftp.rb
290
+ - lib/pg_export/lib/pg_export/listeners/interactive/download_dump.rb
234
291
  - lib/pg_export/lib/pg_export/listeners/interactive/encrypt_dump.rb
235
- - lib/pg_export/lib/pg_export/listeners/interactive/fetch_dumps_from_ftp.rb
236
- - lib/pg_export/lib/pg_export/listeners/interactive/open_ftp_connection.rb
237
- - lib/pg_export/lib/pg_export/listeners/interactive/remove_old_dumps_from_ftp.rb
292
+ - lib/pg_export/lib/pg_export/listeners/interactive/fetch_dumps.rb
293
+ - lib/pg_export/lib/pg_export/listeners/interactive/open_connection.rb
294
+ - lib/pg_export/lib/pg_export/listeners/interactive/remove_old_dumps.rb
238
295
  - lib/pg_export/lib/pg_export/listeners/interactive/restore.rb
239
- - lib/pg_export/lib/pg_export/listeners/interactive/upload_dump_to_ftp.rb
296
+ - lib/pg_export/lib/pg_export/listeners/interactive/upload_dump.rb
240
297
  - lib/pg_export/lib/pg_export/listeners/interactive_listener.rb
241
298
  - lib/pg_export/lib/pg_export/listeners/plain/build_dump.rb
242
- - lib/pg_export/lib/pg_export/listeners/plain/close_ftp_connection.rb
299
+ - lib/pg_export/lib/pg_export/listeners/plain/close_connection.rb
243
300
  - lib/pg_export/lib/pg_export/listeners/plain/decrypt_dump.rb
244
- - lib/pg_export/lib/pg_export/listeners/plain/download_dump_from_ftp.rb
301
+ - lib/pg_export/lib/pg_export/listeners/plain/download_dump.rb
245
302
  - lib/pg_export/lib/pg_export/listeners/plain/encrypt_dump.rb
246
- - lib/pg_export/lib/pg_export/listeners/plain/fetch_dumps_from_ftp.rb
247
- - lib/pg_export/lib/pg_export/listeners/plain/open_ftp_connection.rb
248
- - lib/pg_export/lib/pg_export/listeners/plain/remove_old_dumps_from_ftp.rb
303
+ - lib/pg_export/lib/pg_export/listeners/plain/fetch_dumps.rb
304
+ - lib/pg_export/lib/pg_export/listeners/plain/open_connection.rb
305
+ - lib/pg_export/lib/pg_export/listeners/plain/remove_old_dumps.rb
249
306
  - lib/pg_export/lib/pg_export/listeners/plain/restore.rb
250
- - lib/pg_export/lib/pg_export/listeners/plain/upload_dump_to_ftp.rb
307
+ - lib/pg_export/lib/pg_export/listeners/plain/upload_dump.rb
251
308
  - lib/pg_export/lib/pg_export/listeners/plain_listener.rb
252
309
  - lib/pg_export/lib/pg_export/operations/decrypt_dump.rb
253
310
  - lib/pg_export/lib/pg_export/operations/encrypt_dump.rb
254
- - lib/pg_export/lib/pg_export/operations/open_ftp_connection.rb
255
- - lib/pg_export/lib/pg_export/operations/remove_old_dumps_from_ftp.rb
256
- - lib/pg_export/lib/pg_export/repositories/ftp_dump_file_repository.rb
257
- - lib/pg_export/lib/pg_export/repositories/ftp_dump_repository.rb
311
+ - lib/pg_export/lib/pg_export/operations/open_connection.rb
312
+ - lib/pg_export/lib/pg_export/operations/remove_old_dumps.rb
313
+ - lib/pg_export/lib/pg_export/repositories/gateway_dump_file_repository.rb
314
+ - lib/pg_export/lib/pg_export/repositories/gateway_dump_repository.rb
258
315
  - lib/pg_export/lib/pg_export/transactions/export_dump.rb
259
316
  - lib/pg_export/lib/pg_export/transactions/import_dump_interactively.rb
260
317
  - lib/pg_export/lib/pg_export/types.rb
@@ -262,9 +319,11 @@ files:
262
319
  - lib/pg_export/lib/pg_export/ui/plain/input.rb
263
320
  - lib/pg_export/lib/pg_export/value_objects/dump_file.rb
264
321
  - lib/pg_export/system/boot/config.rb
322
+ - lib/pg_export/system/boot/ftp.rb
265
323
  - lib/pg_export/system/boot/interactive.rb
266
- - lib/pg_export/system/boot/logger.rb
324
+ - lib/pg_export/system/boot/operations.rb
267
325
  - lib/pg_export/system/boot/plain.rb
326
+ - lib/pg_export/system/boot/ssh.rb
268
327
  - lib/pg_export/version.rb
269
328
  - pg_export.gemspec
270
329
  homepage: https://github.com/maicher/pg_export
@@ -282,12 +341,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
282
341
  version: 2.3.0
283
342
  required_rubygems_version: !ruby/object:Gem::Requirement
284
343
  requirements:
285
- - - ">="
344
+ - - ">"
286
345
  - !ruby/object:Gem::Version
287
- version: '0'
346
+ version: 1.3.1
288
347
  requirements: []
289
- rubygems_version: 3.1.2
348
+ rubygems_version: 3.2.3
290
349
  signing_key:
291
350
  specification_version: 4
292
- summary: CLI for creating and exporting PostgreSQL dumps to FTP.
351
+ summary: CLI for exporting/importing PostgreSQL dumps via FTP/SSH.
293
352
  test_files: []