pg_export 0.5.1 → 0.6.0

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +2 -8
  4. data/bin/pg_export +39 -19
  5. data/lib/pg_export/aes/base.rb +47 -0
  6. data/lib/pg_export/aes/decryptor.rb +13 -0
  7. data/lib/pg_export/aes/encryptor.rb +13 -0
  8. data/lib/pg_export/aes.rb +3 -0
  9. data/lib/pg_export/bash/adapter.rb +31 -0
  10. data/lib/pg_export/bash/factory.rb +23 -0
  11. data/lib/pg_export/bash/repository.rb +18 -0
  12. data/lib/pg_export/boot_container.rb +69 -0
  13. data/lib/pg_export/build_logger.rb +19 -0
  14. data/lib/pg_export/configuration.rb +11 -53
  15. data/lib/pg_export/{entities/dump.rb → dump.rb} +18 -4
  16. data/lib/pg_export/errors.rb +3 -3
  17. data/lib/pg_export/ftp/adapter.rb +41 -0
  18. data/lib/pg_export/ftp/connection.rb +40 -0
  19. data/lib/pg_export/ftp/repository.rb +40 -0
  20. data/lib/pg_export/roles/colourable_string.rb +19 -0
  21. data/lib/pg_export/roles/human_readable.rb +17 -0
  22. data/lib/pg_export/roles/interactive.rb +98 -0
  23. data/lib/pg_export/roles/validatable.rb +24 -0
  24. data/lib/pg_export/services/create_and_export_dump.rb +20 -0
  25. data/lib/pg_export/version.rb +1 -1
  26. data/lib/pg_export.rb +18 -56
  27. data/pg_export.gemspec +2 -1
  28. metadata +49 -31
  29. data/lib/pg_export/includable_modules/colourable_string.rb +0 -17
  30. data/lib/pg_export/includable_modules/dump/size_human.rb +0 -15
  31. data/lib/pg_export/includable_modules/interactive.rb +0 -97
  32. data/lib/pg_export/includable_modules/logging.rb +0 -31
  33. data/lib/pg_export/includable_modules/services_container.rb +0 -41
  34. data/lib/pg_export/services/aes/base.rb +0 -26
  35. data/lib/pg_export/services/aes/decryptor.rb +0 -12
  36. data/lib/pg_export/services/aes/encryptor.rb +0 -12
  37. data/lib/pg_export/services/aes.rb +0 -28
  38. data/lib/pg_export/services/bash_utils.rb +0 -32
  39. data/lib/pg_export/services/dump_storage.rb +0 -48
  40. data/lib/pg_export/services/ftp_adapter.rb +0 -38
  41. data/lib/pg_export/services/ftp_connection.rb +0 -28
@@ -1,32 +0,0 @@
1
- class PgExport
2
- class BashUtils
3
- include Logging
4
-
5
- def initialize(database_name)
6
- @database_name = database_name
7
- end
8
-
9
- def create_dump
10
- dump = Dump.new('Dump')
11
- Open3.popen3("pg_dump -Fc --file #{dump.path} #{database_name}") do |_, _, err|
12
- error = err.read
13
- raise PgDumpError, error unless error.empty?
14
- end
15
- logger.info "Create #{dump}"
16
- dump
17
- end
18
-
19
- def restore_dump(dump, restore_database_name)
20
- Open3.popen3("pg_restore -c -d #{restore_database_name} #{dump.path}") do |_, _, err|
21
- error = err.read
22
- raise PgRestoreError, error if /FATAL/ =~ error
23
- end
24
- logger.info "Restore #{dump}"
25
- self
26
- end
27
-
28
- private
29
-
30
- attr_reader :database_name
31
- end
32
- end
@@ -1,48 +0,0 @@
1
- class PgExport
2
- class DumpStorage
3
- include Logging
4
-
5
- TIMESTAMP = '_%Y%m%d_%H%M%S'.freeze
6
- TIMESTAMP_REGEX = '[0-9]{8}_[0-9]{6}'.freeze
7
-
8
- def initialize(ftp_adapter, name, keep)
9
- @ftp_adapter, @name, @keep = ftp_adapter, name, keep
10
- end
11
-
12
- def upload(dump)
13
- dump_name = timestamped_name(dump)
14
- ftp_adapter.upload_file(dump.path, dump_name)
15
- logger.info "Upload #{dump} #{dump_name} to #{ftp_adapter}"
16
- end
17
-
18
- def download(name)
19
- dump = Dump.new('Encrypted Dump')
20
- ftp_adapter.download_file(dump.path, name)
21
- logger.info "Download #{dump} #{name} from #{ftp_adapter}"
22
- dump
23
- end
24
-
25
- def remove_old
26
- find_by_name(name).drop(keep.to_i).each do |filename|
27
- ftp_adapter.delete(filename)
28
- logger.info "Remove #{filename} from #{ftp_adapter}"
29
- end
30
- end
31
-
32
- def find_by_name(s)
33
- ftp_adapter.list(s + '_*')
34
- end
35
-
36
- def all
37
- ftp_adapter.list('*')
38
- end
39
-
40
- private
41
-
42
- attr_reader :ftp_adapter, :name, :keep
43
-
44
- def timestamped_name(dump)
45
- name + Time.now.strftime(TIMESTAMP) + dump.ext
46
- end
47
- end
48
- end
@@ -1,38 +0,0 @@
1
- class PgExport
2
- class FtpAdapter
3
- extend Forwardable
4
-
5
- CHUNK_SIZE = (2**16).freeze
6
-
7
- def_delegators :connection, :ftp, :host
8
-
9
- def initialize(connection)
10
- @connection = connection
11
- ObjectSpace.define_finalizer(self, proc { connection.close })
12
- end
13
-
14
- def list(regex_string)
15
- ftp.list(regex_string).map { |item| item.split(' ').last }.sort.reverse
16
- end
17
-
18
- def delete(filename)
19
- ftp.delete(filename)
20
- end
21
-
22
- def upload_file(path, name)
23
- ftp.putbinaryfile(path.to_s, name, CHUNK_SIZE)
24
- end
25
-
26
- def download_file(path, name)
27
- ftp.getbinaryfile(name, path.to_s, CHUNK_SIZE)
28
- end
29
-
30
- def to_s
31
- host
32
- end
33
-
34
- private
35
-
36
- attr_reader :connection
37
- end
38
- end
@@ -1,28 +0,0 @@
1
- class PgExport
2
- class FtpConnection
3
- include Logging
4
-
5
- attr_reader :ftp, :host
6
-
7
- def initialize(host:, user:, password:)
8
- @host, @user, @password = host, user, password
9
- end
10
-
11
- def open
12
- @ftp = Net::FTP.new(host, user, password)
13
- @ftp.passive = true
14
- logger.info "Connect to #{host}"
15
- self
16
- end
17
-
18
- def close
19
- @ftp.close
20
- logger.info 'Close FTP'
21
- self
22
- end
23
-
24
- private
25
-
26
- attr_reader :user, :password
27
- end
28
- end