19
20
21
22
23
24
25
26
27
28
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/active_rest_client/validation.rb', line 19
def valid?
@errors = Hash.new {|h,k| h[k] = []}
self.class._validations.each do |validation|
value = self.send(validation[:field_name])
validation[:options].each do |type, options|
if type == :presence
if value.nil?
@errors[validation[:field_name]] << "must be present"
end
elsif type == :length
if options[:within]
@errors[validation[:field_name]] << "must be within range #{options[:within]}" unless options[:within].include?(value.to_s.length )
end
if options[:minimum]
@errors[validation[:field_name]] << "must be at least #{options[:minimum]} characters long" unless value.to_s.length >= options[:minimum]
end
if options[:maximum]
@errors[validation[:field_name]] << "must be no more than #{options[:minimum]} characters long" unless value.to_s.length <= options[:maximum]
end
elsif type == :numericality
numeric = (true if Float(value) rescue false)
@errors[validation[:field_name]] << "must be numeric" unless numeric
elsif type == :minimum && !value.nil?
@errors[validation[:field_name]] << "must be at least #{options}" unless value.to_f >= options.to_f
elsif type == :maximum && !value.nil?
@errors[validation[:field_name]] << "must be no more than #{options}" unless value.to_f <= options.to_f
end
end
if validation[:block]
validation[:block].call(self, validation[:field_name], value)
end
end
@errors.empty?
end
|