class Mimi::DB::Dictate::SchemaDefinition::Column

Represents a column in schema definition

Constants

DEFAULT_TYPE

Attributes

name[R]
params[R]
sequel_type[R]
type[R]

Public Class Methods

new(name, opts) click to toggle source

Creates a Column object

@param name [String,Symbol] @param opts [Hash]

# File lib/mimi/db/dictate/schema_definition.rb, line 92
def initialize(name, opts)
  @name = name.to_sym
  @params = opts.dup
  @params[:type] ||= @params[:as] || DEFAULT_TYPE
  @params = Mimi::DB::Dictate::TypeDefaults.infer_params(@params)
  @type = @params[:type]
  @sequel_type = @params[:sequel_type]
end

Public Instance Methods

==(other) click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 122
def ==(other)
  unless other.name == name
    raise ArgumentError, 'Cannot compare columns with different names'
  end
  equal = true
  equal &&= params[:db_type] == other.params[:db_type]
  equal &&= params[:primary_key] == other.params[:primary_key]
  equal &&= params[:not_null] == other.params[:not_null]
  equal &&= params[:db_default].to_s == other.params[:db_default].to_s
  equal
end
to_h() click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 101
def to_h
  {
    name: name,
    params: params.dup
  }
end
to_s() click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 114
def to_s
  public_params = params.only(
    :type, :primary_key, :auto_increment, :not_null, :default, :size
  ).select { |_, v| v }.to_h
  public_params = public_params.map { |k, v| "#{k}: #{v.inspect}" }.join(', ')
  "#{name}(#{public_params})"
end
to_sequel_params() click to toggle source
# File lib/mimi/db/dictate/schema_definition.rb, line 108
def to_sequel_params
  p = params.dup.except(:type, :as)
  p[:null] = !p[:not_null] if p.key?(:not_null)
  p
end