App-NDTools
view release on metacpan or search on metacpan
lib/App/NDTools/NDProc.pm view on Meta::CPAN
log_debug { "Dumping rules to $self->{OPTS}->{'dump-rules'}" };
s_dump($self->{OPTS}->{'dump-rules'}, $self->{OPTS}->{ofmt},
$self->{OPTS}->{pretty}, $self->{rules});
}
sub embed {
my ($self, $data, $path, $thing) = @_;
my $spath = eval { str2path($path) };
die_fatal "Unable to parse '$path' ($@)", 4 if ($@);
my $ref = eval { (path($data, $spath, expand => 1))[0]};
die_fatal "Unable to lookup '$path' ($@)", 4 if ($@);
${$ref} = $self->{OPTS}->{'builtin-format'} eq 'RAW'
? $thing
: s_encode($thing, $self->{OPTS}->{'builtin-format'}, {pretty => 0});
}
sub exec {
my $self = shift;
lib/App/NDTools/NDProc/Module.pm view on Meta::CPAN
return $self;
}
sub restore_preserved {
my ($self, $data) = @_;
while (@{$self->{_preserved}}) {
my ($path, $value) = splice @{$self->{_preserved}}, 0, 2;
log_debug { "Restoring preserved '" . path2str($path) . "'" };
path(${$data}, $path, assign => $value, expand => 1);
}
return $self;
}
sub stash_preserved {
my ($self, $data, $paths) = @_;
for my $path (@{$paths}) {
log_debug { "Preserving '$path'" };
lib/App/NDTools/NDProc/Module/Insert.pm view on Meta::CPAN
$self->{OPTS}->{value} =
$self->load_struct($self->{OPTS}->{file}, $self->{OPTS}->{'file-fmt'})
if (defined $self->{OPTS}->{file});
}
sub process_path {
my ($self, $data, $path, $spath, $opts) = @_;
log_info { 'Updating path "' . $path . '"' };
eval { path(${$data}, $spath, assign => $opts->{value}, expand => 1) };
die_fatal "Failed to lookup path '$path' (" .
chomp_evaled_error($@) . ")", 4 if ($@);
}
1; # End of App::NDTools::NDProc::Module::Insert
__END__
=head1 NAME
lib/App/NDTools/NDProc/Module/Merge.pm view on Meta::CPAN
}
sub get_opts {
return @{$_[0]->{rules}};
}
sub map_paths {
my ($data, $srcs, $spath) = @_;
my @explicit = before { implicit_step($_) } @{$spath};
return path(${$data}, $spath, paths => 1, expand => 1)
if (@explicit == @{$spath}); # fully qualified path
my @out;
my @dsts = path(${$data}, $spath, paths => 1);
$srcs = [ @{$srcs} ];
while (@{$srcs}) {
my ($sp, $sr) = splice @{$srcs}, 0, 2;
if (@dsts) { # destination struct may match - use this paths beforehand
push @out, splice @dsts, 0, 2;
next;
}
my @e_path = @{$spath};
while (my $step = pop @e_path) {
if (ref $step eq 'ARRAY' and implicit_step($step)) {
if (my @tmp = path(${$data}, \@e_path, deref => 1, paths => 1)) {
# expand last existed array, addressed by implicit step
@e_path = ( @{$tmp[0]}, [ scalar @{$tmp[1]} ] );
last;
}
} elsif (ref $step eq 'HASH' and implicit_step($step)) {
if (my @tmp = path(${$data}, [ @e_path, $step ], paths => 1)) {
@e_path = @{$tmp[0]};
last;
}
}
}
@e_path = @{$sp}[0 .. $#explicit] unless (@e_path);
my @i_path = @{$sp}[@e_path .. $#{$sp}];
map { $_ = [0] if (ref $_ eq 'ARRAY') } @i_path; # drop array's indexes in implicit part of path
push @out, path(${$data}, [@e_path, @i_path], paths => 1, expand => 1);
}
return @out;
}
sub check_rule {
my ($self, $rule) = @_;
# merge full source if no paths defined
push @{$rule->{path}}, {}
lib/App/NDTools/NDTool.pm view on Meta::CPAN
keys %{$map_idx{$map_key}};
}
push @{$map_path}, [$map_idx{$map_key}->{$step->[0]}];
} else { # HASH
$map_key .= "{$step->{K}->[0]}";
push @{$map_path}, $step;
}
}
path($grepped, $map_path, assign => $ref, expand => 1);
}
}
push @out, $grepped if (defined $grepped);
}
return @out;
}
sub load_struct {
( run in 0.778 second using v1.01-cache-2.11-cpan-5623c5533a1 )