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
|
package HTML::FormFu::Role::CustomRoles;
$HTML::FormFu::Role::CustomRoles::VERSION = '2.01';
use Moose::Role;
use Moose::Util qw( ensure_all_roles );
use List::MoreUtils qw( uniq );
has _roles => (
is => 'rw',
default => sub { [] },
lazy => 1,
isa => 'ArrayRef',
);
sub roles {
my $self = shift;
my @roles = @{ $self->_roles };
my @new;
if ( 1 == @_ && 'ARRAY' eq ref $_[0] ) {
@new = @{ $_[0] };
}
elsif ( @_ ) {
@new = @_;
}
if (@new) {
for my $role (@new) {
if ( !ref($role) && $role =~ s/^\+// ) {
push @roles, $role;
}
elsif ( !ref $role ) {
push @roles, "HTML::FormFu::Role::$role";
}
else {
push @roles, $role;
}
}
@roles = uniq @roles;
ensure_all_roles( $self, @roles );
$self->_roles(\@roles);
}
return [@roles];
}
1;
|