rspec-otel 0.0.7 → 0.0.8

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: b966349d533ad57a8ee5fc1fd79b7ed99922beb6aad8fc1fb59e97d8062cdf5e
4
- data.tar.gz: e167fba956f24f180846574e5b87214f906b0d35377d7b92230df99aa6244dc2
3
+ metadata.gz: 494c22ee6a688468f77094d8b4f27242edd872ec3a24232337375b8dd611d38e
4
+ data.tar.gz: ecc743b5a1752adfa8d624d17ab3f6ce87a291ce4393d480fb33f7ef92068e77
5
5
  SHA512:
6
- metadata.gz: 5f19d4e4b8c94818c8d11e373380fc527c8e61f875e24189c3fa401a38d49f1647eb4f5e4862dea702de3397fd2ec81ee6deca4612056678c8de9faa90208eae
7
- data.tar.gz: a3320a67e728db92483d66a7cad492abbc7785cb7088417ab8e9e23b1648db348b0b32e869b308d6369a0cb7c267c613a17e7f0f810d11ab5138a4cbb6072b98
6
+ metadata.gz: 496f2ac07d3b62cc36c4027266d0dbd6188e75fb075140b52791d3697845585223cdaebaf7e79e60b733a175b1b2352ffbbac88c00c0920c7567c319f2526253
7
+ data.tar.gz: d26ee3edc01891c632cb97cd92b02507849ee4c33c20faae47057a7f523f01e010c38ccabf4940dbdc601ac9f8734ffe56fae5f0c7c6aea4aced9ce7103feb2f
@@ -116,15 +116,12 @@ module RspecOtel
116
116
 
117
117
  def failure_message
118
118
  closest = closest_span
119
- expect_content = "expected span #{failure_match_description} #{printable_name} to have been emitted"
119
+ prefix = "expected span #{failure_match_description} #{printable_name} to have been emitted"
120
120
 
121
121
  case closest
122
- when nil
123
- "#{expect_content}, but there were no spans emitted at all"
124
- when OpenTelemetry::SDK::Trace::SpanData
125
- "#{expect_content}, but it couldn't be found. Found a close matching span named `#{closest.name}`"
126
- else
127
- raise "I don't know what to do with a #{closest.class} span"
122
+ when nil then "#{prefix}, but there were no spans emitted at all"
123
+ when OpenTelemetry::SDK::Trace::SpanData then closest_not_found_message(prefix, closest)
124
+ else raise "I don't know what to do with a #{closest.class} span"
128
125
  end
129
126
  end
130
127
 
@@ -219,6 +216,11 @@ module RspecOtel
219
216
 
220
217
  !link.empty?
221
218
  end
219
+
220
+ def closest_not_found_message(prefix, span)
221
+ "#{prefix}, but it couldn't be found. " \
222
+ "Found a close matching span named `#{span.name}`#{SpanDetails.new(span)}"
223
+ end
222
224
  end
223
225
  end
224
226
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RspecOtel
4
+ module Matchers
5
+ class SpanDetails
6
+ def initialize(span)
7
+ @span = span
8
+ end
9
+
10
+ def to_s
11
+ lines = [attributes_details, events_details, links_details, status_details].compact
12
+ return '' if lines.empty?
13
+
14
+ "\n#{lines.join("\n")}"
15
+ end
16
+
17
+ private
18
+
19
+ def attributes_details
20
+ return unless @span.attributes&.any?
21
+
22
+ " attributes: #{@span.attributes.inspect}"
23
+ end
24
+
25
+ def events_details
26
+ return unless @span.events&.any?
27
+
28
+ format_collection('events', @span.events) { |e| format_item(e.name, e.attributes) }
29
+ end
30
+
31
+ def links_details
32
+ return unless @span.links&.any?
33
+
34
+ format_collection('links', @span.links) { |l| format_item('link', l.attributes) }
35
+ end
36
+
37
+ def status_details
38
+ return if @span.status.nil? || @span.status.code == OpenTelemetry::Trace::Status::UNSET
39
+
40
+ label = status_label(@span.status.code)
41
+ desc = @span.status.description
42
+ status_str = desc.to_s.empty? ? label : "#{label} (#{desc})"
43
+ " status: #{status_str}"
44
+ end
45
+
46
+ def format_collection(header, collection, &)
47
+ item_lines = collection.map(&)
48
+ " #{header}:\n#{item_lines.join("\n")}"
49
+ end
50
+
51
+ def format_item(label, attributes)
52
+ attributes&.any? ? " - #{label} #{attributes.inspect}" : " - #{label}"
53
+ end
54
+
55
+ def status_label(code)
56
+ case code
57
+ when OpenTelemetry::Trace::Status::OK then 'ok'
58
+ when OpenTelemetry::Trace::Status::ERROR then 'error'
59
+ else 'unknown'
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -9,3 +9,4 @@ module RspecOtel
9
9
  end
10
10
 
11
11
  require 'rspec_otel/matchers/emit_span'
12
+ require 'rspec_otel/matchers/span_details'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RspecOtel
4
- VERSION = '0.0.7'
4
+ VERSION = '0.0.8'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-otel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien MATHIEU
@@ -9,6 +9,20 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: logger
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: opentelemetry-api
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -77,6 +91,7 @@ files:
77
91
  - lib/rspec_otel.rb
78
92
  - lib/rspec_otel/matchers.rb
79
93
  - lib/rspec_otel/matchers/emit_span.rb
94
+ - lib/rspec_otel/matchers/span_details.rb
80
95
  - lib/rspec_otel/rspec.rb
81
96
  - lib/rspec_otel/version.rb
82
97
  homepage: https://github.com/dmathieu/rspec-otel
@@ -98,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
113
  - !ruby/object:Gem::Version
99
114
  version: '0'
100
115
  requirements: []
101
- rubygems_version: 3.6.9
116
+ rubygems_version: 4.0.6
102
117
  specification_version: 4
103
118
  summary: RSpec matchers for the OpenTelemetry framework
104
119
  test_files: []