module Flexirest::Validation
Public Class Methods
included(base)
click to toggle source
# File lib/flexirest/validation.rb, line 15 def self.included(base) base.extend(ClassMethods) end
Public Instance Methods
_errors()
click to toggle source
# File lib/flexirest/validation.rb, line 101 def _errors @errors ||= Hash.new {|h,k| h[k] = []} @errors end
full_error_messages()
click to toggle source
# File lib/flexirest/validation.rb, line 94 def full_error_messages return "" unless _errors.present? _errors.reduce([]) do |memo, (field, errors)| memo << "#{field.to_s} #{errors.join(' and ')}" end end
valid?()
click to toggle source
# File lib/flexirest/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]) allow_nil = validation[:options].fetch(:allow_nil, false) validation[:options].each do |type, options| if type == :presence if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be present") elsif value.blank? @errors[validation[:field_name]] << (validation[:options][:message] || "must be present") end elsif type == :existence if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") end elsif type == :length if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil else if options[:within] @errors[validation[:field_name]] << (validation[:options][:message] || "must be within range #{options[:within]}") unless options[:within].include?(value.to_s.length ) end if options[:minimum] @errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options[:minimum]} characters long") unless value.to_s.length >= options[:minimum] end if options[:maximum] @errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options[:maximum]} characters long") unless value.to_s.length <= options[:maximum] end end elsif type == :numericality if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil else numeric = (true if Float(value) rescue false) if !numeric @errors[validation[:field_name]] << (validation[:options][:message] || "must be numeric") else if options.is_a?(Hash) if options[:minimum] @errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options[:minimum]}") unless value.to_f >= options[:minimum] end if options[:maximum] @errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options[:maximum]}") unless value.to_f <= options[:maximum] end end end end elsif type == :minimum if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil else @errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options}") unless value.to_f >= options.to_f end elsif type == :maximum if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil else @errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options}") unless value.to_f <= options.to_f end elsif type == :inclusion if value.nil? @errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil else @errors[validation[:field_name]] << (validation[:options][:message] || "must be included in #{options[:in].join(", ")}") unless options[:in].include?(value) end end end if validation[:block] validation[:block].call(self, validation[:field_name], value) end end @errors.empty? end