1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
package Reaction::UI::Controller::Role::Action::Simple;
use Moose::Role -traits => 'MethodAttributes';
requires 'push_viewport';
requires 'merge_config_hashes';
has action_viewport_map => (isa => 'HashRef', is => 'rw', lazy_build => 1);
has action_viewport_args => (isa => 'HashRef', is => 'rw', lazy_build => 1);
sub _build_action_viewport_map { {} }
sub _build_action_viewport_args { {} }
sub setup_viewport {
my ($self, $c, $vp_args) = @_;
my $action_name = $c->stack->[-1]->name;
my $vp = $self->action_viewport_map->{$action_name},
my $args = $self->merge_config_hashes(
$vp_args || {},
$self->action_viewport_args->{$action_name} || {} ,
);
return $self->push_viewport($vp, %$args);
}
1;
__END__;
=head1 NAME
Reaction::UI::Controller::Role::Action::Simple
=head1 DESCRIPTION
Provides a C<setup_viewport> method, which makes it easier to setup and
configure a viewport in controller actions.
=head1 SYNOPSYS
package MyApp::Controller::Foo;
use base 'Reaction::Controller';
use Reaction::Class;
with 'Reaction::UI::Controller::Role::Action::Simple';
__PACKAGE__->config(
action_viewport_map => { bar => 'Reaction::UI::Viewport::Object' },
action_viewport_args => { location => 'custom-location' },
);
sub bar :Local {
my($self, $c) = @_;
my $obj = $self->get_collection($c)->find( $some_key );
$self->setup_viewport($c, { model => $obj });
}
=head1 ATTRIBUTES
=head2 action_viewport_map
=over 4
=item B<_build_action_viewport_map> - Returns empty hashref by default.
=item B<has_action_viewport_map> - Auto generated predicate
=item B<clear_action_viewport_map>- Auto generated clearer method
=back
Read-write lazy building hashref. The keys should match action names in the
Controller and the value should be the ViewPort class that this action should
use.
=head2 action_viewport_args
Read-write lazy building hashref. Additional ViewPort arguments for the action
named as the key in the controller.
=over 4
=item B<_build_action_viewport_args> - Returns empty hashref by default.
=item B<has_action_viewport_args> - Auto generated predicate
=item B<clear_action_viewport_args>- Auto generated clearer method
=back
=head1 METHODS
=head2 setup_viewport $c, \%vp_args
Accepts two arguments, context, and a hashref of viewport arguments. It will
automatically determine the action name using the catalyst stack and call
C<push_viewport> with the ViewPort class name contained in the
C<action_viewport_map> with a set of options determined by merging C<$vp_args>
and the arguments contained in C<action_viewport_args>, if any.
=head1 SEE ALSO
=over4
=item L<Reaction::UI::Controller>
=item L<Reaction::UI::Controller::Role::Action::Simple>
=item L<Reaction::UI::Controller::Role::Action::Object>
=item L<Reaction::UI::Controller::Role::Action::List>
=item L<Reaction::UI::Controller::Role::Action::View>
=item L<Reaction::UI::Controller::Role::Action::Create>
=item L<Reaction::UI::Controller::Role::Action::Update>
=item L<Reaction::UI::Controller::Role::Action::Delete>
=item L<Reaction::UI::Controller::Role::Action::DeleteAll>
=back
=head1 AUTHORS
See L<Reaction::Class> for authors.
=head1 LICENSE
See L<Reaction::Class> for the license.
=cut
|