Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

50 lines (44 sloc) 1.488 kB
# encoding: UTF-8
module MongoMapper
module Plugins
module Validations
def self.configure(model)
model.class_eval do
include Validatable
extend Validations::DocumentMacros
end
end
module DocumentMacros
def validates_uniqueness_of(*args)
add_validations(args, 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
Jump to Line
Something went wrong with that request. Please try again.