Module: UffDbLoader
- Defined in:
- lib/railtie.rb,
lib/configuration.rb,
lib/uff_db_loader.rb,
lib/uff_db_loader/mysql.rb,
lib/uff_db_loader/version.rb,
lib/uff_db_loader/postgresql.rb
Defined Under Namespace
Modules: Mysql, Postgresql
Classes: Configuration, ForbiddenEnvironmentError, InstallationDidNotRunError, Railtie, UnknownDatabaseSystem
Constant Summary
collapse
- TIMESTAMP_FORMAT =
"%Y_%m_%d_%H_%M_%S"
- TIMESTAMP_LENGTH =
Time.now.strftime(TIMESTAMP_FORMAT).size
- VERSION =
"3.2.0"
Class Method Summary
collapse
Class Method Details
.config ⇒ Object
13
14
15
|
# File 'lib/uff_db_loader.rb', line 13
def config
@configuration ||= Configuration.new
end
|
25
26
27
|
# File 'lib/uff_db_loader.rb', line 25
def configure
yield(config)
end
|
.create_database(database_name) ⇒ Object
60
61
62
|
# File 'lib/uff_db_loader.rb', line 60
def create_database(database_name)
config.database_system.create_database(database_name)
end
|
.create_initializer ⇒ Object
132
133
134
135
136
137
138
139
140
141
142
|
# File 'lib/uff_db_loader.rb', line 132
def create_initializer
template = ERB.new(File.read(initializer_template_path))
File.write(
initializer_path,
template.result_with_hash(
used_database_system: used_database_system,
environments: environments
)
)
end
|
.current_database_name ⇒ Object
93
94
95
96
97
|
# File 'lib/uff_db_loader.rb', line 93
def current_database_name
File.read(database_name_file).strip.presence
rescue IOError, Errno::ENOENT
end
|
.databases ⇒ Object
68
69
70
71
72
73
|
# File 'lib/uff_db_loader.rb', line 68
def databases
config.database_system.list_databases
.select { |line| line =~ /#{config.app_name}_(#{config.environments.join("|")})_(\d|_)+/ }
.sort_by { |database| database[-TIMESTAMP_LENGTH..] }
.reverse
end
|
.drop_database(database_name) ⇒ Object
64
65
66
|
# File 'lib/uff_db_loader.rb', line 64
def drop_database(database_name)
config.database_system.drop_database(database_name)
end
|
.dump_from(environment) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/uff_db_loader.rb', line 33
def dump_from(environment)
FileUtils.mkdir_p(config.dumps_directory)
log "⬇️ Creating dump ..."
target = dump_file_path(Time.now.strftime("#{config.app_name}_#{environment}_#{TIMESTAMP_FORMAT}"))
command_successful = system(dump_command(environment, target))
raise "Command did not run succesful: #{dump_command(environment, target)}" unless command_successful
log "✅ Succesfully dumped to #{target}"
target
end
|
.dumps ⇒ Object
75
76
77
78
79
80
81
|
# File 'lib/uff_db_loader.rb', line 75
def dumps
Dir
.glob("#{config.dumps_directory}/#{config.app_name}*")
.map { |f| File.basename(f, ".*") }
.sort_by { |dump| dump[-TIMESTAMP_LENGTH..] }
.reverse
end
|
.ensure_installation! ⇒ Object
103
104
105
106
107
|
# File 'lib/uff_db_loader.rb', line 103
def ensure_installation!
unless File.read(UffDbLoader.config.database_config_file).include?("UffDbLoader.current_database_name")
raise InstallationDidNotRunError, "Please run bin/rails uff_db_loader:install"
end
end
|
.ensure_valid_environment!(environment) ⇒ Object
48
49
50
51
52
|
# File 'lib/uff_db_loader.rb', line 48
def ensure_valid_environment!(environment)
unless config.environments.include?(environment)
raise ForbiddenEnvironmentError, "Invalid environment: #{environment}."
end
end
|
.initializer_path ⇒ Object
128
129
130
|
# File 'lib/uff_db_loader.rb', line 128
def initializer_path
Rails.root.join("config", "initializers", "uff_db_loader.rb")
end
|
.load_dump_into_database(database_name) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/uff_db_loader.rb', line 109
def load_dump_into_database(database_name)
UffDbLoader.drop_database(database_name)
UffDbLoader.create_database(database_name)
log "🗂 Created database #{database_name}"
dump_file_path = dump_file_path(database_name)
command_successful = system(restore_command(database_name, dump_file_path))
raise "Command did not run succesful: #{restore_command(database_name, dump_file_path)}" unless command_successful
log "✅ Succesfully loaded #{dump_file_path} into #{database_name}"
remember_database_name(database_name)
restart_rails_server
log "♻️ Restarted rails server with new database."
end
|
.log(message) ⇒ Object
17
18
19
|
# File 'lib/uff_db_loader.rb', line 17
def log(message)
puts "[UffDbLoader] #{message}"
end
|
.prune_dump_directory ⇒ Object
54
55
56
57
58
|
# File 'lib/uff_db_loader.rb', line 54
def prune_dump_directory
FileUtils.rm_f(
FileList["#{config.dumps_directory}/*"].exclude(dump_file_path(current_database_name)).to_a
)
end
|
.remember_database_name(database_name) ⇒ Object
99
100
101
|
# File 'lib/uff_db_loader.rb', line 99
def remember_database_name(database_name)
File.write(database_name_file, database_name)
end
|
.reset ⇒ Object
21
22
23
|
# File 'lib/uff_db_loader.rb', line 21
def reset
@configuration = Configuration.new
end
|
.restart_rails_server ⇒ Object
29
30
31
|
# File 'lib/uff_db_loader.rb', line 29
def restart_rails_server
system("bin/rails restart")
end
|
.setup_dynamic_database_name_in_config ⇒ Object
83
84
85
86
87
88
89
90
91
|
# File 'lib/uff_db_loader.rb', line 83
def setup_dynamic_database_name_in_config
old_database_name = Rails.configuration.database_configuration["development"]["database"]
return false if old_database_name.nil?
old_config = File.read(UffDbLoader.config.database_config_file)
new_config = old_config.sub(old_database_name, database_name_template(old_database_name))
File.write(UffDbLoader.config.database_config_file, new_config)
end
|