File Coverage

blib/lib/MooX/Keyword.pm
Criterion Covered Total %
statement 38 40 95.0
branch 7 12 58.3
condition n/a
subroutine 10 10 100.0
pod 0 1 0.0
total 55 63 87.3


line stmt bran cond sub pod time code
1             package MooX::Keyword;
2 3     3   369498 use 5.006; use strict; use warnings; our $VERSION = '1.01';
  3     3   10  
  3     3   21  
  3         16  
  3         104  
  3         13  
  3         9  
  3         222  
3 3     3   1527 use MooX::ReturnModifiers; use Anonymous::Object;
  3     3   2331  
  3         170  
  3         1665  
  3         49245  
  3         1101  
4              
5             sub import {
6 4 100   4   1093 my ( $package, %import ) = (shift, ref $_[0] ? %{ $_[0] } : @_);
  2         15  
7 4         23 my $target = caller;
8 4         25 my $moo = Anonymous::Object->new(object_name => 'MooX::Keyword')->hash_to_object_context({
9             return_modifiers( $target )
10             }); # *\o/*
11            
12 4 100       469012 if ($import{extends}) {
13 1 50       6 for my $extend ( ref $import{extends} ? @{ $import{extends} } : $import{extends} ) {
  0         0  
14 1         4 $extend =~ s/^\+/MooX::Keyword::/;
15 1         27 $moo->extends($extend);
16 1         509 %import = (%import, $import{extends}->keyword_meta);
17             }
18 1         4 delete $import{extends};
19             }
20              
21             keyword($target, $moo, 'keyword_meta', { builder => sub {
22 1     1   3 my $m = shift;
23 1         6 return %import;
24 4         42 }});
25 4         18 keyword($target, $moo, $_, $import{$_}) for keys %import;
26            
27 4         288 return 1;
28             }
29              
30             sub keyword {
31 3     3   30 no strict 'refs';
  3         6  
  3         620  
32 7     7 0 20 my ($target, $moo, $keyword, $params) = @_;
33 7 50       21 die 'no builder for ${keyword}' unless $params->{builder};
34 7 0       23 for ($keyword, $params->{alias} ? ref $params->{alias} ? @{ $params->{alias} } : $params->{alias} : ()) {
  0 50       0  
35 7         62 *{"${target}::${_}"} = sub {
36 6     6   48556 $params->{builder}->($moo, @_);
37 7         33 };
38             }
39             }
40              
41             1;
42              
43             __END__