File Coverage

blib/lib/OpenTracing/Role/SpanContext.pm
Criterion Covered Total %
statement 33 33 100.0
branch n/a
condition n/a
subroutine 14 14 100.0
pod 6 7 85.7
total 53 54 98.1


line stmt bran cond sub pod time code
1             package OpenTracing::Role::SpanContext;
2              
3             our $VERSION = 'v0.85.0';
4              
5 19     19   1058487 use Moo::Role;
  19         16639  
  19         139  
6 19     19   10731 use MooX::HandlesVia;
  19         8692  
  19         151  
7 19     19   4619 use MooX::Should;
  19         21629  
  19         136  
8              
9 19     19   10285 use Data::GUID;
  19         274229  
  19         128  
10 19     19   13238 use Sub::Trigger::Lock;
  19         45444  
  19         252  
11 19     19   9230 use Types::Standard qw/HashRef Str/;
  19         507153  
  19         201  
12              
13             has trace_id => (
14             is => 'rw',
15             # should => Uuid, # not restraints here, do so when consuming this
16             init_arg => undef,
17             default => sub { Data::GUID->new },
18             trigger => Lock,
19             );
20              
21             has span_id => (
22             is => 'rw',
23             # should => Uuid, # not restraints here, do so when consuming this
24             init_arg => undef,
25             default => sub { Data::GUID->new },
26             trigger => Lock,
27             );
28              
29             has baggage_items => (
30             is => 'rwp',
31             should => HashRef[Str],
32             handles_via => 'Hash',
33             handles => {
34             # get_baggage_item => 'get',
35             get_baggage_items => 'all',
36             },
37             default => sub{ {} },
38             trigger => Lock,
39             );
40              
41             # XXX: trigger and $obj->get_baggage_item( 'foo' ) do not play well together
42             # feels like a bug in Moo or Sub::Trigger::Lock
43             #
44             sub get_baggage_item {
45 6     6 1 4175 my $self = shift;
46 6         14 my $item_key = shift;
47            
48 6         112 return { $self->get_baggage_items() }->{ $item_key }
49             }
50              
51             sub new_clone {
52 3     3 1 146 my $self = shift;
53            
54 3         7 my $class = ref $self;
55            
56 3         58 $class->new( %$self )
57             }
58              
59 2     2 1 786 sub with_trace_id { $_[0]->clone_with( trace_id => $_[1] ) }
60              
61 6     6 1 803 sub with_span_id { $_[0]->clone_with( span_id => $_[1] ) }
62              
63             sub with_baggage_item {
64 1     1 1 1373 my ( $self, $key, $value ) = @_;
65            
66 1         34 $self->clone_with(
67             baggage_items => { $self->get_baggage_items(), $key => $value },
68             );
69             }
70              
71             sub with_baggage_items {
72 3     3 1 12609 my ( $self, %args ) = @_;
73            
74 3         62 $self->clone_with(
75             baggage_items => { $self->get_baggage_items(), %args },
76             );
77             }
78              
79             sub clone_with {
80 12     12 0 657 my ( $self, @args ) = @_;
81            
82 12         110 bless { %$self, @args }, ref $self;
83            
84             }
85              
86              
87              
88             BEGIN {
89             # use Role::Tiny::With;
90 19     19   24707 with 'OpenTracing::Interface::SpanContext'
91             }
92              
93             1;