Dual-license your content for inclusion in The Perl 5 Wiki using this HOWTO, or join us for a chat on irc.freenode.net#PerlNet.
Melbourne Perl Mongers/8th March 2006/Controller AddressBook.pm
From PerlNet
Save as lib/InfoAssistant/Controller/AddressBook.pm
Althought it is best to use the create script, make manual changes and use thie as a comparison.
Package InfoAssistant::Controller::AddressBook;
use strict;
use warnings;
use base 'Catalyst::Controller';
sub default : Private {
my ( $self, $c ) = @_;
# Forward example
# XXX Note - this is not working !
if ($c->request->arguments->[1] =~ /^[a-z]+$/) {
$c->request->arguments->[0] = $c->request->arguments->[1];
$c->forward('view');
}
# Get address book
my $ab = $c->model('AddressBook')->ab;
my %all = ();
foreach my $key ( scalar(%{$c->request->parameters})
? $ab->search(%{$c->request->parameters})
: $ab->list()
) {
$all{$key} = $ab->entry($key);
}
$c->stash('all' => \%all);
$c->stash('template' => 'address_list.tt');
}
# /addressbook/view/blah
sub view : Local {
my ($self, $c) = @_;
my $id = $c->request->arguments->[0];
my $entry = $c->model('AddressBook')->ab->entry($id);
$c->stash('id', $id);
$c->stash('entry', $entry);
$c->stash('template' => 'address_view.tt');
}
sub add : Local {
my ($self, $c) = @_;
$c->stash('template' => 'address_add.tt');
}
sub suggest : Local {
my ($self, $c) = @_;
my ($lookup) = keys %{$c->request->parameters};
my %ret = ();
my $ab = $c->model('AddressBook')->ab;
foreach my $key ($ab->search(%{$c->request->parameters})) {
$ret{$ab->entry($key)->{$lookup}}++;
}
$c->res->output(
$c->prototype->auto_complete_result(
[sort keys %ret]
)
);
}

