module Tapsoob::Schema

Public Instance Methods

dump(database_url) click to toggle source
# File lib/tapsoob/schema.rb, line 11
    def dump(database_url)
      db = Sequel.connect(database_url)
      db.extension :schema_dumper
      template = ERB.new <<-END_MIG
Class.new(Sequel::Migration) do
  def up
  <% db.tables.each do |table| %>
    <%= db.dump_table_schema(table, indexes: false) %>
  <% end %>
  end

  def down
  <% db.tables.each do |table| %>
    drop_table("<%= table %>", if_exists: true)
  <% end %>
  end
end
END_MIG

      template.result(binding)
    end
dump_table(database_url, table) click to toggle source
# File lib/tapsoob/schema.rb, line 33
    def dump_table(database_url, table)
      table = table.to_sym
      Sequel.connect(database_url) do |db|
        db.extension :schema_dumper
        <<END_MIG
Class.new(Sequel::Migration) do
  def up
    #{db.dump_table_schema(table, indexes: false)}
  end

  def down
    drop_table("#{table}", if_exists: true)
  end
end
END_MIG
      end
    end
indexes(database_url) click to toggle source
# File lib/tapsoob/schema.rb, line 51
def indexes(database_url)
  db = Sequel.connect(database_url)
  db.extension :schema_dumper
  db.dump_indexes_migration
end
indexes_individual(database_url) click to toggle source
# File lib/tapsoob/schema.rb, line 57
    def indexes_individual(database_url)
      idxs = {}
      Sequel.connect(database_url) do |db|
        db.extension :schema_dumper

        tables = db.tables
        tables.each do |table|
          idxs[table] = db.send(:dump_table_indexes, table, :add_index, {}).split("\n")
        end
      end

      idxs.each do |table, indexes|
        idxs[table] = indexes.map do |idx|
          <<END_MIG
Class.new(Sequel::Migration) do
  def up
    #{idx}
  end
end
END_MIG
        end
      end
      JSON.generate(idxs)
    end
load(database_url, schema, options = { drop: false }) click to toggle source
# File lib/tapsoob/schema.rb, line 82
def load(database_url, schema, options = { drop: false })
  Sequel.connect(database_url) do |db|
    db.extension :schema_dumper
    klass = eval(schema)
    if options[:drop]
      # Start special hack for MySQL
      db.run("SET foreign_key_checks = 0") if [:mysql, :mysql2].include?(db.adapter_scheme)

      # Run down migration
      klass.apply(db, :down)

      # End special hack for MySQL
      db.run("SET foreign_key_checks = 1") if [:mysql, :mysql2].include?(db.adapter_scheme)
    end
    klass.apply(db, :up)
  end
end
load_indexes(database_url, indexes) click to toggle source
# File lib/tapsoob/schema.rb, line 100
def load_indexes(database_url, indexes)
  Sequel.connect(database_url) do |db|
    db.extension :schema_dumper
    eval(indexes).apply(db, :up)
  end
end
reset_db_sequences(database_url) click to toggle source
# File lib/tapsoob/schema.rb, line 107
def reset_db_sequences(database_url)
  db = Sequel.connect(database_url)
  db.extension :schema_dumper
  return unless db.respond_to?(:reset_primary_key_sequence)
  db.tables.each do |table|
    db.reset_primary_key_sequence(table)
  end
end