Module: Sequel::Plugins::ConstraintValidations

Defined in:
lib/sequel/plugins/constraint_validations.rb,
lib/sequel/extensions/_model_constraint_validations.rb

Overview

The constraint_validations plugin is designed to be used with databases that used the constraint_validations extension when creating their tables. The extension adds validation metadata for constraints created, and this plugin reads that metadata and automatically creates validations for all of the constraints. For example, if you used the extension and created your albums table like this:

DB.create_table(:albums) do
  primary_key :id
  String :name
  validate do
    min_length 5, :name
  end
end

Then when you went to save an album that uses this plugin:

Album.create(name: 'abc')
# raises Sequel::ValidationFailed: name is shorter than 5 characters

Usage:

# Make all model subclasses use constraint validations (called before loading subclasses)
Sequel::Model.plugin :constraint_validations

# Make the Album class use constraint validations
Album.plugin :constraint_validations

Defined Under Namespace

Modules: ClassMethods, DatabaseMethods, InstanceMethods

Constant Summary collapse

DEFAULT_CONSTRAINT_VALIDATIONS_TABLE =

The default constraint validation metadata table name.

:sequel_constraint_validations
OPERATOR_MAP =

Mapping of operator names in table to ruby operators

{:str_lt => :<, :str_lte => :<=, :str_gt => :>, :str_gte => :>=,
:int_lt => :<, :int_lte => :<=, :int_gt => :>, :int_gte => :>=}.freeze

Class Method Summary collapse

Class Method Details

.apply(model, opts = OPTS) ⇒ Object

Automatically load the validation_helpers plugin to run the actual validations.



41
42
43
44
45
46
47
# File 'lib/sequel/plugins/constraint_validations.rb', line 41

def self.apply(model, opts=OPTS)
  model.instance_exec do
    plugin :validation_helpers
    @constraint_validations_table = DEFAULT_CONSTRAINT_VALIDATIONS_TABLE
    @constraint_validation_options = {}
  end
end

.configure(model, opts = OPTS) ⇒ Object

Parse the constraint validations metadata from the database. Options:

:constraint_validations_table

Override the name of the constraint validations metadata table. Should only be used if the table name was overridden when creating the constraint validations.

:validation_options

Override/augment the options stored in the database with the given options. Keys should be validation type symbols (e.g. :presence) and values should be hashes of options specific to that validation type.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sequel/plugins/constraint_validations.rb', line 58

def self.configure(model, opts=OPTS)
  model.instance_exec do
    if table = opts[:constraint_validations_table]
      @constraint_validations_table = table
    end
    if vos = opts[:validation_options]
      vos.each do |k, v|
        if existing_options = @constraint_validation_options[k]       
          v = existing_options.merge(v)
        end
        @constraint_validation_options[k] = v
      end
    end
    parse_constraint_validations
  end
end