File Coverage

erecipes/perl/lib/CGI/Ex/Recipes.pm
Criterion Covered Total %
statement 27 85 31.7
branch 0 34 0.0
condition 0 27 0.0
subroutine 9 27 33.3
pod 18 18 100.0
total 54 191 28.2


line stmt bran cond sub pod time code
1             package CGI::Ex::Recipes;
2 1     1   27743 use utf8;
  1         11  
  1         5  
3 1     1   32 use warnings;
  1         2  
  1         29  
4 1     1   5 use strict;
  1         2  
  1         42  
5 1     1   6 use Carp qw(croak);
  1         2  
  1         66  
6 1     1   1030 use Data::Dumper;
  1         11808  
  1         86  
7 1     1   8 use base qw(CGI::Ex::App);
  1         3  
  1         1063  
8 1     1   16318 use CGI::Ex::Die register => 1;
  1         11514  
  1         9  
9 1     1   235 use CGI::Ex::Dump qw(debug dex_warn ctrace dex_trace);
  1         3  
  1         80  
10 1         1845 use CGI::Ex::Recipes::DBIx qw(
11             dbh
12             sql
13             create_tables
14             categories
15             recipes
16 1     1   584 );
  1         4  
17              
18             our $VERSION = '0.08';
19              
20             sub ext_conf {
21 0     0 1   my $self = shift;
22 0 0         $self->{'ext_conf'} = shift if @_ == 1;
23 0   0       return $self->{'ext_conf'} || 'conf';
24             }
25              
26             #overwritten the new (in 2.18)implementation of 'conf' so
27             # the application can find its, given Recipes.conf
28             sub conf {
29 0     0 1   my $self = shift;
30 0 0         $self->{'conf'} = pop if @_ == 1;
31 0   0       return $self->{'conf'} ||= do {
32 0   0       my $conf = $self->conf_obj->read($self->conf_file, {no_warn_on_fail => 1}) || croak $@;
33             #my $conf = $self->conf_file;
34             #$conf = ($self->conf_obj->read($conf, {no_warn_on_fail => 1}) || $self->conf_die_on_fail ? croak $@ : {}) if ! $conf;
35 0           my $hash = $self->conf_validation;
36 0 0 0       if ($hash && scalar keys %$hash) {
37 0           my $err_obj = $self->val_obj->validate($conf, $hash);
38 0 0         die $err_obj if $err_obj;
39             }
40 0           $conf;
41             }
42             }
43            
44 0     0 1   sub load_conf { 1 }
45              
46 0 0   0 1   sub base_dir_abs {$_[0]->{'base_dir_abs'} || ['./']}
47              
48             sub allow_morph {
49 0     0 1   my ( $self, $step ) = @_;
50 0           return $self->conf->{allow_morph}->{$step};
51             }
52              
53             #...but rather override the path_info_map hook for a particular step.
54             sub path_info_map {
55 0     0 1   my ($self) = @_;
56 0   0       my $step = $self->form->{ $self->step_key } || $self->conf->{default_step};
57 0   0       return $self->conf->{path_info_map}{$step} || do {
58             my $step = $self->form->{ $self->step_key } || $self->conf->{default_step};
59             return '' if $step eq $self->conf->{default_step};
60             [
61             [
62             qr{^/$step/(\d+)}, 'id'
63             ]
64             ];
65             }
66             }
67              
68             #Will be run natively for all subclasses
69 0 0   0 1   sub skip { shift->form->{'id'} ? 0 : 1 }
70              
71             #ADDING AUTHENTICATION TO THE ENTIRE APPLICATION
72             sub get_pass_by_user {
73 0     0 1   my $self = shift;
74 0           my $user = shift;
75 0           return $self->conf->{users}{$user};
76             }
77              
78             #ADDING AUTHENTICATION TO INDIVIDUAL STEPS
79             sub require_auth {
80 0     0 1   my ($self, $step) = @_;
81             #allow configuration first
82 0   0       return $self->conf->{require_auth}{$step} || 0;
83             }
84              
85             #get authentication arguments from configuration if there is such
86             sub auth_args {
87 0     0 1   my $self = shift;
88             {
89 0           $self->conf->{template_args},
  0            
90             $self->conf->{auth_args}
91             };
92             }
93              
94             sub hash_base {
95 0     0 1   my $self = shift;
96 0           my $hash = $self->SUPER::hash_base(@_);
97 0           $hash->{'app'} = $self;
98             #require Scalar::Util;
99 0           Scalar::Util::weaken($hash->{'app'});
100 0           return $hash;
101             }
102              
103              
104             sub post_navigate {
105 0     0 1   my $self = shift;
106             # show what happened
107 0 0         if (values %{$self->{'debug'}}) {
  0            
108 0 0         debug $self->dump_history if $self->conf->{debug}{dump_history};
109 0 0         debug $self->conf if $self->conf->{debug}{conf};
110 0 0         debug \%ENV if $self->conf->{debug}{ENV};
111 0 0         debug $self->cookies if $self->conf->{debug}{cookies};
112 0 0         debug $self->form if $self->conf->{debug}{form};
113 0 0         debug \%INC if $self->conf->{debug}{INChash};
114 0 0         debug \@INC if $self->conf->{debug}{INCarray};
115 0 0         debug $self->{_package} if $self->conf->{debug}{_package};
116 0 0         debug [sort keys %{$self->{_cache}}] if $self->conf->{debug}{_cache};
  0            
117             }
118             #or do other usefull things.
119             }
120              
121             sub pre_navigate {
122             #efectively logout
123 0     0 1   require CGI::Ex::Auth;
124 0 0         $_[0]->CGI::Ex::Auth::delete_cookie({'key'=>'cea_user'})
125             if $_[0]->form->{'logout'};
126 0           return 0;
127             }
128              
129             sub pre_step {
130 0     0 1   $_[0]->step_args;
131             #run other things here
132 0           return 0;
133             }
134              
135             # hook/method - returns parsed arguments from C<$self->form->{step_info}>
136             #for the curent step
137             # initially called in pre_step
138             sub step_args {
139 0   0 0 1   return $_[0]->form->{step_args} || do {
140             if($_[0]->form->{step_info}){
141             my @step_args = split /\//,$_[0]->form->{step_info};
142             for( my $i = 0 ; $i < @step_args; $i = $i+2 ){
143             $_[0]->form->{step_args}{$step_args[$i]} = $step_args[$i+1] || '';
144             }
145             }
146             return $_[0]->form->{step_args} || {};
147             }
148             }
149              
150             #Returns the cache object.
151             sub cache {
152 0     0 1   my $self = shift;
153 0   0       return $self->{cache} || do {
154             require CGI::Ex::Recipes::Cache;
155             $self->{cache} = CGI::Ex::Recipes::Cache->new({ cache_hash =>{}, dbh => $self->dbh });
156             };
157             }
158              
159              
160             #========================== UTIL ==============================
161             #Utility funcions - may be moved to an Util class if needed
162             sub strftmime {
163 0     0 1   my $self = shift;
164 0           require POSIX;
165 0   0       POSIX::strftime(shift,localtime( shift||time ) );
166             }
167 0     0 1   sub now {time};
168             1; # End of CGI::Ex::Recipes
169              
170              
171             __END__