Sha256: 99994203bc759e20ff2f2431b2e1a44071ed1658108b02c69a985cac2b1dbf85
Contents?: true
Size: 1.48 KB
Versions: 2
Compression:
Stored size: 1.48 KB
Contents
# encoding: UTF-8 module MongoMapper module Plugins module Validations def self.configure(model) model.class_eval do include Validatable extend Plugins::Validations::DocumentMacros end end module DocumentMacros def validates_uniqueness_of(*args) add_validations(args, MongoMapper::Plugins::Validations::ValidatesUniquenessOf) end end class ValidatesUniquenessOf < Validatable::ValidationBase option :scope, :case_sensitive default :case_sensitive => true def valid?(instance) value = instance[attribute] return true if allow_blank && value.blank? return true if allow_nil && value.nil? base_conditions = case_sensitive ? {self.attribute => value} : {} doc = instance.class.first(base_conditions.merge(scope_conditions(instance)).merge(where_conditions(instance))) doc.nil? || instance._id == doc._id end def message(instance) super || "has already been taken" end def scope_conditions(instance) return {} unless scope Array(scope).inject({}) do |conditions, key| conditions.merge(key => instance[key]) end end def where_conditions(instance) conditions = {} conditions[attribute] = /^#{Regexp.escape(instance[attribute].to_s)}$/i unless case_sensitive conditions end end end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
mongo_mapper-0.8.0 | lib/mongo_mapper/plugins/validations.rb |
pwnash-mongo_mapper-0.7.6 | lib/mongo_mapper/plugins/validations.rb |