module AwesomePrint::DbSchema::Definitions

Public Class Methods

included(base) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 10
def self.included(base)
  base.send :alias_method, :cast_without_dbschema_definitions, :cast
  base.send :alias_method, :cast, :cast_with_dbschema_definitions
end

Public Instance Methods

cast_with_dbschema_definitions(object, type) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 15
def cast_with_dbschema_definitions(object, type)
  case object
  when ::DbSchema::Definitions::Schema
    :dbschema_definitions_schema
  when ::DbSchema::Definitions::NullTable,
       ::DbSchema::Definitions::NullField,
       ::DbSchema::Definitions::NullIndex,
       ::DbSchema::Definitions::NullCheckConstraint,
       ::DbSchema::Definitions::NullForeignKey,
       ::DbSchema::Definitions::NullEnum
    :dbschema_definitions_null_object
  when ::DbSchema::Definitions::Table
    :dbschema_definitions_table
  when ::DbSchema::Definitions::Field::Base
    :dbschema_definitions_field
  when ::DbSchema::Definitions::Index
    :dbschema_definitions_index
  when ::DbSchema::Definitions::Index::Column
    :dbschema_definitions_index_column
  when ::DbSchema::Definitions::CheckConstraint
    :dbschema_definitions_check_constraint
  when ::DbSchema::Definitions::ForeignKey
    :dbschema_definitions_foreign_key
  when ::DbSchema::Definitions::Enum
    :dbschema_definitions_enum
  when ::DbSchema::Definitions::Extension
    :dbschema_definitions_extension
  else
    cast_without_dbschema_definitions(object, type)
  end
end

Private Instance Methods

awesome_dbschema_definitions_check_constraint(check) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 114
def awesome_dbschema_definitions_check_constraint(check)
  "#<#{check.class} #{check.name.ai} #{check.condition.ai}>"
end
awesome_dbschema_definitions_enum(enum) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 131
def awesome_dbschema_definitions_enum(enum)
  values = enum.values.map do |value|
    colorize(value.to_s, :string)
  end.join(', ')

  "#<#{enum.class} #{enum.name.ai} (#{values})>"
end
awesome_dbschema_definitions_extension(extension) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 139
def awesome_dbschema_definitions_extension(extension)
  "#<#{extension.class} #{extension.name.ai}>"
end
awesome_dbschema_definitions_field(field) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 71
def awesome_dbschema_definitions_field(field)
  options = field.options.map do |k, v|
    key = colorize("#{k}:", :symbol)

    if (k == :default) && v.is_a?(Symbol)
      "#{key} #{colorize(v.to_s, :string)}"
    else
      "#{key} #{v.ai}"
    end
  end.unshift(nil).join(', ')

  if field.custom?
    "#<DbSchema::Definitions::Field::Custom (#{field.type.ai}) #{field.name.ai}#{options}>"
  else
    "#<#{field.class} #{field.name.ai}#{options}>"
  end
end
awesome_dbschema_definitions_foreign_key(fkey) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 118
def awesome_dbschema_definitions_foreign_key(fkey)
  fields = format_dbschema_fields(fkey.fields)
  references = "#{colorize('references', :class)} #{fkey.table.ai}"
  references << ' ' + format_dbschema_fields(fkey.keys) unless fkey.references_primary_key?

  data = [nil]
  data << colorize("on_update:", :symbol) + " #{fkey.on_update.ai}" unless fkey.on_update == :no_action
  data << colorize("on_delete:", :symbol) + " #{fkey.on_delete.ai}" unless fkey.on_delete == :no_action
  data << colorize('deferrable', :nilclass) if fkey.deferrable?

  "#<#{fkey.class} #{fkey.name.ai} on #{fields} #{references}#{data.join(', ')}>"
end
awesome_dbschema_definitions_index(index) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 89
def awesome_dbschema_definitions_index(index)
  columns = format_dbschema_fields(index.columns)
  using = ' using ' + colorize(index.type.to_s, :symbol) unless index.btree?

  data = [nil]
  data << colorize('primary key', :nilclass) if index.primary?
  data << colorize('unique', :nilclass) if index.unique?
  data << colorize('condition: ', :symbol) + index.condition.ai unless index.condition.nil?

  "#<#{index.class} #{index.name.ai} on #{columns}#{using}#{data.join(', ')}>"
end
awesome_dbschema_definitions_index_column(column) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 101
def awesome_dbschema_definitions_index_column(column)
  data = [column.name.ai]

  if column.desc?
    data << colorize('desc', :nilclass)
    data << colorize('nulls last', :symbol) if column.nulls == :last
  else
    data << colorize('nulls first', :symbol) if column.nulls == :first
  end

  data.join(' ')
end
awesome_dbschema_definitions_null_object(object) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 57
def awesome_dbschema_definitions_null_object(object)
  "#<#{object.class}>"
end
awesome_dbschema_definitions_schema(schema) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 48
def awesome_dbschema_definitions_schema(schema)
  data = ["tables: #{schema.tables.ai}"]
  data << "enums: #{schema.enums.ai}" if schema.enums.any?
  data << "extensions: #{schema.extensions.ai}" if schema.extensions.any?

  data_string = data.join(', ')
  "#<DbSchema::Definitions::Schema #{data_string}>"
end
awesome_dbschema_definitions_table(table) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 61
def awesome_dbschema_definitions_table(table)
  data = ["fields: #{table.fields.ai}"]
  data << "indexes: #{table.indexes.ai}" if table.indexes.any?
  data << "checks: #{table.checks.ai}" if table.checks.any?
  data << "foreign_keys: #{table.foreign_keys.ai}" if table.foreign_keys.any?

  data_string = indent_lines(data.join(', '))
  "#<DbSchema::Definitions::Table #{table.name.ai} #{data_string}>"
end
format_dbschema_fields(fields) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 143
def format_dbschema_fields(fields)
  if fields.one?
    fields.first.ai
  else
    '[' + fields.map(&:ai).join(', ') + ']'
  end
end
indent_lines(text, indent_level = 4) click to toggle source
# File lib/db_schema/definitions/awesome_print.rb, line 151
def indent_lines(text, indent_level = 4)
  text.gsub(/(?<!\A)^/, ' ' * indent_level)
end