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-2026 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   2556 use v5.20;
  7         19  
11 7     7   26 use strict;
  7         7  
  7         144  
12 7     7   22 use warnings;
  7         7  
  7         231  
13              
14 7     7   28 use Carp;
  7         7  
  7         1902  
15              
16             our $VERSION = v0.30;
17              
18             my %_package_storage;
19              
20              
21             sub userdata {
22 189     189 1 870 my ($self, $package, $key, $value) = @_;
23 189         266 my $userdata;
24              
25 189 50       313 if (ref $self) {
26 189         331 $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 189   100     542 $userdata->{$package} //= {};
36 189   100     853 return $userdata->{$package}{$key} = $value // $userdata->{$package}{$key};
37             }
38              
39              
40             sub _userdata_provider {
41 189     189   303 my ($self) = @_;
42 189   100     660 return $self->{userdata} //= {};
43             }
44              
45             1;
46              
47             __END__