MooseX-DeepAccessors
view release on metacpan or search on metacpan
lib/MooseX/DeepAccessors.pm view on Meta::CPAN
package MooseX::DeepAccessors;
use Moose;
use Scalar::Util qw(blessed);
our $VERSION = '0.02';
extends 'Moose::Meta::Attribute';
has deep_accessors => ( is => 'ro', isa => 'HashRef', default => sub { {} } );
after 'attach_to_class' => sub {
my ($attr, $class) = @_;
foreach my $method_name (keys %{ $attr->deep_accessors }) {
$class->add_method($method_name,
$attr->generate_deep_accessor($attr->deep_accessors->{$method_name})
);
}
};
sub generate_deep_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::MyDeepAccessors;
sub register_implementation {
'MooseX::DeepAccessors'
}
1;
__END__
=head1 NAME
MooseX::DeepAccessors - Delegate methods to member objects, curried with more methods!
=head1 VERSION
Version 0.02
=cut
=head1 SYNOPSIS
package MyClass;
use Moose;
use MooseX::DeepAccessors;
has foo => (
isa => 'Str',
is => 'ro',
required => 0,
);
( run in 1.010 second using v1.01-cache-2.11-cpan-39bf76dae61 )