From 931cbc8d6673ec352b369ae2f70f01ff96b4f507 Mon Sep 17 00:00:00 2001 From: groditi Date: Fri, 11 Sep 2009 13:36:16 +0000 Subject: initial refactor of CRUD controller actions as roles --- lib/Reaction/UI/Controller/Role/Action/List.pm | 121 +++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 lib/Reaction/UI/Controller/Role/Action/List.pm (limited to 'lib/Reaction/UI/Controller/Role/Action/List.pm') diff --git a/lib/Reaction/UI/Controller/Role/Action/List.pm b/lib/Reaction/UI/Controller/Role/Action/List.pm new file mode 100644 index 0000000..be15fd8 --- /dev/null +++ b/lib/Reaction/UI/Controller/Role/Action/List.pm @@ -0,0 +1,121 @@ +package Reaction::UI::Controller::Role::Action::List; + +use Moose::Role -traits => 'MethodAttributes'; +use Reaction::UI::ViewPort::Collection; + +requires qw/get_collection setup_viewport/; + +sub list :Action :Args(0) { + my ($self, $c) = @_; + my $collection = $c->stash->{collection} || $self->get_collection($c); + $self->setup_viewport($c, { collection => $collection }); +} + +around _build_action_viewport_map => sub { + my $orig = shift; + my $map = shift->$orig( @_ ); + $map->{list} = 'Reaction::UI::ViewPort::Collection'; + return $map; +}; + +1; + +__END__; + +=head1 NAME + +Reaction::UI::Controller::Role::Action::List - List action + +=head1 DESCRIPTION + +Provides a C action, which sets up an L +using the collection contained in the C slot of the stash, if +present, or using the object returned by the method C. + +=head1 SYNOPSYS + + package MyApp::Controller::Foo; + + use base 'Reaction::Controller'; + use Reaction::Class; + + with( + 'Reaction::UI::Controller::Role::GetCollection', + 'Reaction::UI::Controller::Role::Action::Simple', + 'Reaction::UI::Controller::Role::Action::List' + ); + + + __PACKAGE__->config( action => { + list => { Chained => 'base' }, + } ); + + sub base :Chained('/base') :CaptureArgs(0) { + ... + } + +=head1 ROLES CONSUMED + +This role also consumes the following roles: + +=over4 + +=item L + +=back + +=head1 REQUIRED METHODS + +The following methods must be provided by the consuming class: + +=over4 + +=item C + +=back + +=head1 ACTIONS + +=head2 list + +Chain endpoint with no args, sets up the viewport with the appropriate action. + +=head1 METHODS + +=head2 _build_action_viewport_map + +Extends to set the C key in the map to L + +=head1 SEE ALSO + +=over4 + +=item L + +=item L + +=item L + +=item L + +=item L + +=item L + +=item L + +=item L + +=item L + +=back + +=head1 AUTHORS + +See L for authors. + +=head1 LICENSE + +See L for the license. + +=cut -- cgit v1.2.3-54-g00ecf