File Coverage

blib/lib/Locale/TextDomain/OO/Role/DomainAndCategory.pm
Criterion Covered Total %
statement 50 53 94.3
branch 4 8 50.0
condition n/a
subroutine 12 12 100.0
pod 7 7 100.0
total 73 80 91.2


line stmt bran cond sub pod time code
1             package Locale::TextDomain::OO::Role::DomainAndCategory; ## no critic (TidyCode)
2            
3 9     9   10779 use strict;
  9         22  
  9         241  
4 9     9   41 use warnings;
  9         23  
  9         230  
5 9     9   46 use Carp qw(confess cluck);
  9         19  
  9         556  
6 9     9   52 use Locale::TextDomain::OO::Translator;
  9         18  
  9         232  
7 9     9   42 use Moo::Role;
  9         17  
  9         133  
8            
9             our $VERSION = '1.030';
10            
11             requires qw(
12             category
13             domain
14             );
15            
16             our ( @domains, @categories ); ## no critic (PackageVars)
17            
18             sub callback_scope {
19 2     2 1 7 my ( $self, $callback ) = @_;
20            
21 2         8 local @domains = @domains; ## no critic (LocalVars)
22 2         5 local @categories = @categories; ## no critic (LocalVars)
23 2         43 my $domain = $self->domain;
24 2         41 my $category = $self->category;
25 2         15 my $translation = $callback->();
26 2         32 $self->domain($domain);
27 2         94 $self->category($category);
28            
29 2         75 return $translation;
30             }
31            
32             sub begin_d {
33 10     10 1 3261 my ($self, $domain) = @_;
34            
35 10 50       34 defined $domain
36             or confess 'Domain is not defined';
37 10         194 push
38             @domains,
39             $self->domain;
40 10         214 $self->domain($domain);
41            
42 10         384 return $self;
43             }
44            
45             sub begin_c {
46 8     8 1 4433 my ($self, $category) = @_;
47            
48 8 50       37 defined $category
49             or confess 'Category is not defined';
50 8         152 push
51             @categories,
52             $self->category;
53 8         164 $self->category($category);
54            
55 8         304 return $self;
56             }
57            
58             sub begin_dc {
59 4     4 1 5132 my ($self, $domain, $category) = @_;
60            
61 4         26 $self->begin_d($domain);
62 4         23 $self->begin_c($category);
63            
64 4         13 return $self;
65             }
66            
67             sub end_d {
68 8     8 1 17 my $self = shift;
69            
70 8 50       32 if ( ! @domains ) {
71 0         0 cluck 'Tried to get the domain from stack but no domain is not stored';
72 0         0 return $self;
73             }
74 8         217 $self->domain( pop @domains );
75            
76 8         541 return $self;
77             }
78            
79             sub end_c {
80 6     6 1 15 my $self = shift;
81            
82 6 50       29 if ( ! @categories ) {
83 0         0 cluck 'Tried to get the category from stack but no category is stored',
84             return $self;
85             }
86 6         140 $self->category( pop @categories );
87            
88 6         233 return $self;
89             }
90            
91             sub end_dc {
92 4     4 1 13 my $self = shift;
93            
94 4         19 $self->end_d;
95 4         17 $self->end_c;
96            
97 4         10 return $self;
98             }
99            
100             1;
101            
102             __END__