1 package Parse::Method::Signatures::Sig;
4 use MooseX::Types::Moose qw/HashRef/;
5 use Parse::Method::Signatures::Types qw/Param ParamCollection NamedParam/;
6 use List::MoreUtils qw/part/;
8 use namespace::clean -except => 'meta';
13 predicate => 'has_invocant',
16 has _positional_params => (
18 isa => ParamCollection,
19 init_arg => 'positional_params',
20 predicate => 'has_positional_params',
23 positional_params => 'params',
27 has _named_params => (
29 isa => ParamCollection,
30 init_arg => 'named_params',
31 predicate => 'has_named_params',
34 named_params => 'params',
40 isa => HashRef[Param],
44 override BUILDARGS => sub {
47 if (my $params = delete $args->{params}) {
48 my ($positional, $named) = part { NamedParam->check($_) ? 1 : 0 } @{ $params };
49 $args->{positional_params} = $positional if $positional;
50 $args->{named_params} = $named if $named;
56 sub _build__named_map {
58 return {} unless $self->has_named_params;
59 return { map { $_->label => $_ } @{ $self->named_params } };
63 my ($self, $name) = @_;
64 return $self->_named_map->{$name};
67 around has_positional_params => sub {
69 my $ret = $orig->(@_);
73 return scalar @{ $self->positional_params };
76 around has_named_params => sub {
78 my $ret = $orig->(@_);
82 return scalar @{ $self->named_params };
89 if ($self->has_invocant) {
90 $ret .= $self->invocant->to_string;
93 if ($self->has_positional_params || $self->has_named_params) {
98 $ret .= $self->_positional_params->to_string if $self->has_positional_params;
99 $ret .= q{, } if $self->has_positional_params && $self->has_named_params;
100 $ret .= $self->_named_params->to_string if $self->has_named_params;
106 __PACKAGE__->meta->make_immutable;
114 Parse::Method::Signatures::Sig - Method Signature
118 Represents the parsed method signature.
126 A ParamCollection representing the name parameters of this signature.
128 =head2 positional_params
130 A ParamCollection representing the positional parameters of this signature.
134 =head2 has_named_params
136 Predicate returning true if this signature has named parameters.
138 =head2 has_positional_params
140 Predicate returning true if this signature has positional parameters.
144 Returns the Param with the specified name.
148 Returns a string representation of this signature.
152 Licensed under the same terms as Perl itself.