namespace :db do

desc "reborn database"
task :fuck do
  begin
    Rake::Task['db:environment:set'].invoke('RAILS_ENV=development')
    Rake::Task['db:drop'].invoke
  rescue Exception => e
    p e.message
  end
  Rake::Task['db:create'].invoke
  Rake::Task['db:migrate'].invoke
  Rake::Task['db:seed'].invoke
  # страны города тоже в посев
  Rake::Task['geodata:cc'].invoke
end

end

namespace :geodata do

desc "countries cities deploy"
task :cc do
  `mysqlimport -u#{CONFIG[:db][:login]} -p#{CONFIG[:db][:pass]} --local --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by='\n' #{CONFIG[:db][:name]} '#{Rails.root}/geodata/countries.csv'`
  `mysqlimport -u#{CONFIG[:db][:login]} -p#{CONFIG[:db][:pass]} --local --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by='\n' #{CONFIG[:db][:name]} '#{Rails.root}/geodata/cities.csv'`
end

end

namespace :cap do

desc 'корректирование конфигурационных файлов для деплоя'
task :conf_update do
  # загрузка конфига в полноценный символьный хэш
  require 'active_support/core_ext/hash'
  CAP_CONFIG = YAML.load_file(File.expand_path('config/capistrano.yml', Rails.root)).with_indifferent_access

  # получение девственных файлов
  CAP_CONFIG[:sh][:files].each do |filename|
    # получение девственных файлов
    sh "cp #{CAP_CONFIG[:sh][:virgin_dir]}#{filename} #{CAP_CONFIG[:conf][:dir]}"

    path = "#{CAP_CONFIG[:conf][:dir]}#{filename}"
    if File.exist? path
      f = open(path, 'r+')
      str = f.read
      # замена переменных на реальные значения
      CAP_CONFIG[:conf][:vars].each do |variable, value|
        str.gsub! Regexp.new(variable, Regexp::MULTILINE), value
      end
      # теперь ты опустошитель, брат
      f.truncate 0
      # перемотка
      f.rewind
      # запись
      f.write str
      f.close
    else
      err path
    end
  end

  CAP_CONFIG[:conf][:files].each do |k, filename|
    # получение девственных файлов
    sh "cp #{CAP_CONFIG[:conf][:virgin_dir]}#{filename} #{CAP_CONFIG[:conf][:dir]}#{filename}"

    path = "#{CAP_CONFIG[:conf][:dir]}#{filename}"
    if File.exist? path
      f = open(path, 'r+')
      str = f.read
      # замена переменных на реальные значения
      CAP_CONFIG[:conf][:vars].each do |variable, value|
        str.gsub! Regexp.new(variable, Regexp::MULTILINE), value
      end
      # теперь ты опустошитель, брат
      f.truncate 0
      # перемотка
      f.rewind
      # запись
      f.write str
      f.close
    else
      err path
    end
  end

end

end