Module: CouchRest::Validation::ClassMethods

Instance Method Summary collapse

Methods included from AutoValidate

#auto_generate_validations, #options_with_message

Methods included from ValidatesWithMethod

#validates_with_method

Methods included from ValidatesIsNumber

#validates_is_number

Methods included from ValidatesLength

#validates_length

Methods included from ValidatesFormat

#validates_format

Methods included from ValidatesIsConfirmed

#validates_is_confirmed

Methods included from ValidatesAbsent

#validates_absent

Methods included from ValidatesPresent

#validates_present

Instance Method Details

#add_validator_to_context(opts, fields, klazz) ⇒ Object

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



235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/couchrest/mixins/validation.rb', line 235

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) ⇒ Object

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



212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/couchrest/mixins/validation.rb', line 212

def create_context_instance_methods(context)
  name = "valid_for_#{context.to_s}?"           # valid_for_signup?
  if !self.instance_methods.include?(name)
    class_eval <<-EOS, __FILE__, __LINE__
      def #{name}                               # def valid_for_signup?
        valid?('#{context.to_s}'.to_sym)        #   valid?('signup'.to_sym)
      end                                       # end
    EOS
  end

  all = "all_valid_for_#{context.to_s}?"        # all_valid_for_signup?
  if !self.instance_methods.include?(all)
    class_eval <<-EOS, __FILE__, __LINE__
      def #{all}                                # def all_valid_for_signup?
        all_valid?('#{context.to_s}'.to_sym)    #   all_valid?('signup'.to_sym)
      end                                       # end
    EOS
  end
end

#opts_from_validator_args(args, defaults = nil) ⇒ Object

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



196
197
198
199
200
201
202
203
204
205
206
# File 'lib/couchrest/mixins/validation.rb', line 196

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

#validatorsObject

Return the set of contextual validators or create a new one



188
189
190
# File 'lib/couchrest/mixins/validation.rb', line 188

def validators
  @validations ||= ContextualValidators.new
end