File Coverage

lib/DataFlow/Proc/SimpleFileInput.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package DataFlow::Proc::SimpleFileInput;
2              
3 1     1   2127 use strict;
  1         3  
  1         37  
4 1     1   6 use warnings;
  1         2  
  1         49  
5              
6             # ABSTRACT: A processor that reads that from a file
7              
8             our $VERSION = '1.121830'; # VERSION
9              
10 1     1   562 use Moose;
  0            
  0            
11             extends 'DataFlow::Proc';
12             with 'DataFlow::Role::File';
13              
14             use autodie;
15             use namespace::autoclean;
16             use Queue::Base;
17              
18             has '_slurpy_read' => (
19             'is' => 'ro',
20             'isa' => 'CodeRef',
21             'lazy' => 1,
22             'default' => sub {
23             my $self = shift;
24             return sub {
25             my $filename = $_;
26             open( my $fh, '<', $filename );
27             my @slurp = <$fh>;
28             close $fh;
29             chomp @slurp unless $self->nochomp;
30              
31             return [@slurp];
32             };
33             },
34             );
35              
36             has '_fileq' => (
37             'is' => 'ro',
38             'isa' => 'Queue::Base',
39             'lazy' => 1,
40             'default' => sub { return Queue::Base->new },
41             );
42              
43             has '+allows_undef_input' => (
44             'default' => sub {
45             my $self = shift;
46             return $self->do_slurp ? 0 : 1;
47             }
48             );
49              
50             sub _build_p {
51             my $self = shift;
52              
53             return $self->_slurpy_read if $self->do_slurp;
54              
55             return sub {
56             my $filename = $_;
57              
58             # if filename is provided, add it to the queue
59             $self->_fileq->add($filename) if defined $filename;
60              
61             # if there is no open file
62             if ( !$self->has_file ) {
63             return if $self->_fileq->empty;
64             open( my $fh, '<', $self->_fileq->remove ); ## no critic
65             $self->file( [ $fh, '<' ] );
66             }
67              
68             # read a line
69             my $file = $self->file;
70             my $line = <$file>;
71             chomp $line unless $self->nochomp;
72             $self->_check_eof;
73             return $line;
74             };
75             }
76              
77             __PACKAGE__->meta->make_immutable;
78              
79             1;
80              
81              
82             __END__
83             =pod
84              
85             =encoding utf-8
86              
87             =head1 NAME
88              
89             DataFlow::Proc::SimpleFileInput - A processor that reads that from a file
90              
91             =head1 VERSION
92              
93             version 1.121830
94              
95             =head1 SEE ALSO
96              
97             Please see those modules/websites for more information related to this module.
98              
99             =over 4
100              
101             =item *
102              
103             L<DataFlow|DataFlow>
104              
105             =back
106              
107             =head1 AUTHOR
108              
109             Alexei Znamensky <russoz@cpan.org>
110              
111             =head1 COPYRIGHT AND LICENSE
112              
113             This software is copyright (c) 2011 by Alexei Znamensky.
114              
115             This is free software; you can redistribute it and/or modify it under
116             the same terms as the Perl 5 programming language system itself.
117              
118             =head1 BUGS AND LIMITATIONS
119              
120             You can make new bug reports, and view existing ones, through the
121             web interface at L<http://rt.cpan.org>.
122              
123             =head1 DISCLAIMER OF WARRANTY
124              
125             BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
126             FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
127             WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
128             PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND,
129             EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
130             IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
131             PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
132             SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME
133             THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.
134              
135             IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
136             WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
137             REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
138             TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
139             CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
140             SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
141             RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
142             FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
143             SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
144             DAMAGES.
145              
146             =cut
147