Class: Validatable::UniquenessValidator

Inherits:
ValidationBase
  • Object
show all
Defined in:
lib/mongo/model/integration/validatable/uniqueness_validator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, attribute, options = {}) ⇒ UniquenessValidator

Returns a new instance of UniquenessValidator.



4
5
6
7
# File 'lib/mongo/model/integration/validatable/uniqueness_validator.rb', line 4

def initialize(klass, attribute, options={})
  super
  self.case_sensitive = false if case_sensitive == nil
end

Instance Attribute Details

#case_sensitiveObject

Returns the value of attribute case_sensitive.



2
3
4
# File 'lib/mongo/model/integration/validatable/uniqueness_validator.rb', line 2

def case_sensitive
  @case_sensitive
end

#scopeObject

Returns the value of attribute scope.



2
3
4
# File 'lib/mongo/model/integration/validatable/uniqueness_validator.rb', line 2

def scope
  @scope
end

Instance Method Details

#message(instance) ⇒ Object



27
28
29
# File 'lib/mongo/model/integration/validatable/uniqueness_validator.rb', line 27

def message(instance)
  super || "#{attribute} must be unique!"
end

#valid?(instance) ⇒ Boolean

Returns:



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/mongo/model/integration/validatable/uniqueness_validator.rb', line 9

def valid?(instance)
  conditions = {}

  conditions[scope] = instance.send scope if scope

  value = instance.send attribute
  if case_sensitive
    conditions[attribute] = value
  else
    conditions[attribute] = /^#{Regexp.escape(value.to_s)}$/i
  end

  # Make sure we're not including the current document in the query.
  conditions[:_id] = {_ne: instance.id} if instance.id

  !klass.exists?(conditions)
end