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



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/couchrest/mixins/validation.rb', line 220

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



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/couchrest/mixins/validation.rb', line 197

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



181
182
183
184
185
186
187
188
189
190
191
# File 'lib/couchrest/mixins/validation.rb', line 181

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



173
174
175
# File 'lib/couchrest/mixins/validation.rb', line 173

def validators
  @validations ||= ContextualValidators.new
end