Class: Easy::Matchers::Validations::HaveValidationMatcher

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

Instance Method Summary collapse

Constructor Details

#initialize(field, type) ⇒ HaveValidationMatcher

Returns a new instance of HaveValidationMatcher.



5
6
7
8
9
# File 'lib/matchers/validations.rb', line 5

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

Instance Method Details

#check_onObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/matchers/validations.rb', line 49

def check_on
  validator_on_methods = [@validator.options[:on]].flatten

  if validator_on_methods.any?
    message = " on methods: #{ validator_on_methods }"

    if on_options_covered_by?(@validator)
      @positive_result_message << message
    else
      @negative_result_message << message
      @result = false
    end
  end
end

#descriptionObject



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

def description
  desc = "have #{ @type } validator on #{ @field }"
  desc << " on #{ @options[:on] }" if @options[:on]
  desc
end

#failure_messageObject



30
31
32
# File 'lib/matchers/validations.rb', line 30

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

#failure_message_when_negatedObject



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

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

#matches?(actual) ⇒ Boolean

Returns:

  • (Boolean)


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

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

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

  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]
  @result
end

#on(*on_method) ⇒ Object



44
45
46
47
# File 'lib/matchers/validations.rb', line 44

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