Config-Patch

 view release on metacpan or  search on metacpan

lib/Config/Patch.pm  view on Meta::CPAN

Config::Patcher::Util::make_accessor( __PACKAGE__, $_ ) for @accessors;

###########################################
sub new {
###########################################
    my($class, %options) = @_;

    my $self = {
        comment_char => '#',
        mode         => "append",
        key          => undef,
        text         => undef,
        %options,
    };

    bless $self, $class;
}

###########################################
sub patch_marker {
###########################################
    my($self) = @_;

    return $self->{comment_char} .
           "(Config::Patch-" .
           "$self->{key}-" .
           $self->mode() .
           ")" .
           "\n";
}

###########################################
sub string_generate {
###########################################
    my($self) = @_;

    return $self->patch_marker() . 
           $self->text() .
           $self->patch_marker();
}

###########################################
sub freeze {
###########################################
    my($self, $string) = @_;

    # Hide an arbitrary string in a comment
    my $encoded = encode_base64($string);

    $encoded =~ s/^/$self->{comment_char} /gm;
    return $encoded;
}

###########################################
sub thaw {
###########################################
    my($self, $string) = @_;

    # Decode a hidden string 
    $string =~ s/^$self->{comment_char} //gm;
    my $decoded = decode_base64($string);
    return $decoded;
}

###########################################
sub replstring_extract {
###########################################
    my($self) = @_;

    my $text = $self->text();

    # Find the replace string in a patch
    my $replace_marker = $self->replace_marker();
    $replace_marker = quotemeta($replace_marker);
    if($text =~ /^$replace_marker\n(.*?)
                  ^$replace_marker/xms) {
        my $repl = $1;
        $text =~ s/^$replace_marker.*?
                    ^$replace_marker\n//xms;

        return($self->thaw($repl), $text);
    }

    return undef;
}

###########################################
sub replstring_hide {
###########################################
    my($self, $replstring) = @_;

    # Add a replace string to a patch
    my $replace_marker = $self->replace_marker();
    my $encoded = $replace_marker . "\n" .
                  $self->freeze($replstring) .
                  $replace_marker .
                  "\n";

    return $encoded;
}

###########################################
sub replace_marker {
###########################################
    my($self) = @_;

    return $self->{comment_char} .
           "(Config::Patch::replace)";
}

###########################################
package Config::Patch;
###########################################
use strict;
use warnings;
use Set::IntSpan;
use Fcntl qw(:flock);
use Log::Log4perl qw(:easy);

our $VERSION     = "0.09";

our @accessors = qw(data file comment_char key);



( run in 0.493 second using v1.01-cache-2.11-cpan-2398b32b56e )