uff_db_loader 1.1.1 → 1.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5f7c50d83a5de12e47520cccc509935f3944ae5d4aec252e27a085483487833
4
- data.tar.gz: 961477955168e96b46559142a99d5ff139c4a865920ad32d006beec1a9f0482a
3
+ metadata.gz: b64fcfeeeda9c2895262cabcf104828511ae1a17abe6c906c040f5b132c48bc3
4
+ data.tar.gz: 166953900412522babe8958ddbadef253b8e3558c487d67c53962679252dbd29
5
5
  SHA512:
6
- metadata.gz: ecc86542755c63a15f5b617af89816632bda117dd24fc2e8eb145994ef6b5eef33a8cae83e907ab5279f0ac49135e7187555112df5d57f267b8b11380d4ee93f
7
- data.tar.gz: dafc87709eae316b58a94b92894dff04357fcd750b3056114873b8fd6ed5ef42cae3655db24f44b3bf978a39933292b276f9a632c00c9eedb46c7fbccadfc927
6
+ metadata.gz: bf80b9b22d70bf31fe2b8f2d4c9d2f84e9b23a5448e2a94fcdbfe43fdd5a4155a06da935846f3df41cf34528b1e71a17dcc697bce68a5263e09becad424ae31c
7
+ data.tar.gz: 74b533e7f45a5b5292d74c7660709f14b60f2a3c8dfa61f390314c4145f7cdcc00f079cd3c253f24f44599518b16eb00ea6edcb37640139f2e1ae9b214b64c19
data/README.md CHANGED
@@ -43,7 +43,7 @@ Make sure the app's database user has the superuser role. Otherwise the app will
43
43
 
44
44
  ## Usage
45
45
 
46
- `uff_db_loader` provides `rails remote_database:dump` and `rails remote_database:load` which will prompt for a configured environment.
46
+ `uff_db_loader` provides `rails uff_db_loader:dump` and `rails uff_db_loader:load` which will prompt for a configured environment.
47
47
  `dump` will only create and download a current database dump, while `load`, will do the same and restore the database content into a new database and gives instructions on how to use it in development.
48
48
 
49
49
 
@@ -5,44 +5,19 @@ require "tty-prompt"
5
5
  namespace :remote_database do
6
6
  desc "Dumps a remote database to #{UffDbLoader.config.dumps_directory}"
7
7
  task dump: :environment do
8
- prompt = TTY::Prompt.new
9
- environment = prompt.select("Which environment should we get the dump from?", UffDbLoader.config.environments)
10
- UffDbLoader.ensure_valid_environment!(environment)
11
- UffDbLoader.dump_from(environment)
8
+ puts "🧐 Please note this task is called 'uff_db_loader:dump' now."
9
+ Rake::Task["uff_db_loader:dump"].invoke
12
10
  end
13
11
 
14
12
  desc "Gets a dump from remote and loads it into the local database"
15
13
  task load: :environment do
16
- prompt = TTY::Prompt.new
17
- environment = prompt.select("Which environment should we get the dump from?", UffDbLoader.config.environments)
18
- UffDbLoader.ensure_valid_environment!(environment)
19
- result_file_path = UffDbLoader.dump_from(environment)
20
-
21
- puts "🤓 Reading from to #{result_file_path}"
22
-
23
- database_name = File.basename(result_file_path, ".*")
24
- UffDbLoader.create_database(database_name)
25
-
26
- puts "🗂 Created database #{database_name}"
27
-
28
- command_successful = system(UffDbLoader.restore_command(database_name, result_file_path))
29
- raise "Command did not run succesful: #{UffDbLoader.restore_command(database_name, result_file_path)}" unless command_successful
30
-
31
- puts "✅ Succesfully loaded #{result_file_path} into #{database_name}"
32
-
33
- puts "💩 Because YAML is a wonderful format, you need to adapt your config file by hand."
34
- puts "🆗 Go to #{UffDbLoader.config.database_config_file} and change the development database value to: #{database_name}"
35
- puts "🧑🏾‍🏫 Don't forgot to restart the Rails server after changing the database config (`rails restart`)"
14
+ puts "🧐 Please note this task is called 'uff_db_loader:load' now."
15
+ Rake::Task["uff_db_loader:load"].invoke
36
16
  end
37
17
 
38
18
  desc "Delete all downloaded db dumps and emove all databases created by UffDbLoader"
39
19
  task prune: :environment do
