Module: Thredded::DbTools
- Defined in:
- lib/thredded/db_tools.rb
Constant Summary collapse
- MIGRATION_SPEC_SOURCE_VERSION =
'v0.8'
Class Method Summary collapse
- .adapter ⇒ Object
- .config ⇒ Object
- .database ⇒ Object
- .dump(to = dump_file) ⇒ Object
- .dump_file ⇒ Object
- .host ⇒ Object
-
.migrate(paths:, quiet:, &filter) ⇒ Object
Runs the migrations in the given paths.
- .password ⇒ Object
- .restore(from = dump_file) ⇒ Object
- .silence_active_record ⇒ Object
- .username ⇒ Object
Class Method Details
.adapter ⇒ Object
82 83 84 |
# File 'lib/thredded/db_tools.rb', line 82 def adapter config['adapter'] end |
.config ⇒ Object
78 79 80 |
# File 'lib/thredded/db_tools.rb', line 78 def config @config ||= Rails.configuration.database_configuration[Rails.env] end |
.database ⇒ Object
86 87 88 |
# File 'lib/thredded/db_tools.rb', line 86 def database config['database'] end |
.dump(to = dump_file) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/thredded/db_tools.rb', line 32 def dump(to = dump_file) case adapter when /sqlite/i system ['sqlite3', Rails.root.join(database), '.dump', '>', to].join(' ') when /postgres/i cmd = "pg_dump --dbname=postgresql://#{username}:#{password}@#{host}:5432/#{database}" \ "--verbose --clean --no-owner --no-acl --format=c > #{to}" system cmd when /mysql/i system("mysqldump --user #{username} -p#{password} #{database} > #{to}") end end |
.dump_file ⇒ Object
28 29 30 |
# File 'lib/thredded/db_tools.rb', line 28 def dump_file File.("../../../spec/migration/#{MIGRATION_SPEC_SOURCE_VERSION}.#{adapter}.dump", __FILE__) end |
.host ⇒ Object
98 99 100 |
# File 'lib/thredded/db_tools.rb', line 98 def host config['host'] end |
.migrate(paths:, quiet:, &filter) ⇒ Object
Runs the migrations in the given paths.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/thredded/db_tools.rb', line 9 def migrate(paths:, quiet:, &filter) verbose_was = ActiveRecord::Migration.verbose ActiveRecord::Migration.verbose = !quiet migrate = lambda do if Rails::VERSION::STRING >= '5.2' ActiveRecord::MigrationContext.new(paths).migrate(nil, &filter) else ActiveRecord::Migrator.migrate(paths, &filter) end end if quiet silence_active_record(&migrate) else migrate.call end ensure ActiveRecord::Migration.verbose = verbose_was end |
.password ⇒ Object
94 95 96 |
# File 'lib/thredded/db_tools.rb', line 94 def password config['password'] end |
.restore(from = dump_file) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/thredded/db_tools.rb', line 45 def restore(from = dump_file) case adapter when /postgres/i cmd = [ 'pg_restore --verbose --clean --no-owner --no-acl', "--dbname=postgresql://#{username}:#{password}@#{host}:5432/#{database}", from, '>', Rails.root.join('log', 'restore.log') ].join(' ') system cmd when /mysql/i, /sqlite/i connection = ActiveRecord::Base.connection statements = File.read(from).split(/;$/) statements.pop silence_active_record do ActiveRecord::Base.transaction do statements.each do |statement| connection.execute(statement) unless statement =~ /(BEGIN TRANSACTION|COMMIT)/ end end end end end |
.silence_active_record ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/thredded/db_tools.rb', line 70 def silence_active_record was = ActiveRecord::Base.logger.level ActiveRecord::Base.logger.level = Logger::WARN yield ensure ActiveRecord::Base.logger.level = was end |
.username ⇒ Object
90 91 92 |
# File 'lib/thredded/db_tools.rb', line 90 def username config['username'] end |