Module: Reflection::Rails

Defined in:
lib/reflection/rails.rb

Class Method Summary collapse

Class Method Details

.apply(config, target_directory) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/reflection/rails.rb', line 51

def apply(config, target_directory)
  Reflection.log.debug "Applying database dump.."        
  return unless database_config = read_database_configuration(config)
  options = database_command_line_options(database_config)
  target_file_path = File.join(target_directory.path, '_rails_database_dump.sql')
  %x(mysql #{options} < #{target_file_path})
  clean_target(target_directory)
end

.clean_target(target_directory) ⇒ Object



12
13
14
15
16
17
# File 'lib/reflection/rails.rb', line 12

def clean_target(target_directory)
  target_file_path = File.join(target_directory.path, '_rails_database_dump.sql')
  if File.exist?(target_file_path)
    %x(rm #{target_file_path})          
  end
end

.database_command_line_options(database_config) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/reflection/rails.rb', line 19

def database_command_line_options(database_config)
  options = []
  options <<  "-h #{database_config['host']}"
  options <<  "-u#{database_config['username']}"
  options <<  "-p#{database_config['password']}" if database_config['password'] && !database_config['password'].empty?
  options <<  "#{database_config['database']}"
  options.join(' ')
end

.read_database_configuration(config) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/reflection/rails.rb', line 28

def read_database_configuration(config)
  begin
    database_path = File.join(config.rails_root, "config/database.yml")
    if db_config = YAML.load_file(database_path)[config.rails_environment]
      return db_config
    else
      Reflection.log.error("Rails database configuration for '#{config.rails_environment}' isn't available in #{database_path}")
      return false
    end
  rescue => e
    Reflection.log.error("Error while parsing Rails database configuration: #{e}")
    return false
  end
end

.stash(config, target_directory) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/reflection/rails.rb', line 43

def stash(config, target_directory)
  Reflection.log.debug "Stashing database dump.."
  return unless database_config = read_database_configuration(config)
  options = database_command_line_options(database_config)
  target_file_path = File.join(target_directory.path, '_rails_database_dump.sql')
  %x(mysqldump #{options} --add-drop-table > #{target_file_path})
end

.validate_environment(config) ⇒ Object



5
6
7
8
9
10
# File 'lib/reflection/rails.rb', line 5

def validate_environment(config)
  env_file_path = File.join(config.rails_root, 'config/environments', "#{config.rails_environment}.rb")
  unless File.exist?(env_file_path)
    Reflection::Support.exit_with_error("Rails environment '#{config.rails_environment}' doesn't exist in #{env_file_path}.")
  end
end