add build_variant method on variable packages
Graham Knop [Fri, 27 Sep 2013 17:09:22 +0000 (13:09 -0400)]
Changes
lib/Package/Variant.pm
t/01simple.t

diff --git a/Changes b/Changes
index e25d5bf..8f96bd4 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
 Revision history for Package-Variant
 
+  - add build_variant method on variable packages, to allow avoiding
+    importing a generator sub
   - fix pragmas applied by modules listed in "importing" from leaking out
     into unexpected scopes
 
index 4aeda2a..2f19c47 100644 (file)
@@ -87,7 +87,11 @@ sub import {
   }
   *{"${variable}::install"} = sub {
     goto &{$Variable{$variable}{install}};
-  }
+  };
+  *{"${variable}::build_variant"} = sub {
+    shift;
+    $me->build_variant_of($variable, @_);
+  };
 }
 
 sub build_variant_of {
@@ -328,6 +332,16 @@ Exports the generator subroutine under a different name than the default.
 
 =back
 
+=head2 build_variant
+
+  use Some::Variant::Package ();
+  my $variant_package = Some::Variant::Package->build_variant( @arguments );
+
+This method is provided for you.  It will generate a variant package
+and return its name, just like the generator sub provided by
+L</import>.  This allows you to avoid importing anything into the
+consuming package.
+
 =head1 C<Package::Variant> METHODS
 
 These methods are available on C<Package::Variant> itself.
index 2a060cb..3d3813d 100644 (file)
@@ -100,6 +100,13 @@ TestSingleImport(23);
 is_deeply [@imported], [qw( TestImportableA )],
   'scalar import works';
 
+@imported = ();
+
+TestSingleImport::->build_variant;
+
+is_deeply [@imported], [qw( TestImportableA )],
+  'build_variant works';
+
 like exception {
   Package::Variant->import(
     importing => \'foo', subs => [qw( foo )],