class Ahnnotate::Tables

Public Class Methods

new(connection = ActiveRecord::Base.connection) click to toggle source
# File lib/ahnnotate/tables.rb, line 5
def initialize(connection = ActiveRecord::Base.connection)
  @connection = connection
  @abilities = Abilities.new(connection)
end

Public Instance Methods

data_sources_method_name() click to toggle source
# File lib/ahnnotate/tables.rb, line 83
def data_sources_method_name
  @data_sources_method_name ||=
    if ActiveRecordVersion.five_and_up?
      :data_sources
    else
      :tables
    end
end
each() { |table( name: table_name, columns: columns, indexes: indexes, foreign_keys: foreign_keys, )| ... } click to toggle source
# File lib/ahnnotate/tables.rb, line 14
def each
  if !block_given?
    enum_for(:each)
  end

  @connection.public_send(data_sources_method_name).each do |table_name|
    begin
      original_stderr = $stderr
      $stderr = StringIO.new

      primary_key = ActiveRecord::Base.get_primary_key(table_name)

      columns = @connection.columns(table_name).map do |c|
        is_primary_key =
          if primary_key.is_a?(Array)
            primary_key.include?(c.name)
          else
            primary_key == c.name
          end

        Column.new(
          name: c.name,
          sql_type: c.sql_type,
          nullable: c.null,
          primary_key: is_primary_key,
          default: c.default
        )
      end

      indexes = @connection.indexes(table_name).map do |i|
        comment =
          if i.respond_to?(:comment)
            i.comment
          end

        Index.new(
          name: i.name,
          columns: i.columns,
          unique: i.unique,
          comment: comment
        )
      end

      foreign_keys =
        if @abilities.foreign_key?
          @connection.foreign_keys(table_name).map do |fk|
            ForeignKey.new(
              name: fk.name,
              from_column: fk.column,
              to_table: fk.to_table,
              to_column: fk.primary_key
            )
          end
        else
          []
        end

      yield Table.new(
        name: table_name,
        columns: columns,
        indexes: indexes,
        foreign_keys: foreign_keys,
      )
    ensure
      $stderr = original_stderr
    end
  end
end
to_h() click to toggle source
# File lib/ahnnotate/tables.rb, line 10
def to_h
  map { |table| [table.name, table] }.to_h
end