Class: PrometheusExporter::Ext::RSpec::SendMetricsMatcher
- Inherits:
-
Object
- Object
- PrometheusExporter::Ext::RSpec::SendMetricsMatcher
show all
- Includes:
- Matchers, RSpec::Matchers::Composable, RSpec::Matchers::DSL::DefaultImplementations
- Defined in:
- lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Matchers
#a_counter_metric, #a_gauge_metric, #a_gauge_with_expire_metric, #a_histogram_metric, #a_prometheus_metric, #a_summary_metric, #send_metrics
Constructor Details
Returns a new instance of SendMetricsMatcher.
12
13
14
15
16
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 12
def initialize(expected)
@expected = expected
@ordered = false
@times = nil
end
|
Instance Attribute Details
#actual ⇒ Object
Returns the value of attribute actual.
9
10
11
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 9
def actual
@actual
end
|
#expected ⇒ Object
Returns the value of attribute expected.
9
10
11
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 9
def expected
@expected
end
|
Instance Method Details
#description_of(object) ⇒ Object
75
76
77
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 75
def description_of(object)
RSpec::Support::ObjectFormatter.new(nil).format(object)
end
|
#failure_message ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 44
def failure_message
if expected
expected_value = @ordered ? expected : match_array(expected)
+"expected #{name} to receive #{description_of(expected_value)}, but got\n #{description_of(actual)}"
elsif @times
values_match?(@times, actual.size)
+"expected #{name} to receive #{@times} metrics, but got #{actual.size}\n #{description_of(actual)}"
else
actual.size
+"expected #{name} to receive more than 1 metric, but got #{actual.size}\n #{description_of(actual)}"
end
end
|
#matches?(actual_proc) ⇒ Boolean
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 26
def matches?(actual_proc)
raise ArgumentError, "#{name} matcher supports only block expectations" unless actual_proc.is_a?(Proc)
metrics_before = PrometheusExporter::Ext::RSpec::TestClient.instance.metrics
actual_proc.call
metrics_after = PrometheusExporter::Ext::RSpec::TestClient.instance.metrics - metrics_before
@actual = metrics_after.map { |metric| deep_symbolize_keys(metric) }
if expected
expected_value = @ordered ? expected : match_array(expected)
values_match?(expected_value, actual)
elsif @times
values_match?(@times, actual.size)
else
actual.size >= 1
end
end
|
#name ⇒ Object
18
19
20
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 18
def name
'sends metrics to prometheus'
end
|
#ordered ⇒ Object
57
58
59
60
61
62
63
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 57
def ordered
raise ArgumentError, 'ordered cannot be when expected not provided' if expected.nil?
raise ArgumentError, 'ordered cannot be used with times' if @times
@ordered = true
self
end
|
#supports_block_expectations? ⇒ Boolean
22
23
24
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 22
def supports_block_expectations?
true
end
|
#times(qty) ⇒ Object
65
66
67
68
69
70
71
72
73
|
# File 'lib/prometheus_exporter/ext/rspec/send_metrics_matcher.rb', line 65
def times(qty)
raise ArgumentError, 'times argument must be an integer' unless qty.is_a?(Integer)
raise ArgumentError, 'times argument must be >= 1' unless qty >= 1
raise ArgumentError, 'ordered cannot be when expected is provided' unless expected.nil?
raise ArgumentError, 'ordered cannot be used with times' if @ordered
@times = qty
self
end
|