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



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

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



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

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.



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/volt/models/validations.rb', line 78

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

  # Get the previous model from the buffer
  save_to = options[:save_to]
  if save_to && save_to.is_a?(Volt::Model)
    old_model = save_to
  else
    old_model = nil
  end

  errors = run_validations(errors, merge, marked_only, old_model)

  # 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, old_model)

  errors
end

#mark_all_fields!Object

Marks all fields, useful for when a model saves.



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

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.



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

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

#marked_errorsObject



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

def marked_errors
  errors(true)
end

#marked_fieldsObject



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

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!



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

def server_errors
  @server_errors ||= ReactiveHash.new
end