Module: DataMapper::Validations::AutoValidations

Included in:
ClassMethods
Defined in:
lib/dm-validations/auto_validate.rb

Defined Under Namespace

Modules: ModelExtension

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#disable_auto_validationsObject (readonly)

TODO: why are there 3 entry points to this ivar? #disable_auto_validations, #disabled_auto_validations?, #auto_validations_disabled?



23
24
25
# File 'lib/dm-validations/auto_validate.rb', line 23

def disable_auto_validations
  @disable_auto_validations
end

Class Method Details

.generate_for_property(property) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Auto-generate validations for a given property. This will only occur if the option :auto_validation is either true or left undefined.

Triggers that generate validator creation

:required => true
    Setting the option :required to true causes a
    validates_presence_of validator to be automatically created on
    the property

:length => 20
    Setting the option :length causes a validates_length_of
    validator to be automatically created on the property. If the
    value is a Integer the validation will set :maximum => value
    if the value is a Range the validation will set
    :within => value

:format => :predefined / lambda / Proc
    Setting the :format option causes a validates_format_of
    validator to be automatically created on the property

:set => ["foo", "bar", "baz"]
    Setting the :set option causes a validates_within
    validator to be automatically created on the property

Integer type
    Using a Integer type causes a validates_numericality_of
    validator to be created for the property.  integer_only
    is set to true

BigDecimal or Float type
    Using a Integer type causes a validates_numericality_of
    validator to be created for the property.  integer_only
    is set to false, and precision/scale match the property

Messages

:messages => {..}
    Setting :messages hash replaces standard error messages
    with custom ones. For instance:
    :messages => {:presence => "Field is required",
                  :format => "Field has invalid format"}
    Hash keys are: :presence, :format, :length, :is_unique,
                   :is_number, :is_primitive

:message => "Some message"
    It is just shortcut if only one validation option is set


101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/dm-validations/auto_validate.rb', line 101

def self.generate_for_property(property)
  return if (property.model.disabled_auto_validations? ||
             skip_auto_validation_for?(property))

  # all auto-validations (aside from presence) should skip
  # validation when the value is nil
  opts = { :allow_nil => true }

  if property.options.key?(:validates)
    opts[:context] = property.options[:validates]
  end

  infer_presence_validation_for(property, opts.dup)
  infer_length_validation_for(property, opts.dup)
  infer_format_validation_for(property, opts.dup)
  infer_uniqueness_validation_for(property, opts.dup)
  infer_within_validation_for(property, opts.dup)
  infer_type_validation_for(property, opts.dup)
end

Instance Method Details

#disabled_auto_validations?TrueClass, FalseClass Also known as: auto_validations_disabled?

Checks whether auto validations are currently disabled (see disable_auto_validations method that takes a block)

Returns:

  • (TrueClass, FalseClass)

    true if auto validation is currently disabled



33
34
35
# File 'lib/dm-validations/auto_validate.rb', line 33

def disabled_auto_validations?
  @disable_auto_validations || false
end

#without_auto_validationsObject

disables generation of validations for duration of given block



44
45
46
47
48
49
# File 'lib/dm-validations/auto_validate.rb', line 44

def without_auto_validations
  previous, @disable_auto_validations = @disable_auto_validations, true
  yield
ensure
  @disable_auto_validations = previous
end