File Coverage

blib/lib/DDG/Meta/Block.pm
Criterion Covered Total %
statement 30 30 100.0
branch 5 6 83.3
condition n/a
subroutine 11 11 100.0
pod 1 1 100.0
total 47 48 97.9


line stmt bran cond sub pod time code
1             package DDG::Meta::Block;
2             our $AUTHORITY = 'cpan:DDG';
3             # ABSTRACT: Inject keywords to make a L plugin
4             $DDG::Meta::Block::VERSION = '1016';
5 11     19   39 use strict;
  11         15  
  11         256  
6 11     19   35 use warnings;
  11         15  
  11         205  
7 11     11   33 use Carp;
  11         13  
  11         433  
8 11     11   3822 use DDG::Block::Blockable::Triggers;
  11         23  
  11         272  
9 11     11   48 use Package::Stash;
  11         14  
  11         1751  
10             require Moo::Role;
11              
12              
13             my %applied;
14              
15             sub apply_keywords {
16 35     35 1 58 my ( $class, $target ) = @_;
17              
18 35 50       100 return if exists $applied{$target};
19 35         61 $applied{$target} = undef;
20              
21             #
22             # triggers
23             #
24              
25 35         36 my $triggers;
26 35         277 my $stash = Package::Stash->new($target);
27              
28              
29 35     33   408 $stash->add_symbol('&triggers_block_type',sub { $triggers->block_type });
  33         340  
30              
31              
32 35     35   221 $stash->add_symbol('&get_triggers',sub { $triggers->get });
  35         4505  
33              
34              
35 35 100   27   217 $stash->add_symbol('&has_triggers',sub { $triggers ? 1 : 0 });
  27     25   192  
36              
37              
38             $stash->add_symbol('&triggers',sub {
39 47 100   47   723 $triggers = DDG::Block::Blockable::Triggers->new unless $triggers;
40 47         124 $triggers->add(@_)
41 35         209 });
42              
43             #
44             # apply role
45             #
46              
47 35         216 Moo::Role->apply_role_to_package($target,'DDG::Block::Blockable');
48              
49             }
50              
51             1;
52              
53             __END__