package Class::DBI::Sweet::Topping; use strict; use Class::DBI::Sweet; # Alias *Class::DBI::Sweet::find = \&Class::DBI::Sweet::search; sub Class::DBI::Sweet::AUTOLOAD { my $self = shift; our $AUTOLOAD = $Class::DBI::Sweet::AUTOLOAD; my $super_meth = $AUTOLOAD; $super_meth =~ s/(?:.*::)?/SUPER::/; $AUTOLOAD =~ m/(search|find|page|count|(?:previous|next)_by)_(.*)/ || return $self->$super_meth(@_); my $method = $1 || ''; my $query = $2 || ''; return 0 unless $query; my @keys = split /_and_/, $query; my %con; for my $key (@keys) { if ($method =~ /_by/) { $con{$key} = $self->$key; # previous/next_by conds are from self } else { $con{$key} = shift || ''; } } $method =~ s/(.*)_by/retrieve_$1/; # Convert next_by to retrieve_next my $attrs = shift || {}; return wantarray() ? @{[$self->$method( \%con, $attrs )]} : $self->$method( \%con, $attrs ); } 1; __END__ =head1 NAME Class::DBI::Sweet::Topping - Topping for Class::DBI::Sweet =head1 SYNOPSIS MyApp::Article->find_title_and_created_on( $title, $created_on ); MyApp::Article->search_title_and_created_on( $title, $created_on ); MyApp::Article->count_title_and_created_on( $title, $created_on ); MyApp::Article->page_title_and_created_on( $title, $created_on ); MyApp::Article->next_by_created_by( { order_by => 'created_on' } ); MyApp::Article->previous_by_created_by( { order_by => 'created_on' } ); =head1 DESCRIPTION Class::DBI::Sweet::Topping provides a convenient AUTOLOAD for search, page, retrieve_next and retrieve_previous. =head1 AUTHORS Christian Hansen Matt S Trout Sebastian Riedel =head1 THANKS TO Danijel Milicevic, Jesse Sheidlower, Marcus Ramberg, Viljo Marrandi =head1 SUPPORT #catalyst on L L L =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L L =cut