module Sequel::Plugins::ValidationHelpers

The validation_helpers plugin contains instance method equivalents for most of the legacy class-level validations. The names and APIs are different, though. Example:

Sequel::Model.plugin :validation_helpers
class Album < Sequel::Model
  def validate
    validates_min_length 1, :num_tracks
  end
end

The validates_unique validation has a unique API, but the other validations have the API explained here:

Arguments:

Options:

The default validation options for all models can be modified by changing the values of the Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS hash. You change change the default options on a per model basis by overriding a private instance method default_validation_helpers_options.

By changing the default options, you can setup internationalization of the error messages. For example, you would modify the default options:

Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
  :exact_length=>{:message=>lambda{|exact| I18n.t("errors.exact_length", :exact => exact)}},
  :integer=>{:message=>lambda{I18n.t("errors.integer")}},
  ...
)

and then use something like this in your yaml translation file:

en:
  errors:
    exact_length: "is not %{exact} characters"
    integer: "is not a number"

Note that if you want to support internationalization of Errors#full_messages, you need to override the method. Here's an example:

class Sequel::Model::Errors
  ATTRIBUTE_JOINER = I18n.t('errors.joiner').freeze
  def full_messages
    inject([]) do |m, kv|
      att, errors = *kv
      att.is_a?(Array) ? Array(att).map!{|v| I18n.t("attributes.#{v}")} : att = I18n.t("attributes.#{att}")
      errors.each {|e| m << (e.is_a?(LiteralString) ? e : "#{Array(att).join(ATTRIBUTE_JOINER)} #{e}")}
      m
    end
  end
end

Constants

DEFAULT_OPTIONS

Default validation options used by Sequel. Can be modified to change the error messages for all models (e.g. for internationalization), or to set certain default options for validations (e.g. :allow_nil=>true for all validates_format).