Tripletail

 view release on metacpan or  search on metacpan

t/make_ini.pm  view on Meta::CPAN

## ----------------------------------------------------------------------------
#  t/make_ini.pm
# -----------------------------------------------------------------------------
# Mastering programmed by YAMASHINA Hio
#
# Copyright YMIRLINK, Inc.
# -----------------------------------------------------------------------------
# $Id$
# -----------------------------------------------------------------------------
package t::make_ini;
use strict;
use warnings;

our $USER;
our $INI_FILE;
our @cleanup;
our $NOCLEAN = $ENV{TL_TEST_NOCLEAN};

&setup;

1;

# -----------------------------------------------------------------------------
# $pkg->import({ ini => \%ini, });
# $pkg->import({ ini => sub{\%ini}, cleanup=>[qw(..)]);
# use t::make_ini \%opts;
# -----------------------------------------------------------------------------
sub import
{
	my $pkg  = shift;
	my $opts = shift;
	
	my $ini = $opts->{ini};
	$ini or die "no ini";
	ref($ini) eq 'CODE' and $ini = $ini->();
	write_ini($ini);
	
	if( $opts->{clean} )
	{
		push(@cleanup, @{$opts->{clean}});
	}
}

# -----------------------------------------------------------------------------
# setup.
# -----------------------------------------------------------------------------
sub setup
{
	$USER = eval{getpwuid($<)} || $ENV{USERNAME};
	$USER && $USER=~/^(\w+)\z/ or $USER = 'guest';
	
	$INI_FILE = "tmp$$.ini";
	-d "t" and $INI_FILE = "t/$INI_FILE";
}

# -----------------------------------------------------------------------------
# tear down.
# -----------------------------------------------------------------------------
END
{
	$NOCLEAN or unlink @cleanup;
}

# -----------------------------------------------------------------------------
# write_ini(%ini);
# write ini on $t::make_ini::INI_FILE;
# -----------------------------------------------------------------------------
sub write_ini {
    my $groups = shift;

    if (ref($groups) eq 'HASH') {
        $groups = [
            map {
                $_ => $groups->{$_};
              }
              keys %$groups
           ];
    }

    open my $fh, '>', $INI_FILE
      or
        die "could not create file [$INI_FILE]: $!";

    my $is_first = 1;
    for (my $i = 0; $i < @$groups; $i += 2) {
        my $group = $groups->[$i  ];
        my $pairs = $groups->[$i+1];

        if (ref($pairs) eq 'HASH') {
            $pairs = [
                map {
                    $_ => $pairs->{$_}
                  }
                  keys %$pairs
               ];
        }

        if ($is_first) {
            $is_first = undef;
        }
        else {
            print {$fh} "\n";
        }

        print {$fh} "[$group]\n";
        for (my $j = 0; $j < @$pairs; $j += 2) {
            my $key   = $pairs->[$j  ];
            my $value = $pairs->[$j+1];



( run in 1.936 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )