MooseX::Declare::Syntax::MethodDeclaration - Handles method declarations


MooseX-Declare documentation Contained in the MooseX-Declare distribution.

Index


Code Index:

NAME

Top

MooseX::Declare::Syntax::MethodDeclaration - Handles method declarations

DESCRIPTION

Top

A role for keyword handlers that gives a framework to add or modify methods or things that look like methods.

ATTRIBUTES

Top

prototype_injections

An optional structure describing additional things to be added to a methods signature. A popular example is found in the around method modifier handler:

METHODS

Top

parse

  Object->parse (Object $ctx);

Reads a name and a prototype and builds the method meta object then registers it into the current class using MooseX::Method::Signatures and a custom_method_application, that calls register_method_declaration.

CONSUMES

Top

REQUIRED METHODS

Top

register_method_declaration

  Object->register_method_declaration (Object $metaclass, Str $name, Object $method)

This method will be called with the target metaclass and the final built method meta object and its name. The value it returns will be the value returned where the method was declared.

SEE ALSO

Top

AUTHORS

Top

COPYRIGHT AND LICENSE

Top


MooseX-Declare documentation Contained in the MooseX-Declare distribution.

package MooseX::Declare::Syntax::MethodDeclaration;
BEGIN {
  $MooseX::Declare::Syntax::MethodDeclaration::AUTHORITY = 'cpan:FLORA';
}
BEGIN {
  $MooseX::Declare::Syntax::MethodDeclaration::VERSION = '0.34';
}
# ABSTRACT: Handles method declarations

use Moose::Role;
use MooseX::Method::Signatures::Meta::Method;
use MooseX::Method::Signatures 0.36 ();
use MooseX::Method::Signatures::Types qw/PrototypeInjections/;

use namespace::clean -except => 'meta';


with qw(
    MooseX::Declare::Syntax::KeywordHandling
);


requires qw(
    register_method_declaration
);


has prototype_injections => (
    is          => 'ro',
    isa         => PrototypeInjections,
    predicate   => 'has_prototype_injections',
);


sub parse {
    my ($self, $ctx) = @_;

    my %args = (
        context                   => $ctx->_dd_context,
        initialized_context       => 1,
        custom_method_application => sub {
            my ($meta, $name, $method) = @_;
            $self->register_method_declaration($meta, $name, $method);
        },
    );

    $args{prototype_injections} = $self->prototype_injections
        if $self->has_prototype_injections;

    my $mxms = MooseX::Method::Signatures->new(%args);
    $mxms->parser;
}


1;

__END__