Module: Volt::Validations

Included in:
Model
Defined in:
lib/volt/models/validations.rb

Overview

Include in any class to get validation logic

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



33
34
35
# File 'lib/volt/models/validations.rb', line 33

def self.included(base)
  base.send :extend, ClassMethods
end

Instance Method Details

#clear_server_errors(key) ⇒ Object

When a field is changed, we want to clear any errors from the server



71
72
73
# File 'lib/volt/models/validations.rb', line 71

def clear_server_errors(key)
  @server_errors.delete(key)
end

#errors(marked_only = false) ⇒ Object

TODO: Errors is being called for any validation change. We should have errors return a hash like object that only calls the validation for each one.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/volt/models/validations.rb', line 77

def errors(marked_only = false)
  errors = {}

  # Merge into errors, combining any error arrays
  merge = proc do |new_errors|
    errors.merge!(new_errors) do |key, new_val, old_val|
      new_val + old_val
    end
  end

  errors = run_validations(errors, merge, marked_only)

  # See if any server errors are in place and merge them in if they are
  if Volt.client?
    errors = merge.call(server_errors.to_h)
  end

  errors = run_custom_validations(errors, merge)

  errors
end

#mark_all_fields!Object

Marks all fields, useful for when a model saves.



49
50
51
52
53
54
55
56
# File 'lib/volt/models/validations.rb', line 49

def mark_all_fields!
  validations = self.class.validations
  if validations
    validations.each_key do |key|
      mark_field!(key.to_sym)
    end
  end
end

#mark_field!(field_name) ⇒ Object

Once a field is ready, we can use include_in_errors! to start showing its errors.



39
40
41
# File 'lib/volt/models/validations.rb', line 39

def mark_field!(field_name)
  marked_fields[field_name] = true
end

#marked_errorsObject



59
60
61
# File 'lib/volt/models/validations.rb', line 59

def marked_errors
  errors(true)
end

#marked_fieldsObject



43
44
45
# File 'lib/volt/models/validations.rb', line 43

def marked_fields
  @marked_fields ||= ReactiveHash.new
end

#server_errorsObject

server errors are errors that come back from the server when we save! Any changes to the associated fields will clear the error until another save!



66
67
68
# File 'lib/volt/models/validations.rb', line 66

def server_errors
  @server_errors ||= ReactiveHash.new
end