module Ridgepole::Ext::SchemaDumper

Public Class Methods

prepended(klass) click to toggle source
# File lib/ridgepole/ext/schema_dumper.rb, line 8
def self.prepended(klass)
  klass.extend ClassMethods
end

Public Instance Methods

foreign_keys(table, stream) click to toggle source
Calls superclass method
# File lib/ridgepole/ext/schema_dumper.rb, line 23
def foreign_keys(table, stream)
  return super unless ActiveRecord::SchemaDumper.__with_default_fk_name

  if (foreign_keys = @connection.foreign_keys(table)).any?
    add_foreign_key_statements = foreign_keys.map do |foreign_key|
      parts = [
        "add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}",
        remove_prefix_and_suffix(foreign_key.to_table).inspect
      ]

      parts << "column: #{foreign_key.column.inspect}" if foreign_key.column != foreign_key_column_for(foreign_key)

      parts << "primary_key: #{foreign_key.primary_key.inspect}" if foreign_key.custom_primary_key?

      parts << "name: #{foreign_key.name.inspect}"

      parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update
      parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete

      "  #{parts.join(', ')}"
    end

    stream.puts add_foreign_key_statements.sort.join("\n")
  end
end

Private Instance Methods

foreign_key_column_for(foreign_key) click to toggle source
# File lib/ridgepole/ext/schema_dumper.rb, line 51
def foreign_key_column_for(foreign_key)
  if ActiveRecord.gem_version < Gem::Version.new('7.1.0')
    @connection.foreign_key_column_for(foreign_key.to_table)
  else
    @connection.foreign_key_column_for(foreign_key.to_table, 'id')
  end
end