Class: Sidekiq::Sorbet::RSpec::Matchers::HaveArg

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

Overview

Matcher for validating a single argument definition

Examples:

expect(MyWorker).to have_arg(:user_id, Integer)
expect(MyWorker).to have_arg(:notify, T::Boolean).with_default(false)

Instance Method Summary collapse

Constructor Details

#initialize(field_name, expected_type = nil) ⇒ HaveArg

Returns a new instance of HaveArg.



15
16
17
18
19
20
# File 'lib/sidekiq/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



51
52
53
54
55
56
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 51

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

#failure_messageObject



43
44
45
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 43

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

#failure_message_when_negatedObject



47
48
49
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 47

def failure_message_when_negated
  "expected #{@actual}::Args not to have argument :#{@field_name}"
end

#matches?(worker_class) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
38
39
40
41
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 32

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

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

  true
end

#with_default(default_value) ⇒ HaveArg

Chain to check for a specific default value

Parameters:

  • default_value (Object)

    The expected default value

Returns:



26
27
28
29
30
# File 'lib/sidekiq/sorbet/rspec/matchers.rb', line 26

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