From 3edca453f642917f53c6fbfa59683fd70204813d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 14 Jun 2011 10:46:46 -0500 Subject: initial sketch --- lib/Sub/Exporter/Sugar.pm | 38 ++++++++++++++++++++++++++++++++++++++ t/basic.t | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 t/basic.t diff --git a/lib/Sub/Exporter/Sugar.pm b/lib/Sub/Exporter/Sugar.pm index e69de29..2370279 100644 --- a/lib/Sub/Exporter/Sugar.pm +++ b/lib/Sub/Exporter/Sugar.pm @@ -0,0 +1,38 @@ +package Sub::Exporter::Sugar; +use strict; +use warnings; + +my %EXPORT_DATA; + +use Sub::Exporter 'build_exporter', -setup => { + exports => [qw(export export_default), import => \&import_generator], + groups => { + default => [qw(export export_default import)], + }, +}; + +sub export { + my @exports = @_; + my $caller = caller; + $EXPORT_DATA{$caller} ||= {}; + push @{ $EXPORT_DATA{$caller}->{exports} ||= [] }, @exports; +} + +sub export_default { + my @exports = @_; + my $caller = caller; + $EXPORT_DATA{$caller} ||= {}; + push @{ $EXPORT_DATA{$caller}->{exports} ||= [] }, @exports; + push @{ $EXPORT_DATA{$caller}->{groups}{default} ||= [] }, @exports; +} + +sub import_generator { + my ($class, $name, $arg, $col) = @_; + return sub { + my ($package) = @_; + my $import = build_exporter($EXPORT_DATA{$package}); + goto $import; + }; +} + +1; diff --git a/t/basic.t b/t/basic.t new file mode 100644 index 0000000..09ba03f --- /dev/null +++ b/t/basic.t @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +BEGIN { + package My::Exporter; + use Sub::Exporter::Sugar; + + export 'foo'; + export_default 'bar'; + + sub foo { + return "foo"; + } + + sub bar { + return "bar"; + } + + $INC{'My/Exporter.pm'} = 1; +} + +{ + package Foo; + use My::Exporter; + ::ok(!Foo->can('foo')); + ::is(bar(), 'bar'); +} + +{ + package Bar; + use My::Exporter 'foo'; + ::is(foo(), 'foo'); + ::ok(!Bar->can('bar')); +} + +{ + package Baz; + use My::Exporter ':all'; + ::is(foo(), 'foo'); + ::is(bar(), 'bar'); +} + +done_testing; -- cgit v1.2.3-54-g00ecf