File Coverage

blib/lib/Bot/Backbone/Dispatcher/PredicateIterator.pm
Criterion Covered Total %
statement 17 17 100.0
branch 2 2 100.0
condition n/a
subroutine 6 6 100.0
pod 3 3 100.0
total 28 28 100.0


line stmt bran cond sub pod time code
1             package Bot::Backbone::Dispatcher::PredicateIterator;
2             $Bot::Backbone::Dispatcher::PredicateIterator::VERSION = '0.161950';
3 4     4   32 use v5.10;
  4         9  
4 4     4   15 use Moose;
  4         5  
  4         32  
5              
6 4     4   16224 use Bot::Backbone::Types qw( PredicateList );
  4         6  
  4         28  
7              
8             # ABSTRACT: Iterator over the predicates in a dispatcher
9              
10              
11             has dispatcher => (
12             is => 'ro',
13             isa => 'Bot::Backbone::Dispatcher',
14             required => 1,
15             );
16              
17             has predicate_list => (
18             is => 'rw',
19             isa => PredicateList,
20             required => 1,
21             default => sub { [] },
22             traits => [ 'Array' ],
23             handles => {
24             have_more_predicates => 'count',
25             next_from_predicate_list => 'shift',
26             add_predicates => 'push',
27             },
28             );
29              
30              
31             sub BUILD {
32 1     1 1 1 my $self = shift;
33 1         4 $self->reset;
34             }
35              
36              
37             sub next_predicate {
38 5     5 1 6 my $self = shift;
39              
40 5 100       180 return unless $self->have_more_predicates;
41              
42 4         144 my $predicate = $self->next_from_predicate_list;
43 4         17 $self->add_predicates($predicate->more_predicates);
44              
45 4         11 return $predicate;
46             }
47              
48              
49             sub reset {
50 1     1 1 1 my $self = shift;
51              
52 1         30 $self->predicate_list([
53             $self->dispatcher->list_predicates,
54             $self->dispatcher->list_also_predicates,
55             ]);
56             }
57              
58             __PACKAGE__->meta->make_immutable;
59              
60             __END__
61              
62             =pod
63              
64             =encoding UTF-8
65              
66             =head1 NAME
67              
68             Bot::Backbone::Dispatcher::PredicateIterator - Iterator over the predicates in a dispatcher
69              
70             =head1 VERSION
71              
72             version 0.161950
73              
74             =head1 SYNOPSIS
75              
76             my $iterator = $dispatcher->predicate_iterator;
77             while (my $predicate = $iterator->next_predicate) {
78             # do something...
79             }
80              
81             =head1 DESCRIPTION
82              
83             This is a helper for iterating over predicates in a L<Bot::Backbone::Dispatcher>.
84              
85             =head1 ATTRIBUTES
86              
87             =head2 dispatcher
88              
89             This is the dispatcher this iterator iterates over.
90              
91             =head1 METHODS
92              
93             =head2 BUILD
94              
95             Resets the iterator to the start at construction.
96              
97             =head2 next_predicate
98              
99             Returns the next L<Bot::Backbone::Dispatcher::Predicate> or C<undef> if all predicates have been iterated through.
100              
101             =head2 reset
102              
103             Starts over by retriving the list of predicates that belong to the associated L<Bot::Backbone::Dispatcher>.
104              
105             =head1 AUTHOR
106              
107             Andrew Sterling Hanenkamp <hanenkamp@cpan.org>
108              
109             =head1 COPYRIGHT AND LICENSE
110              
111             This software is copyright (c) 2016 by Qubling Software LLC.
112              
113             This is free software; you can redistribute it and/or modify it under
114             the same terms as the Perl 5 programming language system itself.
115              
116             =cut