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, DefaultDatabaseNotFoundError, ForbiddenEnvironmentError, InstallationDidNotRunError, Railtie, UnknownDatabaseSystem
Constant Summary
collapse
- TIMESTAMP_FORMAT =
"%Y_%m_%d_%H_%M_%S"
- TIMESTAMP_LENGTH =
Time.now.strftime(TIMESTAMP_FORMAT).size
- VERSION =
"4.1.1"
Class Method Summary
collapse
Class Method Details
.config ⇒ Object
15
16
17
|
# File 'lib/uff_db_loader.rb', line 15
def config
@configuration ||= Configuration.new
end
|
27
28
29
|
# File 'lib/uff_db_loader.rb', line 27
def configure
yield(config)
end
|
.connect_to_default_database ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/uff_db_loader.rb', line 35
def connect_to_default_database
database_config = Rails.configuration.database_configuration["development"]
remember_database_name("")
ActiveRecord::Base.remove_connection
ActiveRecord::Base.establish_connection(database_config)
ActiveRecord::Base.connection
rescue ActiveRecord::NoDatabaseError
database_name = database_config["database"].inspect
raise DefaultDatabaseNotFoundError,
"Default local database #{database_name} does not exist. Run `bin/rails db:create` before using UffDbLoader."
end
|
.create_database(database_name) ⇒ Object
77
78
79
|
# File 'lib/uff_db_loader.rb', line 77
def create_database(database_name)
config.database_system.create_database(database_name)
end
|
.create_initializer ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
|
# File 'lib/uff_db_loader.rb', line 149
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
110
111
112
113
114
|
# File 'lib/uff_db_loader.rb', line 110
def current_database_name
File.read(database_name_file).strip.presence
rescue IOError, Errno::ENOENT
end
|
.databases ⇒ Object
85
86
87
88
89
90
|
# File 'lib/uff_db_loader.rb', line 85
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
81
82
83
|
# File 'lib/uff_db_loader.rb', line 81
def drop_database(database_name)
config.database_system.drop_database(database_name)
end
|
.dump_from(environment) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/uff_db_loader.rb', line 50
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
92
93
94
95
96
97
98
|
# File 'lib/uff_db_loader.rb', line 92
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
120
121
122
123
124
|
# File 'lib/uff_db_loader.rb', line 120
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
65
66
67
68
69
|
# File 'lib/uff_db_loader.rb', line 65
def ensure_valid_environment!(environment)
unless config.environments.include?(environment)
raise ForbiddenEnvironmentError, "Invalid environment: #{environment}."
end
end
|
.initializer_path ⇒ Object
145
146
147
|
# File 'lib/uff_db_loader.rb', line 145
def initializer_path
Rails.root.join("config", "initializers", "uff_db_loader.rb")
end
|
.load_dump_into_database(database_name) ⇒ Object
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# File 'lib/uff_db_loader.rb', line 126
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
19
20
21
|
# File 'lib/uff_db_loader.rb', line 19
def log(message)
puts "[UffDbLoader] #{message}"
end
|
.prune_dump_directory ⇒ Object
71
72
73
74
75
|
# File 'lib/uff_db_loader.rb', line 71
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
116
117
118
|
# File 'lib/uff_db_loader.rb', line 116
def remember_database_name(database_name)
File.write(database_name_file, database_name)
end
|
.reset ⇒ Object
23
24
25
|
# File 'lib/uff_db_loader.rb', line 23
def reset
@configuration = Configuration.new
end
|
.restart_rails_server ⇒ Object
31
32
33
|
# File 'lib/uff_db_loader.rb', line 31
def restart_rails_server
system("bin/rails restart")
end
|
.setup_dynamic_database_name_in_config ⇒ Object
100
101
102
103
104
105
106
107
108
|
# File 'lib/uff_db_loader.rb', line 100
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
|