module CouchRest::Validation::ClassMethods

Public Instance Methods

add_validator_to_context(opts, fields, klazz) click to toggle source

Create a new validator of the given klazz and push it onto the requested context for each of the attributes in the fields list

# File lib/couchrest/validation.rb, line 224
def add_validator_to_context(opts, fields, klazz)
  fields.each do |field|
    validator = klazz.new(field.to_sym, opts)
    if opts[:context].is_a?(Symbol)
      unless validators.context(opts[:context]).include?(validator)
        validators.context(opts[:context]) << validator
        create_context_instance_methods(opts[:context])
      end
    elsif opts[:context].is_a?(Array)
      opts[:context].each do |c|
        unless validators.context(c).include?(validator)
          validators.context(c) << validator
          create_context_instance_methods(c)
        end
      end
    end
  end
end
create_context_instance_methods(context) click to toggle source

Given a new context create an instance method of valid_for_<context>? which simply calls valid?(context) if it does not already exist

# File lib/couchrest/validation.rb, line 210
      def create_context_instance_methods(context)
        name = "valid_for_#{context.to_s}?"           # valid_for_signup?
        if !self.instance_methods.include?(name)
          class_eval "            def #{name}                               # def valid_for_signup?
              valid?('#{context.to_s}'.to_sym)        #   valid?('signup'.to_sym)
            end                                       # end
", __FILE__, __LINE__ + 1
        end
      end
opts_from_validator_args(args, defaults = nil) click to toggle source

Clean up the argument list and return a opts hash, including the merging of any default opts. Set the context to default if none is provided. Also allow :context to be aliased to :on, :when & group

# File lib/couchrest/validation.rb, line 194
def opts_from_validator_args(args, defaults = nil)
  opts = args.last.kind_of?(Hash) ? args.pop : {}
  context = :default
  context = opts[:context] if opts.has_key?(:context)
  context = opts.delete(:on) if opts.has_key?(:on)
  context = opts.delete(:when) if opts.has_key?(:when)
  context = opts.delete(:group) if opts.has_key?(:group)
  opts[:context] = context
  opts.merge!(defaults) unless defaults.nil?
  opts
end
validators() click to toggle source

Return the set of contextual validators or create a new one

# File lib/couchrest/validation.rb, line 186
def validators
  @validations ||= ContextualValidators.new
end