Module: Compel::Validation

Extended by:
Validation
Included in:
Validation
Defined in:
lib/compel/validation/result.rb,
lib/compel/validation/validation.rb,
lib/compel/validation/conditions/in.rb,
lib/compel/validation/conditions/is.rb,
lib/compel/validation/conditions/max.rb,
lib/compel/validation/conditions/min.rb,
lib/compel/validation/conditions/format.rb,
lib/compel/validation/conditions/length.rb,
lib/compel/validation/conditions/condition.rb,
lib/compel/validation/conditions/max_length.rb,
lib/compel/validation/conditions/min_length.rb

Defined Under Namespace

Classes: Condition, Format, In, Is, Length, Max, MaxLength, Min, MinLength, Range, Result

Constant Summary collapse

CONDITIONS =
{
  is: Validation::Is,
  in: Validation::In,
  min: Validation::Min,
  max: Validation::Max,
  range: Validation::Range,
  format: Validation::Format,
  length: Validation::Length,
  min_length: Validation::MinLength,
  max_length: Validation::MaxLength,
}

Instance Method Summary collapse

Instance Method Details

#condition_exists?(option_name) ⇒ Boolean



54
55
56
# File 'lib/compel/validation/validation.rb', line 54

def condition_exists?(option_name)
  CONDITIONS.keys.include?(option_name.to_sym)
end

#condition_klass(option_name) ⇒ Object



58
59
60
# File 'lib/compel/validation/validation.rb', line 58

def condition_klass(option_name)
  CONDITIONS[option_name.to_sym]
end

#validate(value, type, options) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/compel/validation/validation.rb', line 29

def validate(value, type, options)
  if value.nil? && !!(options[:required] && options[:required][:value])
    return [options[:required][:message] || 'is required']
  end

  errors = Errors.new

  options.each do |name, option_values|
    next unless condition_exists?(name)

    cloned_options = option_values.dup

    option_value = cloned_options.delete(:value)

    result = condition_klass(name).validate \
      value, option_value, cloned_options.merge(type: type)

    unless result.valid?
      errors.add :base, result.error_message
    end
  end

  errors.to_hash[:base] || []
end