Sub-Meta

 view release on metacpan or  search on metacpan

lib/Sub/Meta.pm  view on Meta::CPAN


sub _croak { require Carp; goto &Carp::croak }

sub new {
    my ($class, @args) = @_;

    my %args = @args == 1 && (ref $args[0]||"") ne "HASH" ? _croak "single arg must be hashref"
             : @args == 1 ? %{$args[0]}
             : @args;

    my $self = bless \%args => $class;

    $self->set_sub(delete $args{sub})             if exists $args{sub}; # build subinfo
    $self->set_subname(delete $args{subname})     if exists $args{subname};
    $self->set_stashname(delete $args{stashname}) if exists $args{stashname};
    $self->set_fullname(delete $args{fullname})   if exists $args{fullname};

    $self->set_is_method($self->_normalize_args_is_method(\%args));
    $self->set_parameters($self->_normalize_args_parameters(\%args));
    $self->set_returns($args{returns});

lib/Sub/Meta/Creator.pm  view on Meta::CPAN

    }

    unless (ref $args{finders} && ref $args{finders} eq 'ARRAY') {
        _croak 'finders must be an arrayref'
    }

    unless (List::Util::all { ref $_ && ref $_ eq 'CODE' } @{$args{finders}}) {
        _croak 'elements of finders have to be a code reference'
    }

    return bless \%args => $class;
}

sub sub_meta_class { return 'Sub::Meta' }

sub finders { my $self = shift; return $self->{finders} }

sub find_materials {
    my ($self, $sub) = @_;
    for my $finder (@{$self->finders}) {
        my $materials = $finder->($sub);

lib/Sub/Meta/Param.pm  view on Meta::CPAN

    my %args = @args == 1 ? ref $v && (ref $v eq 'HASH') ? %{$v}
                       : ( type => $v )
             : @args;

    $args{optional} = !delete $args{required} if exists $args{required};
    $args{named}    = !delete $args{positional} if exists $args{positional};
    $args{type}     = delete $args{isa} if exists $args{isa};

    %args = (%DEFAULT, %args);

    return bless \%args => $class;
}

sub name()       { my $self = shift; return $self->{name} // '' }
sub type()       { my $self = shift; return $self->{type} }
sub default()    { my $self = shift; return $self->{default} } ## no critic (ProhibitBuiltinHomonyms)
sub coerce()     { my $self = shift; return $self->{coerce} }
sub optional()   { my $self = shift; return !!$self->{optional} }
sub required()   { my $self = shift; return !$self->{optional} }
sub named()      { my $self = shift; return !!$self->{named} }
sub positional() { my $self = shift; return !$self->{named} }

lib/Sub/Meta/Parameters.pm  view on Meta::CPAN

    ;

sub _croak { require Carp; goto &Carp::croak }

sub param_class { return 'Sub::Meta::Param' }

sub new {
    my ($class, @args) = @_;
    my %args = @args == 1 ? %{$args[0]} : @args;

    my $self = bless \%args => $class;
    $self->set_args($args{args}) if exists $args{args};
    $self->set_invocant(delete $args{invocant}) if defined $args{invocant};
    $self->set_nshift(delete $args{nshift}) if defined $args{nshift};
    $self->set_slurpy(delete $args{slurpy}) if defined $args{slurpy};

    return $self;
}

sub nshift()    { my $self = shift; return $self->{nshift} // 0 }
sub slurpy()    { my $self = shift; return $self->{slurpy} }

lib/Sub/Meta/Returns.pm  view on Meta::CPAN

    eq => \&is_same_interface
    ;

sub new {
    my ($class, @args) = @_;
    my $v = $args[0];
    my %args = @args == 1 ? ref $v && ref $v eq 'HASH' ? %{$v}
                       : ( scalar => $v, list => $v, void => $v )
             : @args;

    return bless \%args => $class;
}

sub scalar() :method { my $self = shift; return $self->{scalar} } ## no critic (ProhibitBuiltinHomonyms)
sub list()           { my $self = shift; return $self->{list} }
sub void()           { my $self = shift; return $self->{void} }
sub coerce()         { my $self = shift; return $self->{coerce} }

sub has_scalar() { my $self = shift; return defined $self->{scalar} }
sub has_list()   { my $self = shift; return defined $self->{list} }
sub has_void()   { my $self = shift; return defined $self->{void} }

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.909 second using v1.00-cache-2.02-grep-82fe00e-cpan-9e6bc14194b )