[Jifty-commit] r3472 - in Jifty-DBI/trunk: . lib/Jifty/DBI
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Wed Jun 13 23:35:29 EDT 2007
Author: sartak
Date: Wed Jun 13 23:35:28 2007
New Revision: 3472
Modified:
Jifty-DBI/trunk/ (props changed)
Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
Jifty-DBI/trunk/t/01searches.t
Log:
r20651 at caladan: sartak | 2007-06-13 23:34:17 -0400
Add a peek to Jifty::DBI::Collection which returns the next item but doesn't
update any internal state.
Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm (original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm Wed Jun 13 23:35:28 2007
@@ -662,13 +662,37 @@
$self->_do_search() if $self->{'must_redo_search'};
+ my $item = $self->peek;
+
if ( $self->{'itemscount'} < $self->_record_count )
- { #return the next item
- my $item = ( $self->{'items'}[ $self->{'itemscount'} ] );
+ {
$self->{'itemscount'}++;
- return ($item);
} else { #we've gone through the whole list. reset the count.
$self->goto_first_item();
+ }
+
+ return ($item);
+}
+
+=head2 peek
+
+Exactly the same as next, only it doesn't move the iterator.
+
+=cut
+
+sub peek {
+ my $self = shift;
+ my @row;
+
+ return (undef) unless ( $self->_is_limited );
+
+ $self->_do_search() if $self->{'must_redo_search'};
+
+ if ( $self->{'itemscount'} < $self->_record_count )
+ { #return the next item
+ my $item = ( $self->{'items'}[ $self->{'itemscount'} ] );
+ return ($item);
+ } else { #no more items!
return (undef);
}
}
Modified: Jifty-DBI/trunk/t/01searches.t
==============================================================================
--- Jifty-DBI/trunk/t/01searches.t (original)
+++ Jifty-DBI/trunk/t/01searches.t Wed Jun 13 23:35:28 2007
@@ -8,7 +8,7 @@
BEGIN { require "t/utils.pl" }
our (@available_drivers);
-use constant TESTS_PER_DRIVER => 78;
+use constant TESTS_PER_DRIVER => 82;
my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
plan tests => $total;
@@ -45,6 +45,7 @@
is( $users_obj->last, undef, 'last returns undef on not limited obj' );
is( $users_obj->is_last, undef, 'is_last returns undef on not limited obj after last' );
$users_obj->goto_first_item;
+ is( $users_obj->peek, undef, 'peek returns undef on not limited obj' );
is( $users_obj->next, undef, 'next returns undef on not limited obj' );
is( $users_obj->is_last, undef, 'is_last returns undef on not limited obj after next' );
# XXX TODO FIXME: may be this methods should be implemented
@@ -60,6 +61,7 @@
isa_ok( $users_obj->first, 'Jifty::DBI::Record', 'first returns record object' );
isa_ok( $users_obj->last, 'Jifty::DBI::Record', 'last returns record object' );
$users_obj->goto_first_item;
+ isa_ok( $users_obj->peek, 'Jifty::DBI::Record', 'peek returns record object' );
isa_ok( $users_obj->next, 'Jifty::DBI::Record', 'next returns record object' );
$items_ref = $users_obj->items_array_ref;
isa_ok( $items_ref, 'ARRAY', 'items_array_ref always returns array reference' );
@@ -91,9 +93,12 @@
is( $last_rec, $first_rec, 'last returns same object as first' );
is( $users_obj->is_last, 1, 'is_last always returns 1 after last call');
$users_obj->goto_first_item;
+ my $peek_rec = $users_obj->peek;
my $next_rec = $users_obj->next;
+ is( $next_rec, $peek_rec, 'peek returns same object as next' );
is( $next_rec, $first_rec, 'next returns same object as first' );
is( $users_obj->is_last, 1, 'is_last returns 1 after fetch first record with next method');
+ is( $users_obj->peek, undef, 'only one record in the collection' );
is( $users_obj->next, undef, 'only one record in the collection' );
TODO: {
local $TODO = 'require discussion';
More information about the Jifty-commit
mailing list