Sha256: 97515f3caed191da04d6f4c238af8c5a075716ffadfefa8179fc850f19262871

Contents?: true

Size: 1.14 KB

Versions: 7

Compression:

Stored size: 1.14 KB

Contents

module Devise
  module Orm
    module DataMapper
      module ActiveModelCompatibility
        # include ActiveModel::Validations does not make save check valid?.
        # This may not be the best solution, but it seems to work. Note that
        # Compatibility is included after this module; its #save method handles
        # the :validate => false option.
        def save(*args)
          retval = valid? && super(*args)
          assert_save_successful(:save, retval)
          retval
        end
      end

      module ActiveModelUniquenessCompatibility
        def validates_uniqueness_of(*fields)
          validates_with UniquenessValidator, _merge_attributes(fields)
        end
      end

      class UniquenessValidator < ActiveModel::EachValidator
        def validate_each(target, attribute, value)
          resource = ::DataMapper.repository(target.repository.name) { target.model.first(attribute => value) }
          if resource.nil? || (target.saved? && resource.key == target.key)
            return true
          else
            target.errors.add(attribute, :taken)
            return false
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dm-devise-2.2.1 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-2.2.0 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-2.1.0 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-2.0.1 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-2.0.0 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-1.5.0 lib/devise/orm/data_mapper/validations/active_model.rb
dm-devise-1.5.0.beta lib/devise/orm/data_mapper/validations/active_model.rb