class XMigra::DeclarativeSupport::Table::ColumnListConstraint

Attributes

columns[R]

Public Class Methods

new(name, constr_spec) click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 175
def initialize(name, constr_spec)
  super(name, constr_spec)
  @columns = get_and_validate_columns(constr_spec)
end

Public Instance Methods

constrained_colnames() click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 182
def constrained_colnames
  columns
end

Protected Instance Methods

get_and_validate_columns(constr_spec) click to toggle source
# File lib/xmigra/declarative_support/table.rb, line 187
def get_and_validate_columns(constr_spec)
  (constr_spec.array_fetch('columns', ->(c) {c['name']}) || Constraint.bad_spec(
    %Q{#{self.class::IDENTIFIER} constraint #{name} must specify columns}
  )).tap do |cols|
    unless cols.kind_of? Array
      Constraint.bad_spec(
        %Q{#{self.class::IDENTIFIER} constraint #{@name} expected "columns" to be a sequence (Array)}
      )
    end
    if cols.uniq.length < cols.length
      Constraint.bad_spec(
        %Q{#{self.class::IDENTIFIER} constraint #{@name} has one or more duplicate columns}
      )
    end
  end
end