Class: RSpec::SleepingKingStudios::Matchers::Core::HaveConstantMatcher

Inherits:
BaseMatcher
  • Object
show all
Includes:
Matchers::Composable
Defined in:
lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb

Overview

Matcher for testing whether an object has a specific constant. Includes functionality for testing the value of the constant and whether the constant is immutable.

Since:

  • 2.2.0

Constant Summary

Constants included from Description

Description::DEFAULT_EXPECTED_ITEMS

Instance Attribute Summary

Attributes inherited from BaseMatcher

#actual

Instance Method Summary collapse

Constructor Details

#initialize(expected) ⇒ HaveConstantMatcher

Returns a new instance of HaveConstantMatcher.

Parameters:

  • expected (String, Symbol)

    The name of the constant to check for on the actual object.

Since:

  • 2.2.0



18
19
20
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 18

def initialize expected
  @expected = expected.intern
end

Instance Method Details

#descriptionObject

Since:

  • 2.2.0



23
24
25
26
27
28
29
30
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 23

def description
  message =
    "have #{@immutable ? 'immutable ' : ''}constant #{@expected.inspect}"

  message << ' with value ' << value_to_string if @value_set

  message
end

#does_not_match?(actual) ⇒ Boolean

Inverse of #matches? method.

Parameters:

  • actual (Object)

    the object to test against the matcher

Returns:

  • (Boolean)

    false if the object matches, otherwise true

See Also:

Since:

  • 2.2.0



33
34
35
36
37
38
39
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 33

def does_not_match? actual
  super

  @errors = {}

  !has_constant?
end

#failure_messageObject

Message for when the object does not match, but was expected to. Make sure to always call #matches? first to set up the matcher state.

Since:

  • 2.2.0



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 42

def failure_message
  message = super

  messages = []

  if @errors[:does_not_define_constants]
    message <<
      ", but #{@actual.inspect} does not respond to ::const_defined?"

    return message
  end

  if @errors[:constant_is_not_defined]
    message <<
      ", but #{@actual.inspect} does not define constant #{@expected.inspect}"

    return message
  end

  if hsh = @errors[:value_does_not_match]
    messages <<
      "constant #{@expected.inspect} has value #{hsh[:received].inspect}"
  end

  if hsh = @errors[:value_is_mutable]
    messages <<
      "the value of #{@expected.inspect} was mutable"
  end

  unless messages.empty?
    tools = SleepingKingStudios::Tools::Toolbelt.instance

    message << ', but ' << tools.array_tools.humanize_list(messages)
  end

  message
end

#failure_message_when_negatedObject

Message for when the object matches, but was expected not to. Make sure to always call #matches? first to set up the matcher state.

Since:

  • 2.2.0



81
82
83
84
85
86
87
88
89
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 81

def failure_message_when_negated
  message = super

  message <<
    ", but #{@actual.inspect} defines constant #{@expected.inspect} with "\
    "value #{actual.const_get(@expected).inspect}"

  message
end

#immutableHaveConstantMatcher Also known as: frozen

Sets a mutability expectation. The matcher will determine whether the value of the constant is mutable. Values of nil, false, true are always immutable, as are Numeric and Symbol primitives. Array values must be frozen and all array items must be immutable. Hash values must be frozen and all hash keys and values must be immutable.

Returns:

Since:

  • 2.2.0



98
99
100
101
102
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 98

def immutable
  @immutable = true

  self
end

#immutable?Boolean Also known as: frozen?

Returns True if a mutability expectation is set, otherwise false.

Returns:

  • (Boolean)

    True if a mutability expectation is set, otherwise false.

Since:

  • 2.2.0



107
108
109
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 107

def immutable?
  !!@immutable
end

#matches?(actual) ⇒ Boolean

Checks if the object has a constant :expected. Additionally, if a value expectation is set, compares the value of #expected to the specified value and checks the mutability of the constant.

Parameters:

  • actual (Object)

    The object to check.

Returns:

  • (Boolean)

    true If the object has a constant :expected and matches the value and mutability expectations (if any); otherwise false.

Since:

  • 2.2.0



120
121
122
123
124
125
126
127
128
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 120

def matches? actual
  super

  @errors = {}

  return false unless has_constant?

  matches_constant? :all?
end

#with(value) ⇒ HaveConstantMatcher Also known as: with_value

Sets a value expectation. The matcher will compare the value of the constant with the specified value.

Parameters:

  • value (Object)

    The value to compare.

Returns:

Since:

  • 2.2.0



136
137
138
139
140
# File 'lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb', line 136

def with value
  @value     = value
  @value_set = true
  self
end