Module: RSpecTelemetry::Trace::Viewer::Label

Defined in:
lib/rspec_telemetry/trace/viewer/label.rb

Defined Under Namespace

Classes: Segment

Class Method Summary collapse

Class Method Details

.action_segments(action) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 33

def self.action_segments(action)
  tag = action.failed? ? " [#{action.status.upcase}]" : ""
  style = action.failed? ? :error : :action
  segments = [seg("EXAMPLE #{action.label}#{tag}", style)]
  segments << seg("  at: #{action.source}", :dim) if action.source
  segments
end

.category(entry) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 20

def self.category(entry)
  if entry.is_a?(Document::Action)
    return entry.failed? ? :error : :action
  end

  case entry.op
  when "factory"
    entry.fields["depth"].to_i.positive? ? :dim : :plain
  else
    :plain
  end
end

.compact(value) ⇒ Object



76
77
78
79
80
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 76

def self.compact(value)
  return "" if value.nil? || value.empty?

  Format.value(value)
end

.event_segments(event) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 41

def self.event_segments(event)
  case event.op
  when "factory"
    factory_segments(event.fields)
  else
    [seg("#{event.op.upcase} #{compact(extra(event.fields))}", :plain)]
  end
end

.extra(fields) ⇒ Object



70
71
72
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 70

def self.extra(fields)
  fields.reject { |key, _| Document::INFRA_FIELDS.include?(key) }
end

.factory_segments(fields) ⇒ Object



50
51
52
53
54
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 50

def self.factory_segments(fields)
  depth = fields["depth"].to_i
  style = depth.positive? ? :dim : :plain
  [seg("#{"  " * depth}FACTORY #{name(fields)}#{traits(fields["traits"])}  #{timing(fields)}", style)]
end

.name(fields) ⇒ Object



56
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 56

def self.name(fields) = "#{fields["factory"]}:#{fields["strategy"]}"

.plain(entry) ⇒ Object



18
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 18

def self.plain(entry) = segments(entry).map(&:text).join

.seg(text, style) ⇒ Object



74
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 74

def self.seg(text, style) = Segment.new(text: text, style: style)

.segments(entry) ⇒ Object



12
13
14
15
16
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 12

def self.segments(entry)
  return action_segments(entry) if entry.is_a?(Document::Action)

  event_segments(entry)
end

.timing(fields) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 58

def self.timing(fields)
  total = Format.ms(fields["duration_ms"])
  self_ms = fields["self_duration_ms"]
  return total.to_s unless self_ms && self_ms != fields["duration_ms"]

  "#{total} (self #{Format.ms(self_ms)})"
end

.traits(list) ⇒ Object



66
67
68
# File 'lib/rspec_telemetry/trace/viewer/label.rb', line 66

def self.traits(list)
  list.nil? || list.empty? ? "" : " [#{Array(list).join(",")}]"
end