Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

51 lines (44 sloc) 1.521 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 allow_nil if value.nil? and not allow_nil.nil?
return allow_blank if value.blank? and not allow_blank.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.