--- trunk/lib/Frey/Collection.pm 2008/07/13 16:17:34 111 +++ trunk/lib/Frey/Collection.pm 2008/07/16 14:17:46 143 @@ -3,9 +3,22 @@ use Data::Dump qw/dump/; use Carp; -use Data::Page; -sub total_rows { +=head1 NAME + +Frey::Collection - role for Fey::ORM to get all results + +=head1 METHODS + +=cut + +=head2 total_entries + + my $rows = $o->total_entries; + +=cut + +sub total_entries { my $self = shift; my $table = $self->_table; my $count = Fey::Literal::Function->new( 'COUNT', $table->column('id') ); # FIXME id? @@ -26,38 +39,45 @@ return $self->SchemaClass()->SQLFactoryClass()->new_select(); } -sub collection { - my ( $self, $args ) = @_; +=head2 collection - croak "expect HASH not ",dump( $args ) unless ref($args) eq 'HASH'; + my $pager = Frey::Pager->new( per_page => 20, page => 1 ); + my $Fey_Object_Iterator = $o->collection($pager); - warn "## collection args = ",dump( $args ); +=cut - my $pager = Data::Page->new; - $pager->total_entries( $self->total_rows ); - $pager->entries_per_page( $args->{per_page} || 20 ); - $pager->current_page( $args->{page} || 1 ); +sub collection { + my ( $self, $pager ) = @_; - my $users_t = $self->_table; + my $table = $self->_table; - my $select = $self->_sql->select( $users_t ) - ->from( $users_t ) + my $select = $self->_sql->select( $table ) + ->from( $table ) # ->where( $message_t->column('message_date'), '>=', # DateTime->today()->subtract( days => 7 )->strftime( '%Y-%m-%d' ) ) - ->limit( $pager->entries_per_page, $pager->skipped ) - ; + ; + + if ( blessed $pager ) { + if ( ref($pager) eq 'Frey::Pager' ) { + warn "FIXING wrong pager object to collection!"; + $pager = $pager->pager; + } + warn "## using pager"; + $pager->total_entries( $self->total_entries ); + $select->limit( $pager->entries_per_page, $pager->skipped ); + } my $dbh = $self->_dbh($select); my $sth = $dbh->prepare( $select->sql($dbh) ); my $i = Fey::Object::Iterator->new( - classes => [ $self->meta()->ClassForTable( $users_t ) ], + classes => [ $self->meta()->ClassForTable( $table ) ], handle => $sth, bind_params => [ $select->bind_params() ], ); - return ( $i, $pager ) if wantarray; + confess "LEGACY: this calling convention is no longer supported" if wantarray; return $i; }