Sha256: 9bc256baa6c0e0853c79e887f7dcf2ba306c4512c6dd8293abae01bad7518719
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
module DataMapper module Validations class UniqueValidator < GenericValidator def initialize(field_name, options = {}) @options = options @field_name = field_name.to_sym end def call(target) unless valid?(target) error_message = '%s has already been taken'.t(Inflector.humanize(@field_name)) add_error(target, error_message , @field_name) return false end return true end def valid?(target) field_value = target.instance_variable_get("@#{@field_name}") return true if @options[:allow_nil] && field_value.nil? finder_options = { @field_name => field_value } if @options[:scope] scope_value = target.instance_variable_get("@#{@options[:scope]}") finder_options.merge! @options[:scope] => scope_value end finder_options.merge!({ target.session.table(target.class).key.name.not => target.key }) unless target.new_record? target.session.first(target.class, finder_options).nil? end end module ValidatesUniquenessOf def self.included(base) base.extend(ClassMethods) end module ClassMethods # No bueno? DEFAULT_OPTIONS = { :on => :save } def validates_uniqueness_of(field, options = {}) opts = retrieve_options_from_arguments_for_validators([options], DEFAULT_OPTIONS) validations.context(opts[:context]) << Validations::UniqueValidator.new(field, opts) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
datamapper-0.2.3 | lib/data_mapper/validations/unique_validator.rb |