Class: Phlex::Sorbet::RSpec::Matchers::HaveProp

Inherits:
Object
  • Object
show all
Defined in:
lib/phlex/sorbet/rspec/matchers.rb

Overview

Matcher for validating a single prop definition

Examples:

expect(MyComponent).to have_prop(:user_id, Integer)
expect(MyComponent).to have_prop(:notify, T::Boolean).with_default(false)

Instance Method Summary collapse

Constructor Details

#initialize(field_name, expected_type = nil) ⇒ HaveProp

Returns a new instance of HaveProp.



15
16
17
18
19
20
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 15

def initialize(field_name, expected_type = nil)
  @field_name = field_name
  @expected_type = expected_type
  @expected_default = nil
  @check_default = false
end

Instance Method Details

#descriptionObject



48
49
50
51
52
53
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 48

def description
  desc = "have prop :#{@field_name}"
  desc += " of type #{@expected_type}" if @expected_type
  desc += " with default #{@expected_default.inspect}" if @check_default
  desc
end

#failure_messageObject



40
41
42
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 40

def failure_message
  @failure_message || "expected #{@actual} to have prop :#{@field_name}"
end

#failure_message_when_negatedObject



44
45
46
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 44

def failure_message_when_negated
  "expected #{@actual}::Props not to have prop :#{@field_name}"
end

#matches?(component_class) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 29

def matches?(component_class)
  @actual = component_class
  props = fetch_props(component_class)

  return false unless field_exists?(component_class, props)
  return false unless type_matches?(component_class, props[@field_name])
  return false unless default_matches?(component_class, props[@field_name])

  true
end

#with_default(default_value) ⇒ Object

Chain to check for a specific default value



23
24
25
26
27
# File 'lib/phlex/sorbet/rspec/matchers.rb', line 23

def with_default(default_value)
  @expected_default = default_value
  @check_default = true
  self
end