X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPackage%2FVariant.pm;h=a05af5b129c351385295426e8602cb6a071f7edc;hb=4e3b81776277e0dc30ed03205a9fee166a98d9fa;hp=8ff3f56430c1559774900e7a1cce9e1bb048a166;hpb=3c1ca277175ea9b9bcce0f674d99b6da40eaa293;p=p5sagit%2FPackage-Variant.git diff --git a/lib/Package/Variant.pm b/lib/Package/Variant.pm index 8ff3f56..a05af5b 100644 --- a/lib/Package/Variant.pm +++ b/lib/Package/Variant.pm @@ -5,7 +5,7 @@ use Import::Into; use Module::Runtime qw(require_module); use Carp qw(croak); -our $VERSION = '1.001004'; # 1.1.4 +our $VERSION = '1.002000'; # 1.2.0 $VERSION = eval $VERSION; @@ -54,11 +54,10 @@ my $sub_namer = eval { } || sub { $_[-1] }; sub import { - my $target = caller; + my $variable = caller; my $me = shift; - my $last = (split '::', $target)[-1]; + my $last = (split '::', $variable)[-1]; my $anon = 'A000'; - my $variable = $target; my %args = @_; no strict 'refs'; $Variable{$variable} = { @@ -71,7 +70,7 @@ sub import { map +($_ => sub {}), @{$args{subs}||[]}, }, }; - *{"${target}::import"} = sub { + *{"${variable}::import"} = sub { my $target = caller; my (undef, %arg) = @_; my $as = defined($arg{as}) ? $arg{as} : $last; @@ -82,13 +81,17 @@ sub import { }; my $subs = $Variable{$variable}{subs}; foreach my $name (keys %$subs) { - *{"${target}::${name}"} = sub { + *{"${variable}::${name}"} = sub { goto &{$subs->{$name}} }; } - *{"${target}::install"} = sub { + *{"${variable}::install"} = sub { goto &{$Variable{$variable}{install}}; - } + }; + *{"${variable}::build_variant"} = sub { + shift; + $me->build_variant_of($variable, @_); + }; } sub build_variant_of { @@ -131,7 +134,7 @@ Package::Variant - Parameterizable packages # what modules to 'use' importing => ['Moo::Role'], # proxied subroutines - subs => [ qw(has around before after with) ], + subs => [ qw(has around before after with) ]; sub make_variant { my ($class, $target_package, %arguments) = @_; @@ -329,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. This allows you to avoid importing anything into the +consuming package. + =head1 C METHODS These methods are available on C itself. @@ -375,6 +388,8 @@ mst - Matt S. Trout (cpan:MSTROUT) phaylon - Robert Sedlacek (cpan:PHAYLON) +haarg - Graham Knop (cpan:HAARG) + =head1 COPYRIGHT Copyright (c) 2010-2012 the C L and