Method: Property::Properties#validate

Defined in:
lib/property/properties.rb

#validateObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/property/properties.rb', line 65

def validate
  column_names = columns.keys
  errors = @owner.errors
  no_errors = true

  original_hash = @original_hash || self

  bad_keys         = keys - column_names
  missing_keys     = column_names - keys
  keys_to_validate = keys - bad_keys

  bad_keys.each do |key|
    if original_hash[key] == self[key]
      # ignore invalid legacy value
    elsif self[key].blank?
      # ignore blank values
      self.delete(key)
    else
      # We use our own Error class to make sure 'send' is not used on error keys.
      errors.add(key, Property::AttributeError.new(@owner, key, nil, :message => 'property not declared', :value => self[key]))
    end
  end

  missing_keys.each do |key|
    column = columns[key]
    if column.has_default?
      self[key] = column.default_for(@owner)
    end
  end

  keys_to_validate.each do |key|
    columns[key].validate(self[key], errors)
  end

  bad_keys.empty?
end