kwalify.pm
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PM 代码 · 共 131 行
PM
131 行
=head1 NAMECPAN::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 onlyC<distroprefs> is supported. $data is the data to be validated. $fileis the absolute path to the file the data are coming from. $doc is theindex of the document within $doc that is to be validated. The lasttwo 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 AUTHORAndreas Koenig C<< <andk@cpan.org> >>=head1 LICENSEThis program is free software; you can redistribute it and/ormodify it under the same terms as Perl itself.See L<http://www.perl.com/perl/misc/Artistic.html>=cutuse strict;package CPAN::Kwalify;use vars qw($VERSION $VAR1);$VERSION = sprintf "%.6f", substr(q$Rev: 1418 $,4)/1000000 + 5.4;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; die "parsing of '$schema_name.dd' failed: $@" if $@; $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 ($@) { die "validation of distropref '$abs'[$y] failed: $@"; } }}sub _clear_cache { %vcache = ();}sub yaml { my($schema_name) = @_; my $content = do { my $path = __FILE__; $path =~ s/\.pm$//; $path = File::Spec->catfile($path, "$schema_name.yml"); 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:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?