File Coverage

blib/lib/Serengeti.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package Serengeti;
2              
3 5     5   149382 use strict;
  5         13  
  5         171  
4 5     5   25 use warnings;
  5         9  
  5         147  
5              
6 5     5   26 use Carp qw(croak);
  5         20  
  5         373  
7 5     5   26 use File::Spec;
  5         11  
  5         119  
8              
9 5     5   2864 use Serengeti::Context;
  0            
  0            
10             use Serengeti::NotificationCenter;
11             use Serengeti::Notifications;
12             use Serengeti::Session;
13              
14             our $VERSION = "0.00";
15              
16             our $DefaultBackend = "Serengeti::Backend::Native";
17              
18             use accessors::ro qw(context);
19              
20             sub new {
21             my ($pkg, $args) = @_;
22              
23             # This is what performs the actual requests and data extracion
24             my $backend = $args->{backend} || $DefaultBackend;
25             unless ($backend =~ /^Serengeti::Backend::/) {
26             $backend = "Serengeti::Backend::${backend}";
27             }
28            
29             my $context = Serengeti::Context->new({
30             backend => $backend
31             });
32            
33             my $session_dir = $args->{session_dir} || File::Spec->tmpdir;
34             if (-e $session_dir) {
35             # Check that it's valid and writeable
36             }
37             else {
38             mkpath($session_dir);
39             }
40            
41             my $self = bless {
42             context => $context,
43             session_dir => $session_dir,
44             }, $pkg;
45            
46             return $self;
47             }
48              
49             sub load {
50             my ($self, $file) = @_;
51             $self->context->load($file);
52             }
53              
54             sub eval {
55             my ($self, $source) = @_;
56            
57             my (undef, $filename, $lineno) = caller;
58             $self->context->eval($source, $filename, $lineno);
59             }
60              
61             sub perform {
62             my ($self, $action, $args) = @_;
63            
64             unless ($self->context->has_action($action)) {
65             croak "Don't know how to perform '$action'";
66             }
67              
68             return $self->context->invoke_action($action, $args);
69             }
70              
71             sub new_session {
72             my ($self, $name) = @_;
73            
74             my $session = Serengeti::Session->new({
75             name => $name,
76             })
77             }
78              
79             sub session {
80             my $self = shift;
81             return $self->{session} if $self->{session};
82            
83             $self->{session} = Serengeti::Session->new();
84            
85             # Notify context we have a new session
86             Serengeti::NotificationCenter->post_notification(
87             $self,
88             NEW_SESSION_NOTIFICATION,
89             $self->session,
90             $self->context,
91             );
92            
93             return $self->session;
94             }
95              
96             sub register_data_request {
97             my ($self, $name, $callback) = @_;
98             $self->context->register_callback($name => $callback);
99             }
100              
101             1;
102             __END__