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 )