Class: Rimless::RSpec::Matchers::HaveSentKafkaMessage

Inherits:
RSpec::Matchers::BuiltIn::BaseMatcher
  • Object
show all
Includes:
RSpec::Mocks::ExampleMethods
Defined in:
lib/rimless/rspec/matchers.rb

Overview

The Apache Kafka message expectation.

rubocop:disable Metrics/ClassLength because its almost RSpec API code

Instance Method Summary collapse

Constructor Details

#initialize(schema) ⇒ HaveSentKafkaMessage

Instantiate a new expectation object.

Parameters:

  • schema (String, Symbol, nil)

    the expected message schema



18
19
20
21
22
23
24
# File 'lib/rimless/rspec/matchers.rb', line 18

def initialize(schema)
  @schema = schema
  @args = {}
  @data = {}
  @messages = []
  set_expected_number(:exactly, 1)
end

Instance Method Details

#at_least(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (at least).

Parameters:

  • count (Integer)

    the expected amount

Returns:



59
60
61
62
# File 'lib/rimless/rspec/matchers.rb', line 59

def at_least(count)
  set_expected_number(:at_least, count)
  self
end

#at_most(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (at most).

Parameters:

  • count (Integer)

    the expected amount

Returns:



68
69
70
71
# File 'lib/rimless/rspec/matchers.rb', line 68

def at_most(count)
  set_expected_number(:at_most, count)
  self
end

#does_not_match?(proc) ⇒ Boolean

The actual RSpec API check for the expectation (negative).

Parameters:

  • proc (Proc)

    the block to evaluate

Returns:

  • (Boolean)

    whenever the check was unsuccessful or not



128
129
130
131
132
# File 'lib/rimless/rspec/matchers.rb', line 128

def does_not_match?(proc)
  set_expected_number(:at_least, 1)

  !matches?(proc)
end

#exactly(count) ⇒ HaveSentKafkaMessage

Set the expected amount of message (exactly).

Parameters:

  • count (Integer)

    the expected amount

Returns:



50
51
52
53
# File 'lib/rimless/rspec/matchers.rb', line 50

def exactly(count)
  set_expected_number(:exactly, count)
  self
end

#matches?(proc) ⇒ Boolean

The actual RSpec API check for the expectation.

Parameters:

  • proc (Proc)

    the block to evaluate

Returns:

  • (Boolean)

    whenever the check was successful or not



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/rimless/rspec/matchers.rb', line 112

def matches?(proc)
  unless proc.is_a? Proc
    raise ArgumentError, 'have_sent_kafka_message and ' \
                         'sent_kafka_message only support block ' \
                         'expectations'
  end

  listen_to_messages
  proc.call
  check
end

#onceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:once) call.

Returns:



83
84
85
# File 'lib/rimless/rspec/matchers.rb', line 83

def once
  exactly(:once)
end

#supports_block_expectations?Boolean

Serve the RSpec matcher API and signalize we support block evaluation.

Returns:

  • (Boolean)

    the answer



104
105
106
# File 'lib/rimless/rspec/matchers.rb', line 104

def supports_block_expectations?
  true
end

#thriceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:thrice) call.

Returns:



97
98
99
# File 'lib/rimless/rspec/matchers.rb', line 97

def thrice
  exactly(:thrice)
end

#timesHaveSentKafkaMessage

Just syntactic sugar.

Returns:



76
77
78
# File 'lib/rimless/rspec/matchers.rb', line 76

def times
  self
end

#twiceHaveSentKafkaMessage

Just syntactic sugar for a regular exactly(:twice) call.

Returns:



90
91
92
# File 'lib/rimless/rspec/matchers.rb', line 90

def twice
  exactly(:twice)
end

#with(**args) ⇒ HaveSentKafkaMessage

Collect the expectation arguments for the Kafka message passing. (eg. topic)

Parameters:

  • args (Hash{Symbol => Mixed})

    the expected arguments

Returns:



31
32
33
34
# File 'lib/rimless/rspec/matchers.rb', line 31

def with(**args)
  @args = args
  self
end

#with_data(**args) ⇒ HaveSentKafkaMessage

Collect the expectations for the encoded message. The passed message will be decoded accordingly for the check.

Parameters:

  • args (Hash{Symbol => Mixed})

    the expected arguments

Returns:



41
42
43
44
# File 'lib/rimless/rspec/matchers.rb', line 41

def with_data(**args)
  @data = args
  self
end