40
- UffDbLoader.databases.each do |database_name|
41
- puts "Dropping #{database_name}"
42
- UffDbLoader.drop_database(database_name)
43
- end
44
-
45
- puts "Removing dumps from #{UffDbLoader.config.dumps_directory}"
46
- UffDbLoader.prune_dump_directory
20
+ puts "🧐 Please note this task is called 'uff_db_loader:prune' now."
21
+ Rake::Task["uff_db_loader:prune"].invoke
47
22
  end
48
23
  end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-prompt"
4
+
5
+ namespace :uff_db_loader do
6
+ desc "Install uff_db_loader"
7
+ task install: :environment do
8
+ UffDbLoader.remember_database_name("") # ensure database file exists
9
+
10
+ if UffDbLoader.setup_dynamic_database_name_in_config
11
+ puts "🤖 Updated #{UffDbLoader.config.database_config_file}. Happy hacking, beep boop!"
12
+ else
13
+ puts "💩 Because YAML is a wonderful format, you need to adapt your config file by hand."
14
+ puts "🆗 Go to #{UffDbLoader.config.database_config_file} and change the development database value to: #{UffDbLoader.database_name_template("default_database_name")}"
15
+ end
16
+ end
17
+
18
+ desc "Dumps a remote database to #{UffDbLoader.config.dumps_directory}"
19
+ task dump: :environment do
20
+ prompt = TTY::Prompt.new
21
+ environment = prompt.select("Which environment should we get the dump from?", UffDbLoader.config.environments)
22
+ UffDbLoader.ensure_valid_environment!(environment)
23
+ UffDbLoader.dump_from(environment)
24
+ end
25
+
26
+ desc "Gets a dump from remote and loads it into the local database"
27
+ task load: :environment do
28
+ UffDbLoader.ensure_installation!
29
+
30
+ prompt = TTY::Prompt.new
31
+ environment = prompt.select("Which environment should we get the dump from?", UffDbLoader.config.environments)
32
+ UffDbLoader.ensure_valid_environment!(environment)
33
+ result_file_path = UffDbLoader.dump_from(environment)
34
+
35
+ puts "🤓 Reading from to #{result_file_path}"
36
+
37
+ database_name = File.basename(result_file_path, ".*")
38
+ UffDbLoader.load_dump_into_database(database_name)
39
+ end
40
+
41
+ desc "Loads an existing dump into the local database"
42
+ task restore: :environment do
43
+ UffDbLoader.ensure_installation!
44
+
45
+ prompt = TTY::Prompt.new
46
+ existing_dumps = Dir.glob("#{UffDbLoader.config.dumps_directory}/#{UffDbLoader.config.app_name}*").map { |f| File.basename(f, ".*") }
47
+ database_name = prompt.select("Which dump should be restored?", existing_dumps)
48
+
49
+ UffDbLoader.load_dump_into_database(database_name)
50
+ end
51
+
52
+ desc "Switches to an existing database"
53
+ task switch: :environment do
54
+ UffDbLoader.ensure_installation!
55
+
56
+ prompt = TTY::Prompt.new
57
+ databases = UffDbLoader.databases
58
+ new_database = prompt.select("Which database do you want to switch to?", databases)
59
+
60
+ UffDbLoader.remember_database_name(new_database)
61
+ system("bin/rails restart")
62
+
63
+ puts "♻️ Restarted rails server with new database."
64
+ end
65
+
66
+ desc "Delete all downloaded db dumps and remove all databases created by UffDbLoader"
67
+ task prune: :environment do
68
+ UffDbLoader.databases.each do |database_name|
69
+ puts "Dropping #{database_name}"
70
+ UffDbLoader.drop_database(database_name)
71
+ end
72
+
73
+ puts "Removing dumps from #{UffDbLoader.config.dumps_directory}"
74
+ UffDbLoader.prune_dump_directory
75
+ end
76
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UffDbLoader
4
- VERSION = "1.1.1"
4
+ VERSION = "1.4.0"
5
5
  end
data/lib/uff_db_loader.rb CHANGED
@@ -10,6 +10,10 @@ module UffDbLoader
10
10
  @configuration ||= Configuration.new
11
11
  end
12
12
 
13
+ def self.database_name_file
14
+ Rails.root.join("tmp", "uff_db_loader_database_name")
15
+ end
16
+
13
17
  def self.reset
14
18
  @configuration = Configuration.new
15
19
  end
@@ -80,7 +84,65 @@ module UffDbLoader
80
84
  end
