Data-Section-Pluggable
view release on metacpan or search on metacpan
lib/Data/Section/Pluggable.pm view on Meta::CPAN
use warnings;
use 5.020;
use true;
use experimental qw( signatures );
use stable qw( postderef );
package Data::Section::Pluggable 0.08 {
# ABSTRACT: Read structured data from __DATA__
use Class::Tiny qw( package prefer_filesystem filename _formats _cache );
use Exporter qw( import );
use Ref::Util qw( is_ref is_plain_hashref is_coderef is_plain_arrayref is_blessed_ref );
use MIME::Base64 qw( decode_base64 encode_base64 );
use Path::Tiny 0.130 ();
use Carp ();
our @EXPORT_OK = qw( get_data_section );
sub BUILDARGS ($class, @args) {
if(@args == 1) {
return $args[0] if is_plain_hashref $args[0];
return { package => $args[0] };
} else {
my %args = @args;
return \%args;
}
}
sub BUILD ($self, $) {
unless(defined $self->package) {
my $package = caller 2;
$self->package($package);
}
foreach my $attr (qw( prefer_filesystem filename )) {
if(defined $self->$attr) {
unless(is_blessed_ref($self->$attr) && $self->$attr->isa('Path::Tiny')) {
$self->$attr(Path::Tiny->new($self->$attr)->absolute);
}
}
}
$self->_formats({});
}
sub get_data_section ($self=undef, $name=undef) {
# handle being called as a function instead of
# a method.
unless(is_ref $self) {
$name = $self;
$self = __PACKAGE__->new(scalar caller);
}
my $all = $self->_get_all_data_sections;
return undef unless $all;
if (defined $name) {
if(exists $all->{$name}) {
return $self->_format($name, $all->{$name});
}
return undef;
} else {
return $self->_format_all($all);
}
}
sub _format_all ($self, $all) {
my %new;
foreach my $key (keys %$all) {
$new{$key} = $self->_format($key, $all->{$key});
}
\%new;
( run in 2.531 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )