Handel::Iterator::Results - Iterator class used for collection looping storage iterators


Handel documentation Contained in the Handel distribution.

Index


Code Index:

NAME

Top

Handel::Iterator::Results - Iterator class used for collection looping storage iterators

SYNOPSIS

Top

    my $iterator = $storage->search;

    my $results = Handel::Iterator::Results->new({
        data         => $iterator,
        result_class => 'MyCart'
    });

    while (my $cart = $results->next) {
        print $cart->id;
    };

DESCRIPTION

Top

Handel::Iterator::Results is a used to iterate through result iterators returned by storage search/search_items operations. The only different between this, and Handel::Iterator::DBIC and Handel::Iterator::List is that it inflates results into the interface classes rather than into storage results.

CONSTRUCTOR

Top

new

Arguments: \%options

Creates a new iterator object. The following options are available:

    my $iterator = $storage->search;

    my $results = Handel::Iterator::Results->new({
        data         => $iterator,
        result_class => 'MyCart'
    });

    my $cart = $results->first;
    print ref $cart; # MyCart

data

The data to be iterated through. This should be an iterator returns by storage.

result_class

The name of the class that each result should be inflated into.

METHODS

Top

all

Returns all results from current iterator.

    foreach my $result ($iterator->all) {
        print $result->method;
    };

count

Returns the number of results in the current iterator.

    my $count = $iterator->count;

create_result

Arguments: $result

Returns a new result class object based on the specified result objects.

This method is used by methods like first and next to to create result class objects. There is probably no good reason to use this method directly.

first

Returns the first result or undef if there are no results.

    my $first = $iterator->first;

last

Returns the last result or undef if there are no results.

    my $last = $iterator->last;

next

Returns the next result or undef if there are no results.

    while (my $result = $iterator->next) {
        print $result->method;
    };

reset

Resets the current result position back to the first result.

    while (my $result = $iterator->next) {
        print $result->method;
    };

    $iterator->reset;

    while (my $result = $iterator->next) {
        print $result->method;
    };

SEE ALSO

Top

Handel::Iterator::List, Handel::Iterator::DBIC

AUTHOR

Top

    Christopher H. Laco
    CPAN ID: CLACO
    claco@chrislaco.com
    http://today.icantfocus.com/blog/



Handel documentation Contained in the Handel distribution.

# $Id$
## no critic (ProhibitAmbiguousNames)
package Handel::Iterator::Results;
use strict;
use warnings;
use overload
        '0+'     => \&count,
        'bool'   => \&count,
        '=='     => \&count,
        fallback => 1;

BEGIN {
    use base qw/Handel::Iterator/;
    use Handel::L10N qw/translate/;
    use Scalar::Util qw/blessed/;
};

sub new {
    my ($class, $options) = @_;

    throw Handel::Exception::Argument(
        -details => translate('PARAM1_NOT_HASHREF')
    ) unless ref $options eq 'HASH'; ## no critic

    throw Handel::Exception::Argument(
        -details => translate('NO_ITERATOR_DATA')
    ) unless defined $options->{'data'}; ## no critic

    my $data = $options->{'data'};
    throw Handel::Exception::Argument(
        -details => translate('ITERATOR_DATA_NOT_RESULTS_ITERATOR')
    ) unless blessed($data) && $data->isa('Handel::Iterator'); ## no critic

    throw Handel::Exception::Argument(
        -details => translate('NO_RESULT_CLASS')
    ) unless $options->{'result_class'}; ## no critic

    return bless $options, $class;
};

sub all {
    my $self = shift;

    return map {$self->create_result($_)} $self->data->all;
};

sub count {
    return shift->data->count;
};

sub first {
    my $self = shift;
    my $result = $self->data->first;

    return $result ? $self->create_result($result) : undef;
};

sub last {
    my $self = shift;
    my $result = $self->data->last;

    return $result ? $self->create_result($result) : undef;
};

sub next {
    my $self = shift;
    my $result = $self->data->next;

    return $result ? $self->create_result($result) : undef;
};

sub reset {
    return shift->data->reset;
};

sub create_result {
    my ($self, $result) = @_;

    return $self->result_class->create_instance($result);
};

1;
__END__