Class: NoBrainer::Matchers::Validations::HaveValidationMatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/matchers/validations.rb

Instance Method Summary collapse

Constructor Details

#initialize(field, validation_type) ⇒ HaveValidationMatcher

Returns a new instance of HaveValidationMatcher.



7
8
9
10
11
# File 'lib/matchers/validations.rb', line 7

def initialize(field, validation_type)
  @field = field.to_s
  @type = validation_type.to_s
  @options = {}
end

Instance Method Details

#descriptionObject



45
46
47
48
49
50
# File 'lib/matchers/validations.rb', line 45

def description
  desc = "have #{@type.inspect} validator on #{@field.inspect}"
  desc += " on #{@options[:on]}" if @options[:on]
  desc += " with message #{@expected_message.inspect}" if @expected_message
  desc
end

#failure_message_for_shouldObject Also known as: failure_message



34
35
36
# File 'lib/matchers/validations.rb', line 34

def failure_message_for_should
  "Expected #{@klass.inspect} to #{description}; instead got #{@negative_result_message}"
end

#failure_message_for_should_notObject Also known as: failure_message_when_negated



38
39
40
# File 'lib/matchers/validations.rb', line 38

def failure_message_for_should_not
  "Expected #{@klass.inspect} to not #{description}; instead got #{@positive_result_message}"
end

#matches?(actual) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/matchers/validations.rb', line 13

def matches?(actual)
  @klass = actual.is_a?(Class) ? actual : actual.class

  @validator = @klass.validators_on(@field).detect do |v|
    (v.kind.to_s == @type) && (!v.options[:on] || on_options_matches?(v))
  end

  if @validator
    @negative_result_message = "#{@type.inspect} validator on #{@field.inspect}"
    @positive_result_message = "#{@type.inspect} validator on #{@field.inspect}"
  else
    @negative_result_message = "no #{@type.inspect} validator on #{@field.inspect}"
    return false
  end

  @result = true
  check_on if @options[:on]
  check_expected_message if @expected_message
  @result
end

#on(*on_method) ⇒ Object



52
53
54
55
# File 'lib/matchers/validations.rb', line 52

def on(*on_method)
  @options[:on] = on_method.flatten
  self
end

#with_message(message) ⇒ Object



57
58
59
60
# File 'lib/matchers/validations.rb', line 57

def with_message(message)
  @expected_message = message
  self
end