aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/UI/ViewPort/Action/Link.pm
blob: 76bf55e05941031f01c3cdacea2d6536e9b43207 (plain) (blame)
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
package Reaction::UI::ViewPort::Action::Link;

use Reaction::Class;
extends 'Reaction::UI::ViewPort';

use namespace::clean -except => [ qw(meta) ];
use MooseX::Types::URI qw/Uri/;
use MooseX::Types::Moose qw/Object CodeRef/;

has uri => ( is => 'rw', isa => Uri, lazy_build => 1);
has label => (is => 'rw', required => 1);

has target => (isa => Object, is => 'rw', required => 1);
has action => (isa => CodeRef, is => 'rw', required => 1);

sub BUILD {
  my $self = shift;
  $self->label( $self->label->($self->target) ) if ref $self->label eq 'CODE';
}

sub _build_uri {
  my $self = shift;
  my $c = $self->ctx;
  my ($c_name, $a_name, @rest) = @{ $self->action->($self->target, $c) };
  $c->uri_for($c->controller($c_name)->action_for($a_name),@rest);
}

__PACKAGE__->meta->make_immutable;

1;