[SCM] libpackage-variant-perl Debian packaging branch, master, updated. debian/1.001003-1-16-g363631d

Robert Sedlacek rs at 474.at
Thu May 9 17:13:56 UTC 2013


The following commit has been merged in the master branch:
commit 067e51adaaf12b0b8c61096e5e6c65593062eb6e
Author: Robert Sedlacek <rs at 474.at>
Date:   Mon Nov 28 22:59:11 2011 +0100

    accept array references for importing

diff --git a/lib/Package/Variant.pm b/lib/Package/Variant.pm
index b0c2698..4407397 100644
--- a/lib/Package/Variant.pm
+++ b/lib/Package/Variant.pm
@@ -1,6 +1,7 @@
 package Package::Variant;
 
 use strictures 1;
+use Carp qw( croak );
 
 our %Variable;
 
@@ -39,15 +40,39 @@ sub import {
   }
 }
 
+my $sanitize_importing = sub {
+  my ($me, $spec) = @_;
+  return []
+    unless defined $spec;
+  return [map [$_ => $spec->{$_}], keys %$spec]
+    if ref $spec eq 'HASH';
+  croak q{The 'importing' option has to be either a hash or array ref}
+    unless ref $spec eq 'ARRAY';
+  my @specced = @$spec;
+  my @imports;
+  while (@specced) {
+    push @imports, [shift(@specced), shift(@specced)];
+  }
+  return \@imports;
+};
+
 sub build_variant_of {
   my ($me, $variable, @args) = @_;
   my $variant_name = "${variable}::_Variant_".++$Variable{$variable}{anon};
-  my $import = $Variable{$variable}{args}{importing} || {};
+  my $import = $me
+    ->$sanitize_importing($Variable{$variable}{args}{importing});
   my $setup = join("\n",
     "package ${variant_name};",
     (map sprintf(
-      q!use %s @{$import->{'%s'}||[]};!, $_, quotemeta($_),
-    ), keys %$import),
+      q!use %s %s;!,
+      $import->[$_][0],
+      not(defined $import->[$_][1])
+        ? ''
+        : sprintf(
+          q!@{$import->[%d][1]}!,
+          $_,
+        ),
+    ), 0..$#$import),
     "1;",
   );
   eval $setup
@@ -208,6 +233,15 @@ containing import arguments. The packages will be C<use>d with the given
 arguments by every variation before the L</make_variant> method is asked
 to create the package.
 
+If import order is important to you, you can also pass the C<importing>
+arguments as a flag array reference:
+
+  use Package::Variant
+    importing => [ PackageA => [], PackageB => [] ];
+
+If you want to import whatever the package exports by default, you have to
+pass C<undef> instead of an empty array reference.
+
 =head2 subs
 
 An array reference of strings listing the names of subroutines that should

-- 
libpackage-variant-perl Debian packaging



More information about the Pkg-perl-cvs-commits mailing list