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
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PgExport
4
+ module ValueObjects
5
+ class Result
6
+ attr_reader :value
7
+
8
+ def initialize(value)
9
+ @value = value
10
+ end
11
+ end
12
+
13
+ class Success < Result
14
+ def success
15
+ value
16
+ end
17
+
18
+ def bind
19
+ yield
20
+ end
21
+
22
+ def on_success
23
+ yield value
24
+
25
+ self
26
+ end
27
+
28
+ def on_failure
29
+ self
30
+ end
31
+ end
32
+
33
+ class Failure < Result
34
+ def bind
35
+ self
36
+ end
37
+
38
+ def on_success
39
+ self
40
+ end
41
+
42
+ def on_failure
43
+ yield value
44
+
45
+ self
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class PgExport
4
- VERSION = '1.0.0.rc5'
4
+ VERSION = '1.0.0.rc6'
5
5
  end
data/lib/pg_export.rb CHANGED
@@ -1,23 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pg_export/container'
4
- require 'pg_export/import'
3
+ require 'pg_export/version'
4
+ require 'pg_export/configuration'
5
+ require 'pg_export/factory'
5
6
 
6
7
  class PgExport
7
8
  class InitializationError < StandardError; end
8
9
 
9
- include Import['transaction']
10
+ attr_reader :config
10
11
 
11
- def self.boot
12
- PgExport::Container.start(:main)
13
- new
12
+ def initialize
13
+ @config = PgExport::Configuration.build(ENV)
14
+ @factory = PgExport::Factory.new(config: config)
14
15
  end
15
16
 
16
17
  def call(database_name, &block)
17
- transaction.call(database_name: database_name, &block)
18
+ factory.transaction.call(database_name: database_name, &block)
19
+ end
20
+
21
+ def gateway_welcome
22
+ container.gateway_factory.gateway.welcome
18
23
  end
19
24
 
20
25
  private
21
26
 
22
- attr_reader :transaction
27
+ attr_reader :factory
23
28
  end
data/pg_export.gemspec CHANGED
@@ -22,11 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.required_ruby_version = '>= 2.3.0'
23
23
 
24
24
  spec.add_dependency 'bcrypt_pbkdf'
25
- spec.add_dependency 'dry-initializer', '~> 3.0'
26
- spec.add_dependency 'dry-struct', '~> 1.0'
27
- spec.add_dependency 'dry-system', '~> 0.18'
28
- spec.add_dependency 'dry-transaction', '~> 0.13'
29
- spec.add_dependency 'dry-types', '~> 1.0'
30
25
  spec.add_dependency 'ed25519'
31
26
  spec.add_dependency 'net-scp'
32
27
  spec.add_dependency 'net-ssh'
@@ -38,5 +33,5 @@ Gem::Specification.new do |spec|
38
33
  spec.add_development_dependency 'pry'
39
34
  spec.add_development_dependency 'rake', '>= 12.3.3'
40
35
  spec.add_development_dependency 'rspec', '~> 3.4'
41
- spec.add_development_dependency 'rubocop', '~> 0.59.2'
36
+ spec.add_development_dependency 'rubocop', '= 0.81'
42
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_export
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc5
4
+ version: 1.0.0.rc6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Maicher
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-22 00:00:00.000000000 Z
11
+ date: 2022-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bcrypt_pbkdf
@@ -24,76 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: dry-initializer
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3.0'
41
- - !ruby/object:Gem::Dependency
42
- name: dry-struct
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
55
- - !ruby/object:Gem::Dependency
56
- name: dry-system
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.18'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.18'
69
- - !ruby/object:Gem::Dependency
70
- name: dry-transaction
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.13'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
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
27
  - !ruby/object:Gem::Dependency
98
28
  name: ed25519
99
29
  requirement: !ruby/object:Gem::Requirement
@@ -238,16 +168,16 @@ dependencies:
238
168
  name: rubocop
239
169
  requirement: !ruby/object:Gem::Requirement
240
170
  requirements:
241
- - - "~>"
171
+ - - '='
242
172
  - !ruby/object:Gem::Version
243
- version: 0.59.2
173
+ version: '0.81'
244
174
  type: :development
245
175
  prerelease: false
246
176
  version_requirements: !ruby/object:Gem::Requirement
247
177
  requirements:
248
- - - "~>"
178
+ - - '='
249
179
  - !ruby/object:Gem::Version
250
- version: 0.59.2
180
+ version: '0.81'
251
181
  description: CLI for exporting/importing PostgreSQL dumps via FTP/SSH. Can
252
182
  be used for backups or synchronizing databases between production and development
253
183
  environments.
@@ -274,9 +204,8 @@ files:
274
204
  - bin/setup
275
205
  - lib/pg_export.rb
276
206
  - lib/pg_export/configuration.rb
277
- - lib/pg_export/container.rb
278
- - lib/pg_export/import.rb
279
- - lib/pg_export/lib/pg_export/adapters/bash_adapter.rb
207
+ - lib/pg_export/factory.rb
208
+ - lib/pg_export/lib/pg_export/adapters/shell_adapter.rb
280
209
  - lib/pg_export/lib/pg_export/entities/dump.rb
