Alzabo
view release on metacpan or search on metacpan
lib/Alzabo/MethodMaker.pm view on Meta::CPAN
return $store->{methods}{by_name}->FETCH($name)
if exists $store->{methods}{by_name};
}
sub docs_as_pod
{
my $self = shift;
my $class = ref $self || $self;
my $contained = shift;
my $store = $class->_get_store($class);
my $pod;
$pod .= "=pod\n\n" unless $contained;
$pod .= "=head1 $class\n\n";
foreach my $class_doc ( $class->class_docs )
{
$pod .= $class_doc->as_pod;
}
foreach my $group ( $class->method_groups )
{
$pod .= "=head2 $group\n\n";
foreach my $method ( $class->methods_by_group($group) )
{
$pod .= $method->as_pod;
}
}
$pod .= $_ foreach $self->contained_docs;
$pod .= "=cut\n\n" unless $contained;
return $pod;
}
sub contained_docs
{
my $self = shift;
return map { $_->docs_as_pod(1) } $self->contained_classes;
}
package Alzabo::Docs;
sub group { shift->{group} }
sub description { shift->{description} }
# copied from Params::ValidatePP
{
my %type_to_string =
( Params::Validate::SCALAR() => 'scalar',
Params::Validate::ARRAYREF() => 'arrayref',
Params::Validate::HASHREF() => 'hashref',
Params::Validate::CODEREF() => 'coderef',
Params::Validate::GLOB() => 'glob',
Params::Validate::GLOBREF() => 'globref',
Params::Validate::SCALARREF() => 'scalarref',
Params::Validate::UNDEF() => 'undef',
Params::Validate::OBJECT() => 'object',
);
sub _typemask_to_strings
{
shift;
my $mask = shift;
my @types;
foreach ( Params::Validate::SCALAR, Params::Validate::ARRAYREF,
Params::Validate::HASHREF, Params::Validate::CODEREF,
Params::Validate::GLOB, Params::Validate::GLOBREF,
Params::Validate::SCALARREF, Params::Validate::UNDEF,
Params::Validate::OBJECT )
{
push @types, $type_to_string{$_} if $mask & $_;
}
return @types ? @types : ('unknown');
}
}
package Alzabo::MethodDocs;
use Params::Validate qw( validate SCALAR ARRAYREF HASHREF );
use base qw(Alzabo::Docs);
sub new
{
my $class = shift;
my %p = validate( @_, { name => { type => SCALAR },
group => { type => SCALAR },
description => { type => SCALAR },
spec => { type => SCALAR | ARRAYREF | HASHREF,
default => undef },
} );
return bless \%p, $class;
}
sub name { shift->{name} }
sub spec { shift->{spec} }
sub as_pod
{
my $self = shift;
my $desc = ucfirst $self->{description};
my $spec = $self->spec;
my $params;
if ( defined $spec )
{
if ( Alzabo::Utils::is_arrayref( $spec ) )
{
$params = "=over 4\n\n";
( run in 0.594 second using v1.01-cache-2.11-cpan-ceb78f64989 )