module Sequel::ConstraintValidations

  1. lib/sequel/extensions/constraint_validations.rb
Parent: Sequel

Constants

DEFAULT_CONSTRAINT_VALIDATIONS_TABLE = :sequel_constraint_validations  

The default table name used for the validation metadata.

Attributes

constraint_validations_table [RW]

The name of the table storing the validation metadata. If modifying this from the default, this should be changed directly after loading the extension into the database

Public Class methods

extended (db)

Set the default validation metadata table name if it has not already been set.

[show source]
# File lib/sequel/extensions/constraint_validations.rb, line 132
def self.extended(db)
  db.constraint_validations_table ||= DEFAULT_CONSTRAINT_VALIDATIONS_TABLE
end

Public Instance methods

create_constraint_validations_table ()

Create the table storing the validation metadata for all of the constraints created by this extension.

[show source]
# File lib/sequel/extensions/constraint_validations.rb, line 214
def create_constraint_validations_table
  create_table(constraint_validations_table) do
    String :table, :null=>false
    String :constraint_name
    String :validation_type, :null=>false
    String :column, :null=>false
    String :argument
    String :message
    TrueClass :allow_nil
  end
end
drop_constraint_validations_for (opts=OPTS)

Delete validation metadata for specific constraints. At least one of the following options should be specified:

:table

The table containing the constraint

:column

The column affected by the constraint

:constraint

The name of the related constraint

The main reason for this method is when dropping tables or columns. If you have previously defined a constraint validation on the table or column, you should delete the related metadata when dropping the table or column. For a table, this isn’t a big issue, as it will just result in some wasted space, but for columns, if you don’t drop the related metadata, it could make it impossible to save rows, since a validation for a nonexistent column will be created.

[show source]
# File lib/sequel/extensions/constraint_validations.rb, line 247
def drop_constraint_validations_for(opts=OPTS)
  ds = from(constraint_validations_table)
  if table = opts[:table]
    ds = ds.where(:table=>constraint_validations_literal_table(table))
  end
  if column = opts[:column]
    ds = ds.where(:column=>column.to_s)
  end
  if constraint = opts[:constraint]
    ds = ds.where(:constraint_name=>constraint.to_s)
  end
  unless table || column || constraint
    raise Error, "must specify :table, :column, or :constraint when dropping constraint validations"
  end
  ds.delete
end
drop_constraint_validations_table ()

Drop the constraint validations table.

[show source]
# File lib/sequel/extensions/constraint_validations.rb, line 227
def drop_constraint_validations_table
  drop_table(constraint_validations_table)
end