281
210
  - lib/pg_export/lib/pg_export/factories/cipher_factory.rb
282
211
  - lib/pg_export/lib/pg_export/factories/dump_factory.rb
@@ -315,25 +244,20 @@ files:
315
244
  - lib/pg_export/lib/pg_export/operations/remove_old_dumps.rb
316
245
  - lib/pg_export/lib/pg_export/repositories/gateway_dump_file_repository.rb
317
246
  - lib/pg_export/lib/pg_export/repositories/gateway_dump_repository.rb
247
+ - lib/pg_export/lib/pg_export/transactions/evaluator.rb
318
248
  - lib/pg_export/lib/pg_export/transactions/export_dump.rb
319
249
  - lib/pg_export/lib/pg_export/transactions/import_dump_interactively.rb
320
- - lib/pg_export/lib/pg_export/types.rb
321
250
  - lib/pg_export/lib/pg_export/ui/interactive/input.rb
322
251
  - lib/pg_export/lib/pg_export/ui/plain/input.rb
323
252
  - lib/pg_export/lib/pg_export/value_objects/dump_file.rb
324
- - lib/pg_export/system/boot/config.rb
325
- - lib/pg_export/system/boot/ftp.rb
326
- - lib/pg_export/system/boot/interactive.rb
327
- - lib/pg_export/system/boot/operations.rb
328
- - lib/pg_export/system/boot/plain.rb
329
- - lib/pg_export/system/boot/ssh.rb
253
+ - lib/pg_export/lib/pg_export/value_objects/result.rb
330
254
  - lib/pg_export/version.rb
331
255
  - pg_export.gemspec
332
256
  homepage: https://github.com/maicher/pg_export
333
257
  licenses:
334
258
  - MIT
335
259
  metadata: {}
336
- post_install_message:
260
+ post_install_message:
337
261
  rdoc_options: []
338
262
  require_paths:
339
263
  - lib
@@ -349,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
349
273
  version: 1.3.1
350
274
  requirements: []
351
275
  rubygems_version: 3.2.3
352
- signing_key:
276
+ signing_key:
353
277
  specification_version: 4
354
278
  summary: CLI for exporting/importing PostgreSQL dumps via FTP/SSH.
355
279
  test_files: []
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry/system/container'
4
-
5
- class PgExport
6
- class Container < Dry::System::Container
7
- configure do
8
- config.root = Pathname(__FILE__).realpath.dirname
9
- config.name = :pg_export
10
- config.default_namespace = 'pg_export'
11
- config.auto_register = %w[lib]
12
- end
13
-
14
- load_paths!('lib')
15
-
16
- boot(:main) do |system|
17
- use(:config)
18
- use(system[:config].gateway) # ftp/ssh
19
- use(:operations)
20
- use(system[:config].mode) # plain/interactive
21
- end
22
- end
23
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'container'
4
-
5
- class PgExport
6
- Import = PgExport::Container.injector
7
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'dry-types'
4
- require 'pg_export/lib/pg_export/value_objects/dump_file'
5
-
6
- class PgExport
7
- module Types
8
- include Dry::Types()
9
-
10
- DumpName = Strict::String.constrained(format: /.+_20[0-9]{6}_[0-9]{6}\Z/)
11
- DumpType = Types::Coercible::String.enum('plain', 'encrypted')
12
- DumpFile = Types.Instance(PgExport::ValueObjects::DumpFile)
13
- end
14
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- PgExport::Container.boot :config do
4
- init do
5
- require 'logger'
6
- require 'pg_export/lib/pg_export/types'
7
- require 'pg_export/configuration'
8
- end
9
-
10
- start do
11
- config = PgExport::Configuration.build(ENV)
12
-
13
- formatters = {
14
- plain: ->(_, _, _, message) { "#{message}\n" },
15
- 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))
23
- end
24
-
25
- register(:config, memoize: true) { config }
26
- end
27
- end
@@ -1,11 +0,0 @@
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
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- PgExport::Container.boot(:interactive) do
4
- init do
5
- require 'pg_export/lib/pg_export/transactions/import_dump_interactively'
6
- end
7
-
8
- start do
9
- transaction = PgExport::Transactions::ImportDumpInteractively.new
10
- transaction.steps.each do |step|
11
- transaction.subscribe(step.name => target["listeners.interactive.#{step.name}"])
12
- end
13
-
14
- register('transaction', memoize: true) { transaction }
15
- end
16
- end
@@ -1,17 +0,0 @@
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
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- PgExport::Container.boot(:plain) do
4
- init do
5
- require 'pg_export/lib/pg_export/transactions/export_dump'
6
- end
7
-
8
- start do
9
- transaction = PgExport::Transactions::ExportDump.new
10
- transaction.steps.each do |step|
11
- transaction.subscribe(step.name => target["listeners.plain.#{step.name}"])
12
- end
13
-
14
- register('transaction', memoize: true) { transaction }
15
- end
16
- end
@@ -1,11 +0,0 @@
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