81
85
  end
82
86
 
87
+ def self.database_name_template(old_database_name)
88
+ "<%= UffDbLoader.current_database_name || '#{old_database_name}' %>"
89
+ end
90
+
91
+ def self.setup_dynamic_database_name_in_config
92
+ old_database_name = Rails.configuration.database_configuration["development"]["database"]
93
+
94
+ return false if old_database_name.nil?
95
+
96
+ old_config = File.read(UffDbLoader.config.database_config_file)
97
+ new_config = old_config.sub(old_database_name, database_name_template(old_database_name))
98
+ File.write(UffDbLoader.config.database_config_file, new_config)
99
+ end
100
+
101
+ def self.current_database_name
102
+ File.read(database_name_file).strip.presence
103
+ rescue IOError, Errno::ENOENT => e
104
+ puts "Could not read #{database_name_file}. #{e.message}"
105
+ end
106
+
107
+ def self.remember_database_name(database_name)
108
+ File.write(database_name_file, database_name)
109
+ end
110
+
111
+ def self.ensure_installation!
112
+ unless File.read(UffDbLoader.config.database_config_file).include?("UffDbLoader.current_database_name")
113
+ raise InstallationDidNotRunError, "Please run bin/rails uff_db_loader:install"
114
+ end
115
+ end
116
+
117
+ def self.dump_file_path(database_name)
118
+ File.join(
119
+ config.dumps_directory,
120
+ "#{database_name}.#{config.database_system.dump_extension}"
121
+ )
122
+ end
123
+
124
+ def self.load_dump_into_database(database_name)
125
+ UffDbLoader.drop_database(database_name)
126
+ UffDbLoader.create_database(database_name)
127
+
128
+ puts "🗂 Created database #{database_name}"
129
+
130
+ dump_file_path = dump_file_path(database_name)
131
+
132
+ command_successful = system(restore_command(database_name, dump_file_path))
133
+ raise "Command did not run succesful: #{restore_command(database_name, dump_file_path)}" unless command_successful
134
+
135
+ puts "✅ Succesfully loaded #{dump_file_path} into #{database_name}"
136
+
137
+ remember_database_name(database_name)
138
+ system("bin/rails restart")
139
+
140
+ puts "♻️ Restarted rails server with new database."
141
+ end
142
+
83
143
  class ForbiddenEnvironmentError < StandardError; end
84
144
 
85
145
  class UnknownDatabaseSystem < StandardError; end
146
+
147
+ class InstallationDidNotRunError < StandardError; end
86
148
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uff_db_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Hellwig
8
8
  - Fynn Heintz
9
9
  - Robin Mehner
10
- autorequire:
10
+ autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
13
  date: 2022-08-25 00:00:00.000000000 Z
@@ -80,6 +80,7 @@ files:
80
80
  - lib/uff_db_loader/mysql.rb
81
81
  - lib/uff_db_loader/postgresql.rb
82
82
  - lib/uff_db_loader/tasks/remote_database.rake
83
+ - lib/uff_db_loader/tasks/uff_db_loader.rake
83
84
  - lib/uff_db_loader/version.rb
84
85
  - uff_db_loader.gemspec
85
86
  homepage: https://github.com/rmehner/uff_db_loader
@@ -87,10 +88,10 @@ licenses:
87
88
  - MIT
88
89
  metadata:
89
90
  bug_tracker_uri: https://github.com/rmehner/uff_db_loader/issues
90
- changelog_uri: https://github.com/rmehner/uff_db_loader/releases/tag/1.1.1
91
+ changelog_uri: https://github.com/rmehner/uff_db_loader/releases/tag/1.4.0
91
92
  homepage_uri: https://github.com/rmehner/uff_db_loader
92
- source_code_uri: https://github.com/rmehner/uff_db_loader/tree/1.1.1
93
- post_install_message:
93
+ source_code_uri: https://github.com/rmehner/uff_db_loader/tree/1.4.0
94
+ post_install_message:
94
95
  rdoc_options: []
95
96
  require_paths:
96
97
  - lib
@@ -105,8 +106,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
106
  - !ruby/object:Gem::Version
106
107
  version: '0'
107
108
  requirements: []
108
- rubygems_version: 3.3.8
109
- signing_key:
109
+ rubygems_version: 3.0.3
110
+ signing_key:
110
111
  specification_version: 4
111
112
  summary: Allows to dump, download and restore databases from docker servers.
112
113
  test_files: []