PHP 8.2.30
Preview: Kwalify.pm Size: 3.35 KB
/proc/self/root/proc/self/root/proc/thread-self/root/proc/self/root/usr/local/share/perl5/CPAN/Kwalify.pm

=head1 NAME

CPAN::Kwalify - Interface between CPAN.pm and Kwalify.pm

=head1 SYNOPSIS

  use CPAN::Kwalify;
  validate($schema_name, $data, $file, $doc);

=head1 DESCRIPTION

=over

=item _validate($schema_name, $data, $file, $doc)

$schema_name is the name of a supported schema. Currently only
C<distroprefs> is supported. $data is the data to be validated. $file
is the absolute path to the file the data are coming from. $doc is the
index of the document within $doc that is to be validated. The last
two arguments are only there for better error reporting.

Relies on being called from within CPAN.pm.

Dies if something fails. Does not return anything useful.

=item yaml($schema_name)

Returns the YAML text of that schema. Dies if something fails.

=back

=head1 AUTHOR

Andreas Koenig C<< <andk@cpan.org> >>

=head1 LICENSE

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

See L<http://www.perl.com/perl/misc/Artistic.html>



=cut


use strict;

package CPAN::Kwalify;
use vars qw($VERSION $VAR1);
$VERSION = "5.50";

use File::Spec ();

my %vcache = ();

my $schema_loaded = {};

sub _validate {
    my($schema_name,$data,$abs,$y) = @_;
    my $yaml_module = CPAN->_yaml_module;
    if (
        $CPAN::META->has_inst($yaml_module)
        &&
        $CPAN::META->has_inst("Kwalify")
       ) {
        my $load = UNIVERSAL::can($yaml_module,"Load");
        unless ($schema_loaded->{$schema_name}) {
            eval {
                my $schema_yaml = yaml($schema_name);
                $schema_loaded->{$schema_name} = $load->($schema_yaml);
            };
            if ($@) {
                # we know that YAML.pm 0.62 cannot parse the schema,
                # so we try a fallback
                my $content = do {
                    my $path = __FILE__;
                    $path =~ s/\.pm$//;
                    $path = File::Spec->catfile($path, "$schema_name.dd");
                    local *FH;
                    open FH, $path or die "Could not open '$path': $!";
                    local $/;
                    <FH>;
                };
                $VAR1 = undef;
                eval $content;
                if (my $err = $@) {
                    die "parsing of '$schema_name.dd' failed: $err";
                }
                $schema_loaded->{$schema_name} = $VAR1;
            }
        }
    }
    if (my $schema = $schema_loaded->{$schema_name}) {
        my $mtime = (stat $abs)[9];
        for my $k (keys %{$vcache{$abs}}) {
            delete $vcache{$abs}{$k} unless $k eq $mtime;
        }
        return if $vcache{$abs}{$mtime}{$y}++;
        eval { Kwalify::validate($schema, $data) };
        if (my $err = $@) {
            my $info = {}; yaml($schema_name, info => $info);
            die "validation of distropref '$abs'[$y] against schema '$info->{path}' failed: $err";
        }
    }
}

sub _clear_cache {
    %vcache = ();
}

sub yaml {
    my($schema_name, %opt) = @_;
    my $content = do {
        my $path = __FILE__;
        $path =~ s/\.pm$//;
        $path = File::Spec->catfile($path, "$schema_name.yml");
        if ($opt{info}) {
            $opt{info}{path} = $path;
        }
        local *FH;
        open FH, $path or die "Could not open '$path': $!";
        local $/;
        <FH>;
    };
    return $content;
}

1;

# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# End:

Directory Contents

Dirs: 8 × Files: 26

Name Size Perms Modified Actions
API DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
Exception DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
FTP DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
HTTP DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
Kwalify DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
LWP DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
Meta DIR
- drwxr-xr-x 2024-03-03 20:49:25
Edit Download
Plugin DIR
- drwxr-xr-x 2024-03-03 20:49:23
Edit Download
7.61 KB lr--r--r-- 2018-11-27 02:51:46
Edit Download
6.68 KB lr--r--r-- 2018-09-22 19:39:13
Edit Download
9.91 KB lr--r--r-- 2020-05-19 08:43:52
Edit Download
7.48 KB lr--r--r-- 2020-03-01 16:07:13
Edit Download
5.88 KB lr--r--r-- 2018-09-22 19:39:13
Edit Download
2.05 KB lr--r--r-- 2016-08-17 05:38:12
Edit Download
189 B lr--r--r-- 2012-09-08 09:00:31
Edit Download
178.96 KB lr--r--r-- 2022-04-03 19:00:28
Edit Download
11.71 KB lr--r--r-- 2020-03-01 17:11:25
Edit Download
972 B lr--r--r-- 2012-09-08 09:00:31
Edit Download
73.02 KB lr--r--r-- 2022-04-03 18:19:14
Edit Download
48.68 KB lr--r--r-- 2022-04-03 18:19:14
Edit Download
23.62 KB lr--r--r-- 2022-04-03 18:19:14
Edit Download
21.71 KB lr--r--r-- 2022-04-03 18:19:14
Edit Download
6.75 KB lr--r--r-- 2013-11-24 14:12:21
Edit Download
3.35 KB lr--r--r-- 2012-09-08 09:00:31
Edit Download
17.82 KB lr--r--r-- 2020-05-23 17:14:15
Edit Download
21.87 KB lr--r--r-- 2018-09-22 19:39:13
Edit Download
953 B lr--r--r-- 2016-08-17 05:38:12
Edit Download
3.14 KB lr--r--r-- 2020-05-19 08:43:52
Edit Download
567 B lr--r--r-- 2012-09-08 09:00:31
Edit Download
6.96 KB lr--r--r-- 2020-05-19 08:43:52
Edit Download
71.96 KB lr--r--r-- 2020-05-23 17:14:15
Edit Download
16.25 KB lr--r--r-- 2020-05-19 08:43:52
Edit Download
588 B lr--r--r-- 2012-09-08 09:00:31
Edit Download
4.29 KB lr--r--r-- 2018-09-22 19:39:13
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).