Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Data / Stream / Bulk / DoneFlag.pm
1 #!/usr/bin/perl
2
3 package Data::Stream::Bulk::DoneFlag;
4 use Moose::Role;
5
6 use namespace::clean -except => 'meta';
7
8 with qw(Data::Stream::Bulk);
9
10 requires "get_more";
11
12 sub is_done {}
13 has done => (
14         isa => "Bool",
15         init_arg => undef,
16         reader => "is_done",
17         writer => "_done",
18 );
19
20 sub finished {}
21
22 sub _set_done {
23         my $self = shift;
24         $self->_done(1);
25         $self->finished;
26 }
27
28 sub next {
29         my $self = shift;
30
31         unless ( $self->is_done ) {
32                 if ( my $more = $self->get_more ) {
33                         return $more;
34                 } else {
35                         $self->_set_done;
36                         return;
37                 }
38         } else {
39                 return;
40         }
41 }
42
43 __PACKAGE__
44
45 __END__
46
47 =pod
48
49 =head1 NAME
50
51 Data::Stream::Bulk::DoneFlag - Implement the C<is_done> method in terms of a
52 flag
53
54 =head1 SYNOPSIS
55
56         package Data::Stream::Bulk::Blah;
57         use Moose;
58
59         with qw(Data::Stream::Bulk::DoneFlag);
60
61         sub get_more {
62                 if ( my @more = more() ) {
63                         return \@more;
64                 } else {
65                         return;
66                 }
67         }
68
69 =head1 DESCRIPTION
70
71 This role implements the C<Data::Stream::Bulk> core API in terms of one method
72 (C<get_more>).
73
74 As a convenience it calls C<finished> when the stream is exhausted, so that
75 cleanup may be done.
76
77 This is used by classes like L<Data::Stream::Bulk::DBI>,
78 L<Data::Stream::Bulk::Callback>.
79
80 =head1 METHODS
81
82 =over 4
83
84 =item is_done
85
86 Returns the state of the iterator.
87
88 =item next
89
90 As long as the iterator is not yet done, calls C<get_more>.
91
92 If C<get_more> returned a false value instead of an array reference then
93 C<done> is set, C<finished> is called, and this C<next> does nothing on
94 subsequent calls.
95
96 =item finished
97
98 A noop by default. Can be overridden if so desired.
99
100 =back
101
102 =head1 REQUIRED_METHODS
103
104 =over 4
105
106 =item get_more
107
108 Returns the next block of data as an array ref, or a false value if no items
109 are left.
110
111 =back
112
113 =cut