File Coverage

blib/lib/Dancer/Factory/Hook.pm
Criterion Covered Total %
statement 45 48 93.7
branch 7 12 58.3
condition n/a
subroutine 13 13 100.0
pod 1 6 16.6
total 66 79 83.5


line stmt bran cond sub pod time code
1             package Dancer::Factory::Hook;
2             our $AUTHORITY = 'cpan:SUKRIA';
3             # ABSTRACT: Singleton class to create Dancer hooks
4             $Dancer::Factory::Hook::VERSION = '1.3521';
5 194     194   1537 use strict;
  194         949  
  194         7482  
6 194     194   1177 use warnings;
  194         988  
  194         5164  
7 194     194   1126 use Carp;
  194         11087  
  194         12068  
8              
9 194     194   1337 use base 'Dancer::Object::Singleton';
  194         410  
  194         86069  
10 194     194   1496 use Dancer::Exception qw(:all);
  194         445  
  194         117735  
11              
12             __PACKAGE__->attributes(qw/ hooks registered_hooks/);
13              
14             sub init {
15 194     194 1 485 my ( $class, $self ) = @_;
16 194         865 $self->hooks( {} );
17 194         739 $self->registered_hooks( [] );
18 194         425 return $self;
19             }
20              
21             sub install_hooks {
22 1226     1226 0 4061 my ( $self, @hooks_name ) = @_;
23              
24 1226 50       3927 if ( !scalar @hooks_name ) {
25 0         0 raise core_factory_hook => "at least one name is required";
26             }
27              
28 1226         3265 foreach my $hook_name (@hooks_name) {
29 3153 50       7064 if ( $self->hook_is_registered($hook_name) ) {
30 0         0 raise core_factory_hook => "$hook_name is already regsitered, please use another name";
31             }
32 3153         7293 $self->_add_hook( $hook_name );
33             }
34             }
35              
36             sub register_hook {
37 132     132 0 309 my ( $self, $hook ) = @_;
38 132         361 $self->_add_registered_hook( $hook->name, $hook->code );
39             }
40              
41             sub _add_registered_hook {
42 132     132   356 my ($class, $hook_name, $compiled_filter) = @_;
43 132         231 push @{$class->hooks->{$hook_name}}, $compiled_filter;
  132         403  
44             }
45              
46             sub _add_hook {
47 3153     3153   5915 my ($self, $hook_name ) = @_;
48 3153         4174 push @{$self->registered_hooks}, $hook_name;
  3153         6162  
49             }
50              
51             sub hook_is_registered {
52 5134     5134 0 9277 my ( $self, $hook_name ) = @_;
53 5134         7617 return grep { $_ eq $hook_name } @{$self->registered_hooks};
  61681         104284  
  5134         11903  
54             }
55              
56             sub execute_hooks {
57 1981     1981 0 4783 my ($self, $hook_name, @args) = @_;
58              
59 1981 50       4082 raise core_factory_hook => "Can't ask for hooks without a position" unless $hook_name;
60              
61 1981 50       4312 if (!$self->hook_is_registered($hook_name)){
62 0         0 raise core_factory_hook => "The hook '$hook_name' doesn't exists";
63             }
64              
65 1981         3183 foreach my $h (@{$self->get_hooks_for($hook_name)}) {
  1981         4300  
66 299         1727 $h->(@args);
67             }
68             }
69              
70             sub get_hooks_for {
71 1983     1983 0 3512 my ( $self, $hook_name ) = @_;
72              
73 1983 50       3787 raise core_factory_hook => "Can't ask for hooks without a position" unless $hook_name;
74              
75 1983 100       4443 $self->hooks->{$hook_name} || [];
76             }
77              
78              
79             1;
80              
81             __END__