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
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
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
Return the set of contextual validators or create a new one
# File lib/couchrest/validation.rb, line 186 def validators @validations ||= ContextualValidators.new end