pg_export 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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