Module: Thredded::DbTools

Defined in:
lib/thredded/db_tools.rb

Constant Summary collapse

MIGRATION_SPEC_SOURCE_VERSION =
'v0.8'

Class Method Summary collapse

Class Method Details

.adapterObject



82
83
84
# File 'lib/thredded/db_tools.rb', line 82

def adapter
  config['adapter']
end

.configObject



78
79
80
# File 'lib/thredded/db_tools.rb', line 78

def config
  @config ||= Rails.configuration.database_configuration[Rails.env]
end

.databaseObject



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_fileObject



28
29
30
# File 'lib/thredded/db_tools.rb', line 28

def dump_file
  File.expand_path("../../../spec/migration/#{MIGRATION_SPEC_SOURCE_VERSION}.#{adapter}.dump", __FILE__)
end

.hostObject



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

.passwordObject



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_recordObject



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

.usernameObject



90
91
92
# File 'lib/thredded/db_tools.rb', line 90

def username
  config['username']
end