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
@@ -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