rspec-otel 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2db5ebf1aa940bae5b290f6d6683e1f1bea754fc83e8eaf9997bb3971235244
4
- data.tar.gz: 5c7b7ca60e93ca6ccf82479cfe3374c5420ab5be80484787c4cdc74ed67548cb
3
+ metadata.gz: f5e1d1bb621033e9a0fb1d1195d745a2d4300f00723b83ca8cb380f170a660d5
4
+ data.tar.gz: 0d4812bb0b05657bcae39dae45e89f2db35cbb13c25bb47c8ff180e562e6c050
5
5
  SHA512:
6
- metadata.gz: f99a6e31d6acc0fc5dc26453690a7b66a6ed8352cc4790b26fccdad93dfa1692adaaa9f3f4fd5798c8d1e9084a8c509ebf1800936a3b4a1354ca3ddc6e9b701e
7
- data.tar.gz: 12a5346b1eb3b3247d9d5d62e46aa1c4e3c13f891a0abdd72a2f2931e054f86bcc6d9634959faf65329689933af438075de259682b7357995bb596dfd8b5a008
6
+ metadata.gz: 948d9807ebe6e5a96c6555c6e707f170928feae596cfc304550342ce894b94aa51db2c755c0aa77814ff8a3e7bd518d5004a328ec9e9f4f67c278d806a5fd265
7
+ data.tar.gz: 7780de8e139754b3255514c49ebbf742f09c73011737245d509cc9f04284a90f28d6edf9dac148d357e09e0839d22242ffae05c4df3ad5d2cc3c8f19a9d7613c
@@ -8,18 +8,18 @@ module RspecOtel
8
8
  def initialize(name = nil)
9
9
  @name = name
10
10
  @filters = []
11
+ @before_spans = []
11
12
 
12
- add_name_filter
13
+ @filters << name_filter
13
14
  end
14
15
 
15
16
  def matches?(block)
16
- before_spans = []
17
17
  if block.respond_to?(:call)
18
- before_spans = RspecOtel.exporter.finished_spans
18
+ @before_spans = RspecOtel.exporter.finished_spans
19
19
  block.call
20
20
  end
21
21
 
22
- (RspecOtel.exporter.finished_spans - before_spans).each do |span|
22
+ (RspecOtel.exporter.finished_spans - @before_spans).each do |span|
23
23
  return true if @filters.all? { |f| f.call(span) }
24
24
  end
25
25
 
@@ -110,7 +110,17 @@ module RspecOtel
110
110
  end
111
111
 
112
112
  def failure_message
113
- "expected span #{failure_match_description} #{printable_name} to have been emitted, but it couldn't be found"
113
+ closest = closest_span
114
+ expect_content = "expected span #{failure_match_description} #{printable_name} to have been emitted"
115
+
116
+ case closest
117
+ when nil
118
+ "#{expect_content}, but there were no spans emitted at all"
119
+ when OpenTelemetry::SDK::Trace::SpanData
120
+ "#{expect_content}, but it couldn't be found. Found a close matching span named `#{closest.name}`"
121
+ else
122
+ raise "I don't know what to do with a #{closest.class} span"
123
+ end
114
124
  end
115
125
 
116
126
  def failure_message_when_negated
@@ -123,6 +133,15 @@ module RspecOtel
123
133
 
124
134
  private
125
135
 
136
+ def closest_span
137
+ all_spans = (RspecOtel.exporter.finished_spans - @before_spans)
138
+ span = all_spans.filter_map do |s|
139
+ span if name_filter.call(s)
140
+ end.first
141
+ span = all_spans.first if span.nil?
142
+ span
143
+ end
144
+
126
145
  def failure_match_description
127
146
  case name
128
147
  when String
@@ -141,8 +160,8 @@ module RspecOtel
141
160
  end
142
161
  end
143
162
 
144
- def add_name_filter
145
- @filters << lambda do |span|
163
+ def name_filter
164
+ lambda do |span|
146
165
  case name
147
166
  when String
148
167
  span.name == name
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RspecOtel
4
- VERSION = '0.0.5'
4
+ VERSION = '0.0.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-otel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien MATHIEU
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-09-23 00:00:00.000000000 Z
10
+ date: 2025-03-21 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: opentelemetry-api
@@ -85,7 +84,6 @@ licenses:
85
84
  - MIT
86
85
  metadata:
87
86
  rubygems_mfa_required: 'true'
88
- post_install_message:
89
87
  rdoc_options: []
90
88
  require_paths:
91
89
  - lib
@@ -100,8 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
98
  - !ruby/object:Gem::Version
101
99
  version: '0'
102
100
  requirements: []
103
- rubygems_version: 3.5.6
104
- signing_key:
101
+ rubygems_version: 3.6.2
105
102
  specification_version: 4
106
103
  summary: RSpec matchers for the OpenTelemetry framework
107
104
  test_files: []