MooseX-CurriedHandles
view release on metacpan or search on metacpan
lib/MooseX/CurriedHandles.pm view on Meta::CPAN
package MooseX::CurriedHandles;
use Moose;
use Scalar::Util qw(blessed);
our $VERSION = '0.03';
extends 'Moose::Meta::Attribute';
has curried_handles => ( is => 'ro', isa => 'HashRef', default => sub { {} } );
after 'attach_to_class' => sub {
my ($attr, $class) = @_;
foreach my $method_name (keys %{ $attr->curried_handles }) {
$class->add_method($method_name,
$attr->generate_curried_accessor($attr->curried_handles->{$method_name})
);
}
};
sub generate_curried_accessor {
my ($attr, $spec) = @_;
my $attrname = $attr->name;
my ($delegate_method, $callbacks) = %$spec;
sub {
my $self = shift;
my $value = $self->$attrname;
my @method_params = map { $self->$_ } @$callbacks;
return $value->$delegate_method( @method_params, @_ );
};
}
1;
package Moose::Meta::Attribute::Custom::MyCurriedHandles;
sub register_implementation {
'MooseX::CurriedHandles'
}
1;
__END__
=head1 NAME
MooseX::CurriedHandles - Delegate methods to member objects, curried with more methods!
=head1 VERSION
Version 0.03
=cut
=head1 SYNOPSIS
package MyClass;
use Moose;
use MooseX::CurriedHandles;
has foo => (
isa => 'Str',
is => 'ro',
required => 0,
);
( run in 1.384 second using v1.01-cache-2.11-cpan-f56aa216473 )