module Validators

Public Instance Methods

cast(*casted_keys) click to toggle source
# File lib/changeset/validators.rb, line 3
def cast(*casted_keys) 
  new_changes = {}
  @changes.each do |k, v|
    if casted_keys.include?(k)
      new_changes[k] = v
    end
  end
  @changes = new_changes
  @errors = @errors.select { |k, v| casted_keys.include?(k) }
 self
end
validate_acceptance(key, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 70
def validate_acceptance(key, message: nil)
  unless @changes[key] == true
    generate_error_for(key, :acceptance, message)
  end
  self
end
validate_change(key, message: nil, &validator) click to toggle source
# File lib/changeset/validators.rb, line 111
def validate_change(key, message: nil, &validator)
  unless validator.call(@changes[key])
    generate_error_for(key, :custom_validator, message)
  end
  self
end
validate_confirmation(key, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 55
def validate_confirmation(key, message: nil) 
  confirmation_key = "#{key}_confirmation".to_sym
  unless @changes[key] == @changes[confirmation_key]
    generate_error_for(key, :confirmation, message)
  end
  self
end
validate_exclusion(key, exclusion, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 97
def validate_exclusion(key, exclusion, message: nil)
  if exclusion.include?(@changes[key])
    generate_error_for(key, :exclusion, message)
  end
  self
end
validate_format(key, regex, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 63
def validate_format(key, regex, message: nil) 
  unless @changes[key].match?(regex)
    generate_error_for(key, :format, message)
  end
  self
end
validate_inclusion(key, inclusion, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 48
def validate_inclusion(key, inclusion, message: nil) 
  unless inclusion.include?(@changes[key])
    generate_error_for(key, :inclusion, message)
  end
  self
end
validate_length(key, opts) click to toggle source
# File lib/changeset/validators.rb, line 28
def validate_length(key, opts)
  if opts.has_key?(:is)
    cond = @changes[key].length == opts[:is]
  elsif opts.has_key?(:in)
    cond = opts[:in].include? @changes[key].length
  elsif opts.has_key?(:min) && opts.has_key?(:max)
    cond = (opts[:min]..opts[:max]).include? @changes[key].length
  elsif opts.has_key?(:min)
    cond = @changes[key].length >= opts[:min]
  elsif opts.has_key?(:max)
    cond = @changes[key].length <= opts[:max]
  else
    raise "Should define at least one option for validate_length()"
  end
  unless cond
    generate_error_for(key, :length, opts[:message]) 
  end
  self
end
validate_number(key, opts) click to toggle source
# File lib/changeset/validators.rb, line 77
def validate_number(key, opts)
  if opts.has_key?(:less_than)
    cond = @changes[key] < opts[:less_than]
  elsif opts.has_key?(:greater_than)
    cond = @changes[key] > opts[:greater_than]
  elsif opts.has_key?(:less_than_or_equal_to)
    cond = @changes[key] <= opts[:less_than_or_equal_to]
  elsif opts.has_key?(:greater_than_or_equal_to)
    cond = @changes[key] >= opts[:greater_than_or_equal_to]
  elsif opts.has_key?(:equal_to)
    cond = @changes[key] == opts[:equal_to]
  elsif opts.has_key?(:not_equal_to)
    cond = @changes[key] != opts[:not_equal_to]
  end
  unless cond
    generate_error_for(key, :number, opts[:message]) 
  end
  self
end
validate_required(*required_keys, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 15
def validate_required(*required_keys, message: nil) 
  required_keys.each do |key|
    if @changes.has_key?(key)
      if @changes[key].empty? || @changes[key].nil?
        generate_error_for(key, :required, message)
      end
    else
      generate_error_for(key, :required, message)
    end
  end
  self
end
validate_subset(key, arr, message: nil) click to toggle source
# File lib/changeset/validators.rb, line 104
def validate_subset(key, arr, message: nil)
  unless @changes[key].all?{|k| arr.include?(k)}
    generate_error_for(key, :subset, message)
  end
  self
end