File Coverage

lib/Data/Identifier/Interface/Userdata.pm
Criterion Covered Total %
statement 19 22 86.3
branch 1 4 25.0
condition 7 9 77.7
subroutine 6 6 100.0
pod 1 1 100.0
total 34 42 80.9


line stmt bran cond sub pod time code
1             # Copyright (c) 2023-2025 Philipp Schafft
2              
3             # licensed under Artistic License 2.0 (see LICENSE file)
4              
5             # ABSTRACT: format independent identifier object
6              
7              
8             package Data::Identifier::Interface::Userdata;
9              
10 7     7   3966 use v5.20;
  7         32  
11 7     7   39 use strict;
  7         14  
  7         237  
12 7     7   42 use warnings;
  7         12  
  7         357  
13              
14 7     7   115 use Carp;
  7         28  
  7         2857  
15              
16             our $VERSION = v0.28;
17              
18             my %_package_storage;
19              
20              
21             sub userdata {
22 186     186 1 2097 my ($self, $package, $key, $value) = @_;
23 186         213 my $userdata;
24              
25 186 50       175 if (ref $self) {
26 186         194 $userdata = $self->_userdata_provider;
27             } else {
28 0 0       0 if ($self =~ /^[a-zA-Z][a-zA-Z0-9]*(?:::[a-zA-Z0-9]+)*$/) {
29 0   0     0 $userdata = $_package_storage{$self} //= {};
30             } else {
31 0         0 croak 'Invalid package name: '.$self;
32             }
33             }
34              
35 186   100     292 $userdata->{$package} //= {};
36 186   100     451 return $userdata->{$package}{$key} = $value // $userdata->{$package}{$key};
37             }
38              
39              
40             sub _userdata_provider {
41 186     186   209 my ($self) = @_;
42 186   100     381 return $self->{userdata} //= {};
43             }
44              
45             1;
46              
47             __END__