class Ferry::Exporter

Public Instance Methods

to_csv(environment, model) click to toggle source
# File lib/ferry/exporter.rb, line 6
def to_csv(environment, model)
  db_type = db_connect(environment)
  FileUtils.mkdir "db" unless Dir["db"].present?
  FileUtils.mkdir "db/csv" unless Dir["db/csv"].present?
  homedir = "db/csv/#{environment}"
  FileUtils.mkdir homedir unless Dir[homedir].present?
  table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
  CSV.open("#{homedir}/#{model}.csv", "w") do |csv|
    case db_type
    when 'sqlite3'
      csv_bar = ProgressBar.new("to_csv", table.length)
      keys = table[0].keys.first(table[0].length / 2)
      csv << keys
      table.each do |row|
        csv << row.values_at(*keys)
        csv_bar.inc
      end
    when 'postgresql'
      csv_bar = ProgressBar.new("to_csv", table.num_tuples)
      keys = table[0].keys
      csv << keys
      table.each do |row|
        csv << row.values_at(*keys)
        csv_bar.inc
      end
    when 'mysql2'
      csv_bar = ProgressBar.new("to_csv", table.count)
      db_config = YAML::load(IO.read("config/database.yml"))
      columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{db_config[environment]['database']}' AND `TABLE_NAME`='#{model}';")
      col_names=[]
      columns.each do |col|
        col_names.append(col[0])
      end
      csv << col_names
      table.each do |row|
        csv << row
        csv_bar.inc
      end
    else
      raise "#{db_type} is not supported by ferry at this time"
      return false
    end
  end
  puts ""
  puts "exported to db/csv/#{environment}"
end
to_json(environment, model) click to toggle source
# File lib/ferry/exporter.rb, line 118
def to_json(environment, model)
  db_type = db_connect(environment)
  FileUtils.mkdir "db" unless Dir["db"].present?
  FileUtils.mkdir "db/json" unless Dir["db/json"].present?
  homedir = "db/json/#{environment}"
  FileUtils.mkdir homedir unless Dir[homedir].present?
  table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
  db_config = YAML::load(IO.read("config/database.yml"))
  if db_type == "mysql2"
    keys = []
    columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{db_config[environment]['database']}' AND `TABLE_NAME`='#{model}';")
    columns.each do |col|
      keys.append(col[0])
    end
    table_in_json = []
    table.each do |record|
      record_json = {}
      keys.each do |key|
        record_json[key] = record[keys.index(key)]
      end
      table_in_json << record_json
    end
    File.open("#{homedir}/#{model}.json",'a') do |file|
      file.write(table_in_json.to_json)
    end
  else
    File.open("#{homedir}/#{model}.json",'a') do |file|
      file.write(table.to_json)
    end
  end
end
to_yaml(environment, model) click to toggle source
# File lib/ferry/exporter.rb, line 53
def to_yaml(environment, model)
  db_type = db_connect(environment)
  FileUtils.mkdir "db" unless Dir["db"].present?
  FileUtils.mkdir "db/yaml" unless Dir["db/yaml"].present?
  homedir = "db/yaml/#{environment}"
  FileUtils.mkdir homedir unless Dir[homedir].present?
  table = ActiveRecord::Base.connection.execute("SELECT * FROM #{model};")
    db_object = {}
    db_output = {}
    case db_type
    when 'sqlite3'
      yaml_bar = ProgressBar.new("to_yaml", table.length)
      keys = table[0].keys.first(table[0].length / 2)
      db_object["columns"] = keys
      model_arr=[]
      table.each do |row|
        model_arr << row.values_at(*keys)
        yaml_bar.inc
      end
      db_object["records"] = model_arr
      db_output[model] = db_object
      File.open("#{homedir}/#{model}.yml",'a') do |file|
        YAML::dump(db_output, file)
      end
    when 'postgresql'
      yaml_bar = ProgressBar.new("to_yaml", table.num_tuples)
      keys = table[0].keys
      db_object["columns"] = keys
      model_arr=[]
      table.each do |row|
        model_arr << row.values_at(*keys)
        yaml_bar.inc
      end
      db_object["records"] = model_arr
      db_output[model] = db_object
      File.open("#{homedir}/#{model}.yml",'a') do |file|
        YAML::dump(db_output, file)
      end
    when 'mysql2'
      yaml_bar = ProgressBar.new("to_yaml", table.count)
      db_config = YAML::load(IO.read("config/database.yml"))
      columns = ActiveRecord::Base.connection.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`= '#{db_config[environment]['database']}' AND `TABLE_NAME`='#{model}';")
      col_names=[]
      columns.each do |col|
        col_names.append(col[0])
      end
      db_object["columns"] = col_names
      model_arr=[]
      table.each do |row|
        model_arr << row
        yaml_bar.inc
      end
      db_object["records"] = model_arr
      db_output[model] = db_object
      File.open("#{homedir}/#{model}.yml",'a') do |file|
        YAML::dump(db_output, file)
      end
    else
      puts "error in db type"
      return false
    end
  puts ""
  puts "exported to db/yaml/#{environment}"
end