Module: JetSet::Validations

Defined in:
lib/jet_set/validations.rb

Overview

Optional validation decorator. Adds validation logic to pure Ruby objects.

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



37
38
39
# File 'lib/jet_set/validations.rb', line 37

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#do_not_validate(*attributes) ⇒ Object

Disables attribute validation for edge cases



32
33
34
35
# File 'lib/jet_set/validations.rb', line 32

def do_not_validate(*attributes)
  @to_skip ||= []
  attributes.each { |a| @to_skip << a}
end

#validate!Object

The method runs all validations declared in the model

Raises:



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/jet_set/validations.rb', line 7

def validate!
  @to_skip ||= []

  validations = self.class.class_variable_defined?(:@@validations) ? self.class.class_variable_get(:@@validations) : {}
  attributes = validations.keys - @to_skip
  invalid_items = []

  attributes.each do |attribute|
    attribute_validations = validations[attribute] || []

    error = nil
    attribute_validations.each do |validation|
      value = instance_variable_get("@#{attribute}")
      if validation[:func].call(value) == false
        error = validation[:message]
        break
      end
    end
    invalid_items << {"#{attribute}": error} if error
  end

  raise ValidationError.new("#{self.class.name} is invalid", invalid_items) if invalid_items.length > 0
end