Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / TAP / Parser / IteratorFactory.pm
CommitLineData
3fea05b9 1package TAP::Parser::IteratorFactory;
2
3use strict;
4use vars qw($VERSION @ISA);
5
6use TAP::Object ();
7use TAP::Parser::Iterator::Array ();
8use TAP::Parser::Iterator::Stream ();
9use TAP::Parser::Iterator::Process ();
10
11@ISA = qw(TAP::Object);
12
13=head1 NAME
14
15TAP::Parser::IteratorFactory - Internal TAP::Parser Iterator
16
17=head1 VERSION
18
19Version 3.17
20
21=cut
22
23$VERSION = '3.17';
24
25=head1 SYNOPSIS
26
27 use TAP::Parser::IteratorFactory;
28 my $factory = TAP::Parser::IteratorFactory->new;
29 my $iter = $factory->make_iterator(\*TEST);
30 my $iter = $factory->make_iterator(\@array);
31 my $iter = $factory->make_iterator(\%hash);
32
33 my $line = $iter->next;
34
35=head1 DESCRIPTION
36
37This is a factory class for simple iterator wrappers for arrays, filehandles,
38and hashes. Unless you're subclassing, you probably won't need to use this
39module directly.
40
41=head1 METHODS
42
43=head2 Class Methods
44
45=head3 C<new>
46
47Creates a new factory class.
48I<Note:> You currently don't need to instantiate a factory in order to use it.
49
50=head3 C<make_iterator>
51
52Create an iterator. The type of iterator created depends on the arguments to
53the constructor:
54
55 my $iter = TAP::Parser::Iterator->make_iterator( $filehandle );
56
57Creates a I<stream> iterator (see L</make_stream_iterator>).
58
59 my $iter = TAP::Parser::Iterator->make_iterator( $array_reference );
60
61Creates an I<array> iterator (see L</make_array_iterator>).
62
63 my $iter = TAP::Parser::Iterator->make_iterator( $hash_reference );
64
65Creates a I<process> iterator (see L</make_process_iterator>).
66
67=cut
68
69sub make_iterator {
70 my ( $proto, $thing ) = @_;
71
72 my $ref = ref $thing;
73 if ( $ref eq 'GLOB' || $ref eq 'IO::Handle' ) {
74 return $proto->make_stream_iterator($thing);
75 }
76 elsif ( $ref eq 'ARRAY' ) {
77 return $proto->make_array_iterator($thing);
78 }
79 elsif ( $ref eq 'HASH' ) {
80 return $proto->make_process_iterator($thing);
81 }
82 else {
83 die "Can't iterate with a $ref";
84 }
85}
86
87=head3 C<make_stream_iterator>
88
89Make a new stream iterator and return it. Passes through any arguments given.
90Defaults to a L<TAP::Parser::Iterator::Stream>.
91
92=head3 C<make_array_iterator>
93
94Make a new array iterator and return it. Passes through any arguments given.
95Defaults to a L<TAP::Parser::Iterator::Array>.
96
97=head3 C<make_process_iterator>
98
99Make a new process iterator and return it. Passes through any arguments given.
100Defaults to a L<TAP::Parser::Iterator::Process>.
101
102=cut
103
104sub make_stream_iterator {
105 my $proto = shift;
106 TAP::Parser::Iterator::Stream->new(@_);
107}
108
109sub make_array_iterator {
110 my $proto = shift;
111 TAP::Parser::Iterator::Array->new(@_);
112}
113
114sub make_process_iterator {
115 my $proto = shift;
116 TAP::Parser::Iterator::Process->new(@_);
117}
118
1191;
120
121=head1 SUBCLASSING
122
123Please see L<TAP::Parser/SUBCLASSING> for a subclassing overview.
124
125There are a few things to bear in mind when creating your own
126C<ResultFactory>:
127
128=over 4
129
130=item 1
131
132The factory itself is never instantiated (this I<may> change in the future).
133This means that C<_initialize> is never called.
134
135=back
136
137=head2 Example
138
139 package MyIteratorFactory;
140
141 use strict;
142 use vars '@ISA';
143
144 use MyStreamIterator;
145 use TAP::Parser::IteratorFactory;
146
147 @ISA = qw( TAP::Parser::IteratorFactory );
148
149 # override stream iterator
150 sub make_stream_iterator {
151 my $proto = shift;
152 MyStreamIterator->new(@_);
153 }
154
155 1;
156
157=head1 ATTRIBUTION
158
159Originally ripped off from L<Test::Harness>.
160
161=head1 SEE ALSO
162
163L<TAP::Object>,
164L<TAP::Parser>,
165L<TAP::Parser::Iterator>,
166L<TAP::Parser::Iterator::Array>,
167L<TAP::Parser::Iterator::Stream>,
168L<TAP::Parser::Iterator::Process>,
169
170=cut
171