File Coverage

blib/lib/Pipeline/Segment.pm
Criterion Covered Total %
statement 44 45 97.7
branch 7 8 87.5
condition n/a
subroutine 13 13 100.0
pod 6 7 85.7
total 70 73 95.8


line stmt bran cond sub pod time code
1             package Pipeline::Segment;
2              
3 13     13   3637979 use strict;
  13         29  
  13         471  
4 13     13   94 use warnings::register;
  13         22  
  13         1606  
5              
6 13     13   6231 use Pipeline::Base;
  13         42  
  13         474  
7 13     13   81 use Scalar::Util qw( weaken );
  13         25  
  13         2259  
8 13     13   7410 use Pipeline::Error::Abstract;
  13         32  
  13         83  
9              
10 13     13   549 use base qw( Pipeline::Base );
  13         24  
  13         6770  
11              
12             our $VERSION = "3.12";
13              
14             sub init {
15 46     46 1 84 my $self = shift;
16 46 50       183 if ($self->SUPER::init()) {
17 46         189 $self->parent( '' );
18 46         153 return 1;
19             } else {
20 0         0 return undef;
21             }
22             }
23              
24             sub dispatch {
25 1     1 1 55 throw Pipeline::Error::Abstract;
26             }
27              
28 22     22 1 235 sub dispatch_method { undef }
29              
30             sub prepare_dispatch {
31 23     23 0 42 my $self = shift;
32 23         37 my $pipe = shift;
33 23         70 $self->parent( $pipe );
34 23         53 $self->store( $pipe->store );
35             }
36              
37             sub cleanup_dispatch {
38 23     23 1 34 my $self = shift;
39 23         53 $self->{ parent } = undef;
40 23         53 $self->{ store } = undef;
41             }
42              
43             sub parent {
44 141     141 1 529 my $self = shift;
45 141         180 my $seg = shift;
46 141 100       262 if (defined( $seg )) {
47 71         272 $self->{ parent } = $seg;
48 71 100       234 weaken( $self->{ parent } ) if ref( $seg );
49 71         530 return $self;
50             } else {
51 70         364 return $self->{ parent };
52             }
53             }
54              
55             sub store {
56 150     150 1 268 my $self = shift;
57 150         163 my $store = shift;
58 150 100       260 if (defined( $store )) {
59 51         492 $self->{ store } = $store;
60 51         145 return $self;
61             } else {
62 99         589 return $self->{ store };
63             }
64             }
65              
66             1;
67              
68             =head1 NAME
69              
70             Pipeline::Segment - basic class for a segment
71              
72             =head1 SYNOPSIS
73              
74             use Pipeline::Segment;
75             my $ps = Pipeline::Segment->new();
76             $ps->dispatch();
77              
78             =head1 DESCRIPTION
79              
80             C is designed as a part of the C system. The
81             C class is designed to be subclassed as a part of the Pipeline
82             system. The primary method that needs to be overloaded is the C method,
83             which the Pipeline class uses to enter each individual segment that it contains.
84              
85             =head1 METHODS
86              
87             The C class inherits from C and therefore
88             also has any additional methods that its superclass may have.
89              
90             =over 4
91              
92             =item init()
93              
94             The C method is called at construction time. Any arguments passed to the
95             C method are passed to it.
96              
97             =item dispatch()
98              
99             The C method causes the segment to perform its action.
100              
101             =item dispatch_method()
102              
103             The C gets and sets the method that gets called on dispatch, by
104             default this is the C method.
105              
106             =item cleanup_dispatch()
107              
108             The C method does post-processing on the segment to ensure
109             no nasty circular references are lying around, as well as disconnecting
110             various objects that are only useful during a dispatch.
111              
112             =item store()
113              
114             The C method gets the current store.
115              
116             =item parent()
117              
118             The C method returns the pipeline that the segment is current operating from.
119             It is set at dispatch time by the calling pipeline.
120              
121             =back
122              
123             =head1 SEE ALSO
124              
125             C, C
126              
127             =head1 AUTHOR
128              
129             James A. Duncan
130              
131             =head1 COPYRIGHT
132              
133             Copyright 2003 Fotango Ltd. All Rights Reserved.
134              
135             This software is released under the same terms as Perl itself.
136             =cut
137              
138