Sha256: 93c042425a7e5d5504b125175c67d0d0143d6cfb73853c555b5cf9f163466e0f

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module MongoMapper
  module SaveWithValidation
    def self.included(base)
      base.class_eval do
        alias_method_chain :valid?, :callbacks
        alias_method_chain :save, :validation
        
        define_callbacks  :before_validation_on_create,   :before_validation_on_update,
                          :before_validation,             :after_validation,
                          :validate, :validate_on_create, :validate_on_update
      end
    end
    
    def save!
      save_with_validation || raise(DocumentNotValid.new(self))
    end
    
    private
      def save_with_validation        
        if valid?
          save_without_validation
        else
          false
        end
      end
    
      def valid_with_callbacks?
        run_callbacks(:before_validation)
        
        if new?
          run_callbacks(:before_validation_on_create)
        else
          run_callbacks(:before_validation_on_update)
        end
        
        run_callbacks(:validate)
        
        if new?
          run_callbacks(:validate_on_create)
        else
          run_callbacks(:validate_on_update)
        end
        
        is_valid = valid_without_callbacks?
        run_callbacks(:after_validation) if is_valid
        is_valid 
      end
  end  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jnunemaker-mongomapper-0.1.2 lib/mongomapper/save_with_validation.rb