From: Dave Rolsky Date: Mon, 7 Sep 2009 15:56:38 +0000 (-0500) Subject: Revise docs for new init_meta generation X-Git-Tag: 0.89_02~33^2~3 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=37e4fe9594de1209d5836eaee6eaacf995172066;p=gitmo%2FMoose.git Revise docs for new init_meta generation --- diff --git a/lib/Moose/Exporter.pm b/lib/Moose/Exporter.pm index 8a6905d..faebc2c 100644 --- a/lib/Moose/Exporter.pm +++ b/lib/Moose/Exporter.pm @@ -643,12 +643,14 @@ Moose::Exporter - make an import() and unimport() just like Moose.pm This module encapsulates the exporting of sugar functions in a C-like manner. It does this by building custom C, -C, and optionally C methods for your module, -based on a spec you provide. +C, and C methods for your module, based on a spec you +provide. -It also lets you "stack" Moose-alike modules so you can export -Moose's sugar as well as your own, along with sugar from any random -C module, as long as they all use C. +It also lets you "stack" Moose-alike modules so you can export Moose's sugar +as well as your own, along with sugar from any random C module, as +long as they all use C. This feature exists to let you bundle +a set of MooseX modules into a policy module that developers can use directly +instead of using Moose itself. To simplify writing exporter modules, C also imports C and C into your exporter module, as well as into @@ -663,17 +665,17 @@ This module provides two public methods: =item B<< Moose::Exporter->setup_import_methods(...) >> When you call this method, C builds custom C, -C, and C methods for your module. The C -method will export the functions you specify, and you can also tell it -to export functions exported by some other module (like C). +C, and C methods for your module. The C method +will export the functions you specify, and can also re-export functions +exported by some other module (like C). -The C method cleans the callers namespace of all the -exported functions. +The C method cleans the caller's namespace of all the exported +functions. -The C method will be generated if any parameters for -L are passed to C (see -below). It will handle passing along the required traits to -C and C as needed. +If you pass any parameters for L, this method will +generate an C for you as well (see below for details). This +C will call C and +C as needed. Note that if any of these methods already exist, they will not be overridden, you will have to use C to get the @@ -685,22 +687,21 @@ This method accepts the following parameters: =item * with_caller => [ ... ] -This a list of function I to be exported wrapped and then -exported. The wrapper will pass the name of the calling package as the -first argument to the function. Many sugar functions need to know -their caller so they can get the calling package's metaclass object. +This list of function I will be wrapped and then exported. The +wrapper will pass the name of the calling package as the first argument to the +function. Many sugar functions need to know their caller so they can get the +calling package's metaclass object. =item * as_is => [ ... ] -This a list of function names or sub references to be exported -as-is. You can identify a subroutine by reference, which is handy to -re-export some other module's functions directly by reference -(C<\&Some::Package::function>). +This list of function names or sub references will be exported as-is. You can +identify a subroutine by reference, which is handy to re-export some other +module's functions directly by reference (C<\&Some::Package::function>). -If you do export some other packages function, this function will -never be removed by the C method. The reason for this is we -cannot know if the caller I explicitly imported the sub -themselves, and therefore wants to keep it. +If you do export some other package's function, this function will never be +removed by the C method. The reason for this is we cannot know if +the caller I explicitly imported the sub themselves, and therefore wants +to keep it. =item * also => $name or \@names @@ -717,9 +718,8 @@ when C is called. =back Any of the C<*_roles> options for -C are also valid here, -and C will be passed along to the C parameter -of C. +C and +C are also acceptable. =item B<< Moose::Exporter->build_import_methods(...) >> @@ -727,12 +727,11 @@ Returns two or three code refs, one for C, one for C, and optionally one for C, if the appropriate options are passed in. -Accepts the additional C option, which accepts an arrayref of -method names to install into your exporter (C, C, -and C). Calling C is equivalent to -calling C with -C<< install => [qw(import unimport init_meta)] >> (except that it -doesn't also return the methods). +Accepts the additional C option, which accepts an arrayref of method +names to install into your exporting package. The valid options are C, +C, and C. Calling C is equivalent +to calling C with C<< install => [qw(import unimport +init_meta)] >> except that it doesn't also return the methods. Used by C. @@ -740,13 +739,14 @@ Used by C. =head1 IMPORTING AND init_meta -If you want to set an alternative base object class or metaclass -class, see above for how to pass options to L -through the options to C. If you want to do -something not supported by this, simply define an C method -in your class. The C method that C generates -for you will call this method (if it exists). It will always pass the -caller to this method via the C parameter. +If you want to set an alternative base object class or metaclass class, see +above for details on how this module can call L for +you. + +If you want to do something that is not supported by this module, simply +define an C method in your class. The C method that +C generates for you will call this method (if it exists). It +will always pass the caller to this method via the C parameter. Most of the time, your C method will probably just call C<< Moose->init_meta >> to do the real work: @@ -758,7 +758,32 @@ Moose->init_meta >> to do the real work: Keep in mind that C will return an C method for you, which you can also call from within your custom -C. +C: + + my ( $import, $unimport, $init_meta ) = + Moose::Exporter->build_import_methods( ... ); + + sub import { + my $class = shift; + + ... + + $class->$import(...); + + ... + } + + sub unimport { goto &$unimport } + + sub init_meta { + my $class = shift; + + ... + + $class->$init_meta(...); + + ... + } =head1 METACLASS TRAITS