module Themis::Validation
Extends other modules to make them be validation modules. Consider it as the “parent module” for all validation modules.
@example define UserValidation
module UserValidation extend Themis::Validation validates :email , :presence => true validates :nickname, :presence => true end
Public Instance Methods
included(base)
click to toggle source
When included in another module: copy {Validator validators} to another module. When included in ActiveRecord model: define validators on model. @param [Module, ActiveRecord::Base] base another validation module or ActiveRecord model.
# File lib/themis/validation.rb, line 27 def included(base) if base.instance_of?(Module) && base.respond_to?(:validators) base.validators.concat(validators) elsif base.ancestors.include? ::ActiveRecord::Base apply_to_model!(base) else raise "Validation module `#{self.inspect}` can be included only in another validation module or in ActiveRecord model" end end
validators()
click to toggle source
Array {Validator validators} defined in module. @return [Array<Validator>] array of module's validators
# File lib/themis/validation.rb, line 20 def validators @validators ||= [] end
Private Instance Methods
apply_to_model!(model_class)
click to toggle source
Add validators to model @param [ActiveRecord::Base] model_class
# File lib/themis/validation.rb, line 49 def apply_to_model!(model_class) validators.each do |validator| method, args = validator.name, validator.args model_class.send(method, *args) end end
method_missing(method_name, *args)
click to toggle source
Save all calls of validation methods as array of validators
Calls superclass method
# File lib/themis/validation.rb, line 38 def method_missing(method_name, *args) if method_name.to_s =~ /\Avalidate/ self.validators << Themis::Validation::Validator.new(method_name, args) else super end end