From 730e5b5b833ac104cb59b730cd59e857559470d8 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Wed, 3 Aug 2011 09:17:26 +0100 Subject: Update CPAN-Meta to CPAN version 2.112150 [DELTA] 2.112150 2011-08-02 22:25:41 America/New_York [BUGFIX] - Stringify any objects encountered during conversion. (RT #67295) - Fixed some broken URLs in documentation and for LGPL in legacy conversion (RT #68738) - Fixed invalid private Pod in CPAN::Meta::Validator (RT #65925) [SPEC] - Clarified that file paths in the 'provides' section must be in Unix-style (i.e. forward slashes) (RT #69045) - Replaced examples using Module::Build::ModuleInfo with Module::Metadata (RT #66135) --- cpan/CPAN-Meta/Changes | 19 ++++++ cpan/CPAN-Meta/lib/CPAN/Meta.pm | 36 +++++++--- cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm | 30 ++++----- cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm | 9 ++- cpan/CPAN-Meta/lib/CPAN/Meta/History.pm | 10 +-- cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm | 9 ++- cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm | 35 +++++----- cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm | 105 +++++++++++++++++++++++------- cpan/CPAN-Meta/t/converter.t | 27 +++++++- 9 files changed, 195 insertions(+), 85 deletions(-) (limited to 'cpan') diff --git a/cpan/CPAN-Meta/Changes b/cpan/CPAN-Meta/Changes index e155cc391a..f91f71daae 100644 --- a/cpan/CPAN-Meta/Changes +++ b/cpan/CPAN-Meta/Changes @@ -1,5 +1,24 @@ Revision history for CPAN-Meta +2.112150 2011-08-02 22:25:41 America/New_York + + [BUGFIX] + + - Stringify any objects encountered during conversion. (RT #67295) + + - Fixed some broken URLs in documentation and for LGPL in legacy + conversion (RT #68738) + + - Fixed invalid private Pod in CPAN::Meta::Validator (RT #65925) + + [SPEC] + + - Clarified that file paths in the 'provides' section must be in + Unix-style (i.e. forward slashes) (RT #69045) + + - Replaced examples using Module::Build::ModuleInfo with Module::Metadata + (RT #66135) + 2.110930 2011-04-02 23:31:24 America/New_York [BUGFIX] diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta.pm b/cpan/CPAN-Meta/lib/CPAN/Meta.pm index 5d53514992..36f26d80a7 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta; -BEGIN { - $CPAN::Meta::VERSION = eval '2.110930_001'; -} -# ABSTRACT: the distribution metadata for a CPAN dist +our $VERSION = '2.112150'; # VERSION use Carp qw(carp croak); @@ -15,9 +12,7 @@ use CPAN::Meta::Converter; use CPAN::Meta::Validator; use Parse::CPAN::Meta 1.4400 (); -sub _dclone { - CPAN::Meta::Converter::_dclone(@_); -} +BEGIN { *_dclone = \&CPAN::Meta::Converter::_dclone } BEGIN { @@ -339,6 +334,8 @@ sub TO_JSON { 1; +# ABSTRACT: the distribution metadata for a CPAN dist + =pod @@ -349,7 +346,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -644,6 +641,10 @@ particular keys may be retrieved with the C method. If a custom key refers to a data structure, a deep clone is returned. +=for Pod::Coverage TO_JSON abstract author authors custom custom_keys description dynamic_config +generated_by keywords license licenses meta_spec name no_index +optional_features prereqs provides release_status resources version + =head1 BUGS Please report any bugs or feature using the CPAN Request Tracker. @@ -667,6 +668,25 @@ L =back +=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders + +=head1 SUPPORT + +=head2 Bugs / Feature Requests + +Please report any bugs or feature requests by email to C, or through +the web interface at L. You will be automatically notified of any +progress on the request by the system. + +=head2 Source Code + +This is open source software. The code repository is available for +public review and contribution under the terms of the license. + +L + + git clone git://github.com/dagolden/cpan-meta.git + =head1 AUTHORS =over 4 diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm index 2ea3456426..9fedacba31 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm @@ -2,39 +2,29 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Converter; -BEGIN { - $CPAN::Meta::Converter::VERSION = eval '2.110930_001'; -} -# ABSTRACT: Convert CPAN distribution metadata structures +our $VERSION = '2.112150'; # VERSION use CPAN::Meta::Validator; use version 0.82 (); use Parse::CPAN::Meta 1.4400 (); -use Carp qw(croak); sub _dclone { my $ref = shift; - # Work around JSON::PP's lack of a convert_blessed_universally - local *UNIVERSAL::TO_JSON = sub { - my $obj = shift; - - # Special case: stringify version objects - # Everything else: serialize - return $obj->isa("version") ? "$obj" : - $obj->isa("HASH") ? { %$obj } : - $obj->isa("ARRAY") ? { @$obj } : - croak "Don't know how to serialize $obj"; - }; + # if an object is in the data structure and doesn't specify how to + # turn itself into JSON, we just stringify the object. That does the + # right thing for typical things that might be there, like version objects, + # Path::Class objects, etc. + no warnings 'once'; + local *UNIVERSAL::TO_JSON = sub { return "$_[0]" }; my $backend = Parse::CPAN::Meta->json_backend(); return $backend->new->decode( - $backend->new->convert_blessed->allow_blessed->encode($ref) + $backend->new->allow_blessed->convert_blessed->encode($ref) ); } - my %known_specs = ( '2' => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec', '1.4' => 'http://module-build.sourceforge.net/META-spec-v1.4.html', @@ -1258,6 +1248,8 @@ sub convert { 1; +# ABSTRACT: Convert CPAN distribution metadata structures + =pod @@ -1268,7 +1260,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm index d8258dcf58..fdec692cfe 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Feature; -BEGIN { - $CPAN::Meta::Feature::VERSION = '2.110930'; -} -# ABSTRACT: an optional feature provided by a CPAN distribution +our $VERSION = '2.112150'; # VERSION use CPAN::Meta::Prereqs; @@ -33,6 +30,8 @@ sub prereqs { $_[0]{prereqs} } 1; +# ABSTRACT: an optional feature provided by a CPAN distribution + =pod @@ -43,7 +42,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm index 9ccbfd4403..49a614b82d 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/History.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::History; -BEGIN { - $CPAN::Meta::History::VERSION = '2.110930'; -} -# ABSTRACT: history of CPAN Meta Spec changes +our $VERSION = '2.112150'; # VERSION + 1; +# ABSTRACT: history of CPAN Meta Spec changes + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm index 29a2e5a2d5..5d1d1f0600 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Prereqs; -BEGIN { - $CPAN::Meta::Prereqs::VERSION = '2.110930'; -} -# ABSTRACT: a set of distribution prerequisites by phase and type +our $VERSION = '2.112150'; # VERSION use Carp qw(confess); @@ -140,6 +137,8 @@ sub clone { 1; +# ABSTRACT: a set of distribution prerequisites by phase and type + =pod @@ -150,7 +149,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type =head1 VERSION -version 2.110930 +version 2.112150 =head1 DESCRIPTION diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm index b32fdac08a..c5f8213aee 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Spec; -BEGIN { - $CPAN::Meta::Spec::VERSION = '2.110930'; -} -# ABSTRACT: specification for CPAN distribution metadata +our $VERSION = '2.112150'; # VERSION + 1; +# ABSTRACT: specification for CPAN distribution metadata + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -664,8 +664,9 @@ the distribution. The values are Maps with the following valid subkeys: =item file -This field is required. The value must contain a relative file path -from the root of the distribution to the module containing the package. +This field is required. The value must contain a Unix-style relative +file path from the root of the distribution to the module containing the +package. =item version @@ -681,12 +682,12 @@ Example: license => [ 'http://dev.perl.org/licenses/' ], homepage => 'http://sourceforge.net/projects/module-build', bugtracker => { - web => 'http://github.com/dagolden/cpan-meta-spec/issues', + web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', mailto => 'meta-bugs@example.com', }, repository => { - url => 'git://github.com/dagolden/cpan-meta-spec.git', - web => 'http://github.com/dagolden/cpan-meta-spec', + url => 'git://github.com/dagolden/cpan-meta.git', + web => 'http://github.com/dagolden/cpan-meta', type => 'git', }, x_twitter => 'http://twitter.com/cpan_linked/', @@ -1028,10 +1029,10 @@ if both are found. =head2 Extracting Version Numbers from Perl Modules To get the version number from a Perl module, consumers should use the -C<< MM->parse_version($file) >> method provided by L or -the L module provided with L. For -example, for the module given by C<$mod>, the version may be retrieved in one -of the following ways: +C<< MM->parse_version($file) >> method provided by +L or L. For example, for the +module given by C<$mod>, the version may be retrieved in one of the +following ways: # via ExtUtils::MakeMaker my $file = MM->_installed_file_for_module($mod); @@ -1040,14 +1041,14 @@ of the following ways: The private C<_installed_file_for_module> method may be replaced with other methods for locating a module in C<@INC>. - # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_module($mod); + # via Module::Metadata + my $info = Module::Metadata->new_from_module($mod); my $version = $info->version; If only a filename is available, the following approach may be used: # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_file($file); + my $info = Module::Metadata->new_from_file($file); my $version = $info->version; =head2 Comparing Version Numbers diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm index 819011cb09..b9f9868b65 100644 --- a/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm +++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Validator; -BEGIN { - $CPAN::Meta::Validator::VERSION = '2.110930'; -} -# ABSTRACT: validate CPAN distribution metadata structures +our $VERSION = '2.112150'; # VERSION #--------------------------------------------------------------------------# @@ -692,7 +689,7 @@ my %v1_licenses = ( 'apache' => 'http://apache.org/licenses/LICENSE-2.0', 'artistic' => 'http://opensource.org/licenses/artistic-license.php', 'artistic_2' => 'http://opensource.org/licenses/artistic-license-2.0.php', - 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.phpt', + 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.php', 'bsd' => 'http://www.opensource.org/licenses/bsd-license.php', 'gpl' => 'http://www.opensource.org/licenses/gpl-license.php', 'mit' => 'http://opensource.org/licenses/mit-license.php', @@ -829,6 +826,8 @@ sub _error { 1; +# ABSTRACT: validate CPAN distribution metadata structures + =pod @@ -839,7 +838,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures =head1 VERSION -version 2.110930 +version 2.112150 =head1 SYNOPSIS @@ -881,87 +880,143 @@ is valid. Returns a list of errors seen during validation. -=begin internals +=begin :internals =head2 Check Methods =over -=item * check_map($spec,$data) +=item * + +check_map($spec,$data) Checks whether a map (or hash) part of the data structure conforms to the appropriate specification definition. -=item * check_list($spec,$data) + +=item * + +check_list($spec,$data) Checks whether a list (or array) part of the data structure conforms to the appropriate specification definition. -=item * check_lazylist($spec,$data) + +=item * + +check_lazylist($spec,$data) Checks whether a list conforms, but converts strings to a single-element list + =back =head2 Validator Methods =over -=item * header($self,$key,$value) +=item * + +header($self,$key,$value) Validates that the header is valid. -Note: No longer used as we now read the data structure, not the file.=item * url($self,$key,$value) +Note: No longer used as we now read the data structure, not the file. + +=item * + +url($self,$key,$value) Validates that a given value is in an acceptable URL format -=item * urlspec($self,$key,$value) + +=item * + +urlspec($self,$key,$value) Validates that the URL to a META specification is a known one. -=item * string_or_undef($self,$key,$value) + +=item * + +string_or_undef($self,$key,$value) Validates that the value is either a string or an undef value. Bit of a catchall function for parts of the data structure that are completely user defined. -=item * string($self,$key,$value) + +=item * + +string($self,$key,$value) Validates that a string exists for the given key. -=item * file($self,$key,$value) + +=item * + +file($self,$key,$value) Validate that a file is passed for the given key. This may be made more thorough in the future. For now it acts like \&string. -=item * exversion($self,$key,$value) + +=item * + +exversion($self,$key,$value) Validates a list of versions, e.g. '<= 5, >=2, ==3, !=4, >1, <6, 0'. -=item * version($self,$key,$value) + +=item * + +version($self,$key,$value) Validates a single version string. Versions of the type '5.8.8' and '0.00_00' are both valid. A leading 'v' like 'v1.2.3' is also valid. -=item * boolean($self,$key,$value) + +=item * + +boolean($self,$key,$value) Validates for a boolean value. Currently these values are '1', '0', 'true', 'false', however the latter 2 may be removed. -=item * license($self,$key,$value) + +=item * + +license($self,$key,$value) Validates that a value is given for the license. Returns 1 if an known license type, or 2 if a value is given but the license type is not a recommended one. -=item * custom_1($self,$key,$value) + +=item * + +custom_1($self,$key,$value) Validates that the given key is in CamelCase, to indicate a user defined keyword and only has characters in the class [-_a-zA-Z]. In version 1.X of the spec, this was only explicitly stated for 'resources'. -=item * custom_2($self,$key,$value) + +=item * + +custom_2($self,$key,$value) Validates that the given key begins with 'x_' or 'X_', to indicate a user defined keyword and only has characters in the class [-_a-zA-Z] -=item * identifier($self,$key,$value) + +=item * + +identifier($self,$key,$value) Validates that key is in an acceptable format for the META specification, for an identifier, i.e. any that matches the regular expression qr/[a-z][a-z_]/i. -=item * module($self,$key,$value) + +=item * + +module($self,$key,$value) Validates that a given key is in an acceptable module name format, e.g. 'Test::CPAN::Meta::Version'. + =back -=end internals +=end :internals + +=for Pod::Coverage anything boolean check_lazylist check_list custom_1 custom_2 exversion file +identifier license module phase relation release_status string string_or_undef +url urlspec version header check_map =head1 BUGS diff --git a/cpan/CPAN-Meta/t/converter.t b/cpan/CPAN-Meta/t/converter.t index 5cd3e44e70..4bab817303 100644 --- a/cpan/CPAN-Meta/t/converter.t +++ b/cpan/CPAN-Meta/t/converter.t @@ -8,6 +8,20 @@ use CPAN::Meta::Converter; use File::Spec; use IO::Dir; use Parse::CPAN::Meta 1.4400; +use version; + +# mock file object +package + File::StringObject; + +use overload q{""} => sub { ${$_[0]} }, fallback => 1; + +sub new { + my ($class, $file) = @_; + bless \$file, $class; +} + +package main; my $data_dir = IO::Dir->new( 't/data' ); my @files = sort grep { /^\w/ } $data_dir->read; @@ -148,5 +162,16 @@ for my $f ( reverse sort @files ) { ); } -done_testing; +# specific test for object conversion +{ + my $path = File::Spec->catfile('t','data','resources.yml'); + my $original = Parse::CPAN::Meta->load_file( $path ); + ok( $original, "loaded resources.yml" ); + $original->{version} = version->new("1.64"); + $original->{no_index}{file} = File::StringObject->new(".gitignore"); + pass( "replaced some data fields with objects" ); + my $cmc = CPAN::Meta::Converter->new( $original ); + ok( my $converted = $cmc->convert( version => 2 ), "conversion successful" ); +} +done_testing; -- cgit v1.2.1