File Coverage

blib/lib/WebDAO/Session.pm
Criterion Covered Total %
statement 41 72 56.9
branch 0 10 0.0
condition 2 5 40.0
subroutine 10 17 58.8
pod 2 9 22.2
total 55 113 48.6


line stmt bran cond sub pod time code
1             package WebDAO::Session;
2             #$Id$
3              
4             =head1 NAME
5              
6             WebDAO::Session - Session interface to protocol specific function
7              
8             =head1 DESCRIPTION
9              
10             Session interface to device(HTTP protocol) specific function
11              
12             =cut
13              
14              
15             our $VERSION = '0.02';
16 4     4   16 use WebDAO;
  4         7  
  4         248  
17 4     4   1894 use WebDAO::CV;
  4         11  
  4         174  
18 4     4   2397 use WebDAO::Response;
  4         14  
  4         254  
19 4     4   3680 use Encode qw(encode decode is_utf8);
  4         49805  
  4         1816  
20 4     4   27 use strict;
  4         8  
  4         545  
21 4     4   257 use warnings;
  4         45  
  4         5696  
22              
23             mk_attr(
24             Cgi_obj => undef, # request object
25             Cgi_env => undef,
26             U_id=> undef,
27             Params => undef,
28             _response_obj=> undef, #deprecated ?
29             _is_absolute_url =>undef #deprecated ?
30             );
31              
32             sub new {
33 4     4 0 1197 my $class = shift;
34 4         8 my $self = {};
35 4         10 my $stat;
36 4         11 bless( $self, $class );
37 4         24 $self->_init(@_);
38 4         31 return $self;
39             }
40              
41              
42             sub _init {
43             #Parametrs is realm
44 4     4   8 my $self = shift;
45 4         10 my %args = @_;
46 4         166 U_id $self undef;
47             Cgi_obj $self $args{cv}
48 4   33     49 || new WebDAO::CV::; #create default controller
49 4         88 my $cv = $self->Cgi_obj; # Store Cgi_obj in local var
50             #create response object
51 4         43 $self->_response_obj(
52             new WebDAO::Response::
53             cv => $cv
54             );
55              
56 4         45 Cgi_env $self (
57             {
58             url => $cv->url( -base => 1 ), #http://eng.zag
59             path_info => $cv->url( -absolute => 1, -path_info => 1 ),
60             path_info_elments => [],
61             file => "",
62             base_url => $cv->url( -base => 1 ), #http://base.com
63             accept => $cv->accept,
64             }
65             );
66              
67 4         29 Params $self ( $self->_get_params() );
68 4         88 $self->Cgi_env->{path_info_elments} = $self->call_path($self->Cgi_env->{path_info});
69             #set default header
70 4         40 $cv->set_header("Content-Type" => 'text/html; charset=utf-8');
71             }
72              
73              
74             #Get cgi params;
75             sub _get_params {
76 7     7   15 my $self = shift;
77 7         174 my $_cgi = $self->Cgi_obj();
78 7         14 my %params;
79 7         34 foreach my $i ( $_cgi->param() ) {
80 0         0 my @all = $_cgi->param($i);
81 0         0 foreach my $value (@all) {
82 0 0       0 next if ref $value;
83 0 0       0 $value = decode( 'utf8', $value ) unless is_utf8($value);
84             }
85 0 0       0 $params{$i} = scalar @all > 1 ? \@all : $all[0];
86             }
87 7         180 return \%params;
88             }
89              
90              
91             #Can be overlap if you choose another
92             #alghoritm generate unique session ID (i.e cookie,http_auth)
93             sub get_id {
94 0     0 0 0 my $self = shift;
95 0         0 my $coo = U_id $self;
96 0 0       0 return $coo if ($coo);
97 0         0 return rand(100);
98             }
99              
100             =head2 call_path [$url]
101              
102             Return ref to array of element from $url or from CGI ENV
103              
104             =cut
105              
106             sub call_path {
107 4     4 1 10 my $self = shift;
108 4   50     106 my $url = shift || return $self->Cgi_env->{path_info_elments};
109 0           $url =~ s%^/%%;
110 0           $url =~ s%/$%%;
111 0           return [ grep { defined $_ } split( /\//, $url ) ];
  0            
112              
113             }
114              
115             =head2 set_absolute_url 1|0
116              
117             Set flag for build absolute pathes. Return previus value.
118              
119             =cut
120              
121             sub set_absolute_url {
122 0     0 1   my $self = shift;
123 0           my $value = shift;
124 0           my $prev_value = $self->_is_absolute_url;
125 0 0         $self->_is_absolute_url($value) if defined $value;
126 0           return $prev_value;
127             }
128              
129             sub get_request {
130 0     0 0   my $self = shift;
131 0           return $self->Cgi_obj;
132             }
133              
134             #deprecated ??? use WebDAO::Engine::response
135             sub response_obj {
136 0     0 0   my $self = shift;
137 0           return $self->_response_obj;
138             }
139              
140             sub print {
141 0     0 0   my $self = shift;
142 0           $self->Cgi_obj->print(@_);
143             }
144              
145             sub ExecEngine {
146 0     0 0   my ( $self, $eng_ref,$path ) = @_;
147 0           $eng_ref->_execute($self, $path);
148 0           $eng_ref->__send_event__("_sess_ended"); # TODO: deprecated : delete this line
149 0           $eng_ref->_commit();
150 0           $eng_ref->_destroy;
151             }
152              
153             sub destroy {
154 0     0 0   my $self = shift;
155 0           $self->_response_obj(undef);
156             }
157             1;
158             __DATA__