App-reposdb
view release on metacpan or search on metacpan
script/_reposdb-inline view on Meta::CPAN
# my $circ = $opts->{-circular};
# if ($circ) {
# my $meth = "command_$circ->[0]";
# die "Can't handle command $circ->[0] for option '-circular'" unless $self->can($meth);
# my @args = @$circ; shift @args;
# my $act = $self->$meth($cd, \@args);
# if ($opts->{'!debug'}) { $add_stmt->('stmt', 'print "DEBUG: main cleaner: ref=$ref, " . {{var}} . "\n"'); }
# $add_new_if->('$ref && $refs{ {{var}} }++', $act);
# }
#
# # catch object of specified classes (e.g. DateTime, etc)
# for my $on (grep {/\A\w*(::\w+)*\z/} sort keys %$opts) {
# my $o = $opts->{$on};
# next unless $o;
# my $meth = "command_$o->[0]";
# die "Can't handle command $o->[0] for option '$on'" unless $self->can($meth);
# my @args = @$o; shift @args;
# my $act = $self->$meth($cd, \@args);
# $add_if_ref->($on, $act);
# }
#
script/_reposdb-inline view on Meta::CPAN
#=head1 VERSION
#
#This document describes version 0.507 of Data::Clean (from Perl distribution Data-Clean), released on 2020-04-07.
#
#=head1 SYNOPSIS
#
# use Data::Clean;
#
# my $cleanser = Data::Clean->new(
# # specify how to deal with specific classes
# 'DateTime' => [call_method => 'epoch'], # replace object with its epoch
# 'Time::Moment' => [call_method => 'epoch'], # replace object with its epoch
# 'Regexp' => ['stringify'], # replace $obj with "$obj"
#
# # specify how to deal with all scalar refs
# SCALAR => ['deref_scalar'], # replace \1 with 1
#
# # specify how to deal with circular reference
# -circular => ['clone'],
#
# # specify how to deal with all other kinds of objects
script/_reposdb-inline view on Meta::CPAN
#
#This will replace a reference like C<{}> with C<HASH>.
#
#=item * ['replace_with_str', STR]
#
#This will replace a reference like C<{}> with I<STR>.
#
#=item * ['call_method' => STR]
#
#This will call a method named I<STR> and use its return as the replacement. For
#example: C<< DateTime->from_epoch(epoch=>1000) >> when processed with C<<
#[call_method => 'epoch'] >> will become 1000.
#
#=item * ['call_func', STR]
#
#This will call a function named I<STR> with value as argument and use its return
#as the replacement.
#
#=item * ['one_or_zero']
#
#This will perform C<< $val ? 1:0 >>.
script/_reposdb-inline view on Meta::CPAN
# );
#
#sub new {
# my ($class, %opts) = @_;
#
# if (!%opts && !$creating_singleton) {
# warn "You are creating a new ".__PACKAGE__." object without customizing options. ".
# "You probably want to call get_cleanser() yet to get a singleton instead?";
# }
#
# $opts{DateTime} //= [call_method => 'epoch'];
# $opts{'Time::Moment'} //= [call_method => 'epoch'];
# $opts{'Math::BigInt'} //= [call_method => 'bstr'];
# $opts{Regexp} //= ['stringify'];
# $opts{version} //= ['stringify'];
#
# $opts{SCALAR} //= ['deref_scalar'];
# $opts{-ref} //= ['replace_with_ref'];
# $opts{-circular} //= ['clone'];
# $opts{-obj} //= ['unbless'];
#
script/_reposdb-inline view on Meta::CPAN
# $cleaned = clone_and_clean_json($data);
#
#=head1 DESCRIPTION
#
#This class cleans data from anything that might be problematic when encoding to
#JSON. This includes coderefs, globs, and so on. Here's what it will do by
#default:
#
#=over
#
#=item * Change DateTime and Time::Moment object to its epoch value
#
#=item * Change Regexp and version object to its string value
#
#=item * Change scalar references (e.g. \1) to its scalar value (e.g. 1)
#
#=item * Change other references (non-hash, non-array) to its ref() value (e.g. "GLOB", "CODE")
#
#=item * Clone circular references
#
#With a default limit of 1, meaning that if a reference is first seen again for
script/reposdb-inline view on Meta::CPAN
; if ($_sahv_err) { return [400, "Argument validation failed: $_sahv_err"] }
} # if date arg exists
if (exists $args->{"to"}) {
$_sahv_dpath = [];
# req #0
((defined($args->{"to"})) ? 1 : (($_sahv_err //= "Required but not specified"),0))
&&
# coerce rule(s): From_float::epoch, From_obj::datetime, From_obj::time_moment, From_str::iso8601 # coerce to: float(epoch)
(($args->{"to"} = (!ref($args->{"to"}) && $args->{"to"} =~ /\A[0-9]{8,10}(?:.[0-9]+)?\z/ && $args->{"to"} >= 10**8 && $args->{"to"} <= 2**31) ? [undef,$args->{"to"}] : ((Scalar::Util::blessed($args->{"to"}) && $args->{"to"}->isa('DateTime...
&&
# check type 'date'
((!ref($args->{"to"}) && $args->{"to"} =~ /\A[0-9]+\z/) ? 1 : (($_sahv_err //= "Not of type date"),0))
; if ($_sahv_err) { return [400, "Argument validation failed: $_sahv_err"] }
} # if date arg exists
# check required args
return [400, "Missing required value for argument: repo"] if exists($args->{"repo"}) && !defined($args->{"repo"});
script/reposdb-inline view on Meta::CPAN
# BEGIN Local::_pci_clean_json
sub _pci_clean_json { require Clone::PP; require Scalar::Util; use feature 'state'; state $cleanser = sub {
my $data = shift;
state %refs;
state $ctr_circ;
state $process_array;
state $process_hash;
if (!$process_array) { $process_array = sub { my $a = shift; for my $e (@$a) { my $ref=ref($e);
if ($ref && $refs{ $e }++) { if (++$ctr_circ <= 1) { $e = Clone::PP::clone($e); redo } else { $e = 'CIRCULAR'; $ref = '' } }
elsif ($ref eq 'Cpanel::JSON::XS::Boolean') { $e = $e ? 1:0; $ref = '' }
elsif ($ref eq 'DateTime') { $e = $e->epoch; $ref = ref($e) }
elsif ($ref eq 'JSON::PP::Boolean') { $e = $e ? 1:0; $ref = '' }
elsif ($ref eq 'JSON::XS::Boolean') { $e = $e ? 1:0; $ref = '' }
elsif ($ref eq 'Math::BigInt') { $e = $e->bstr; $ref = ref($e) }
elsif ($ref eq 'Regexp') { $e = "$e"; $ref = "" }
elsif ($ref eq 'SCALAR') { $e = ${ $e }; $ref = ref($e) }
elsif ($ref eq 'Time::Moment') { $e = $e->epoch; $ref = ref($e) }
elsif ($ref eq 'version') { $e = "$e"; $ref = "" }
elsif (Scalar::Util::blessed($e)) { my $reftype = Scalar::Util::reftype($e); $e = $reftype eq "HASH" ? {%{ $e }} : $reftype eq "ARRAY" ? [@{ $e }] : $reftype eq "SCALAR" ? \(my $copy = ${ $e }) : $reftype eq "CODE" ? sub { goto &{ $e } } :(die "C...
my $reftype=Scalar::Util::reftype($e)//"";
if ($reftype eq "ARRAY") { $process_array->($e) }
elsif ($reftype eq "HASH") { $process_hash->($e) }
elsif ($ref) { $e = $ref; $ref = "" }
} } }
if (!$process_hash) { $process_hash = sub { my $h = shift; for my $k (keys %$h) { my $ref=ref($h->{$k});
if ($ref && $refs{ $h->{$k} }++) { if (++$ctr_circ <= 1) { $h->{$k} = Clone::PP::clone($h->{$k}); redo } else { $h->{$k} = 'CIRCULAR'; $ref = '' } }
elsif ($ref eq 'Cpanel::JSON::XS::Boolean') { $h->{$k} = $h->{$k} ? 1:0; $ref = '' }
elsif ($ref eq 'DateTime') { $h->{$k} = $h->{$k}->epoch; $ref = ref($h->{$k}) }
elsif ($ref eq 'JSON::PP::Boolean') { $h->{$k} = $h->{$k} ? 1:0; $ref = '' }
elsif ($ref eq 'JSON::XS::Boolean') { $h->{$k} = $h->{$k} ? 1:0; $ref = '' }
elsif ($ref eq 'Math::BigInt') { $h->{$k} = $h->{$k}->bstr; $ref = ref($h->{$k}) }
elsif ($ref eq 'Regexp') { $h->{$k} = "$h->{$k}"; $ref = "" }
elsif ($ref eq 'SCALAR') { $h->{$k} = ${ $h->{$k} }; $ref = ref($h->{$k}) }
elsif ($ref eq 'Time::Moment') { $h->{$k} = $h->{$k}->epoch; $ref = ref($h->{$k}) }
elsif ($ref eq 'version') { $h->{$k} = "$h->{$k}"; $ref = "" }
elsif (Scalar::Util::blessed($h->{$k})) { my $reftype = Scalar::Util::reftype($h->{$k}); $h->{$k} = $reftype eq "HASH" ? {%{ $h->{$k} }} : $reftype eq "ARRAY" ? [@{ $h->{$k} }] : $reftype eq "SCALAR" ? \(my $copy = ${ $h->{$k} }) : $reftype eq "C...
my $reftype=Scalar::Util::reftype($h->{$k})//"";
if ($reftype eq "ARRAY") { $process_array->($h->{$k}) }
elsif ($reftype eq "HASH") { $process_hash->($h->{$k}) }
elsif ($ref) { $h->{$k} = $ref; $ref = "" }
} } }
%refs = (); $ctr_circ=0;
for ($data) { my $ref=ref($_);
if ($ref && $refs{ $_ }++) { if (++$ctr_circ <= 1) { $_ = Clone::PP::clone($_); redo } else { $_ = 'CIRCULAR'; $ref = '' } }
elsif ($ref eq 'Cpanel::JSON::XS::Boolean') { $_ = $_ ? 1:0; $ref = '' }
elsif ($ref eq 'DateTime') { $_ = $_->epoch; $ref = ref($_) }
elsif ($ref eq 'JSON::PP::Boolean') { $_ = $_ ? 1:0; $ref = '' }
elsif ($ref eq 'JSON::XS::Boolean') { $_ = $_ ? 1:0; $ref = '' }
elsif ($ref eq 'Math::BigInt') { $_ = $_->bstr; $ref = ref($_) }
elsif ($ref eq 'Regexp') { $_ = "$_"; $ref = "" }
elsif ($ref eq 'SCALAR') { $_ = ${ $_ }; $ref = ref($_) }
elsif ($ref eq 'Time::Moment') { $_ = $_->epoch; $ref = ref($_) }
elsif ($ref eq 'version') { $_ = "$_"; $ref = "" }
elsif (Scalar::Util::blessed($_)) { my $reftype = Scalar::Util::reftype($_); $_ = $reftype eq "HASH" ? {%{ $_ }} : $reftype eq "ARRAY" ? [@{ $_ }] : $reftype eq "SCALAR" ? \(my $copy = ${ $_ }) : $reftype eq "CODE" ? sub { goto &{ $_ } } :(die "C...
my $reftype=Scalar::Util::reftype($_)//"";
if ($reftype eq "ARRAY") { $process_array->($_) }
( run in 0.305 second using v1.01-cache-2.11-cpan-05444aca049 )