Module: ActiveRestClient::Validation

Included in:
Base
Defined in:
lib/active_rest_client/validation.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



15
16
17
# File 'lib/active_rest_client/validation.rb', line 15

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

Instance Method Details

#errorsObject



54
55
56
57
# File 'lib/active_rest_client/validation.rb', line 54

def errors
  @errors ||= Hash.new {|h,k| h[k] = []}
  @errors
end

#valid?Boolean



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