gozer       2004/11/08 21:44:12

  Modified:    src/docs/2.0/api/Apache CmdParms.pod Const.pod Module.pod
               src/docs/2.0/user/config custom.pod
  Log:
  Remove magicness of PerlLoadModule and implement Apache::Module::add()
  for modules that implement their own configuration directives
  
  Revision  Changes    Path
  1.18      +9 -5      modperl-docs/src/docs/2.0/api/Apache/CmdParms.pod
  
  Index: CmdParms.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/CmdParms.pod,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- CmdParms.pod      13 Sep 2004 22:17:03 -0000      1.17
  +++ CmdParms.pod      9 Nov 2004 05:44:12 -0000       1.18
  @@ -8,15 +8,18 @@
   =head1 Synopsis
   
     use Apache::CmdParms ();
  +  use Apache::Module ();
     use Apache::Const -compile => qw(NOT_IN_LOCATION);
     
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
       {
         name => 'MyDirective',
         cmd_data => 'some extra data',
       },
     );
     
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
  +  
     sub MyDirective {
         my($self, $parms, $args) = @_;
     
  @@ -35,8 +38,8 @@
         # this command's directive object
         $directive = $parms->directive;
     
  -      # the extra information passed thru cmd_data in
  -      # @APACHE_MODULE_COMMANDS
  +      # the extra information passed thru cmd_data to
  +      # Apache::Module::add()
         $info = $parms->info;
     
         # which methods are <Limit>ed ?
  @@ -193,7 +196,7 @@
   =head2 C<info>
   
   The extra information passed through C<cmd_data> in
  -C<L<@APACHE_MODULE_COMMANDS|docs::2.0::user::config::custom/C_cmd_data_>>.
  +C<L<Apache::Module::add()|docs::2.0::api::Apache::Module/C_add_>>.
   
     $info = $parms->info;
   
  @@ -213,7 +216,7 @@
   For example here is how to pass arbitrary information to a directive
   subroutine:
   
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
       {
         name => 'MyDirective1',
         func => \&MyDirective,
  @@ -225,6 +228,7 @@
         cmd_data => 'Two',
       },
     );
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
     
     sub MyDirective {
       my($self, $parms, $args) = @_;
  
  
  
  1.28      +1 -1      modperl-docs/src/docs/2.0/api/Apache/Const.pod
  
  Index: Const.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/Const.pod,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- Const.pod 17 Sep 2004 19:28:15 -0000      1.27
  +++ Const.pod 9 Nov 2004 05:44:12 -0000       1.28
  @@ -87,7 +87,7 @@
     use Apache::Const -compile => qw(:cmd_how);
   
   The C<:cmd_how> constants group is used in
  -C<L<@APACHE_MODULE_COMMANDS|docs::2.0::user::config::custom/C_args_how_>>
  +C<L<Apache::Module::add()|docs::2.0::api::Apache::Module/C_add_>>
   and
   C<L<$cmds-E<gt>args_how|docs::2.0::api::Apache::Command/C_args_how_>>.
   
  
  
  
  1.25      +39 -0     modperl-docs/src/docs/2.0/api/Apache/Module.pod
  
  Index: Module.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/Module.pod,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Module.pod        17 Sep 2004 00:07:23 -0000      1.24
  +++ Module.pod        9 Nov 2004 05:44:12 -0000       1.25
  @@ -9,6 +9,15 @@
   
     use Apache::Module ();
     
  +  #Define a configuration directive
  +  my @directives = (
  +      {
  +          name => 'MyDirective',
  +      }
  +  );
  +  
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
  +  
     # iterate over the whole module list
     for (my $modp = Apache::Module::top_module(); $modp; $modp = $modp->next) {
         my $name                  = $modp->name;
  @@ -62,6 +71,36 @@
   =head1 API
   
   C<Apache::Module> provides the following functions and/or methods:
  +
  +
  +
  +
  +
  +=head2 C<add>
  +
  +Add a module's custom configuration directive to Apache.
  +
  +  Apache::Module::add($package, $cmds);
  +
  +=over 4
  +
  +=item arg1: C<$package> ( string )
  +
  +the package of the module to add
  +
  +=item arg2: C<$cmds> ( ARRAY of HASH refs )
  +
  +the list of configuration directives to add
  +
  +=item ret: no return value
  +
  +=item since: 1.99_18
  +
  +=back
  +
  +See also L<Apache Server Configuration Customization in
  +Perl|docs::2.0::user::config::custom>.
  +
   
   
   
  
  
  
  1.15      +32 -12    modperl-docs/src/docs/2.0/user/config/custom.pod
  
  Index: custom.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/custom.pod,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- custom.pod        14 Sep 2004 20:47:23 -0000      1.14
  +++ custom.pod        9 Nov 2004 05:44:12 -0000       1.15
  @@ -91,7 +91,7 @@
     use Apache::CmdParms ();
     use Apache::Module ();
     
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
         {
          name         => 'MyParameter',
          func         => __PACKAGE__ . '::MyParameter',
  @@ -103,6 +103,7 @@
          name         => 'MyOtherParameter',
         },
     );
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
     
     sub MyParameter {
         my($self, $parms, @args) = @_;
  @@ -125,12 +126,16 @@
   The following sections discuss this and more advanced modules in
   detail.
   
  -A minimal configuration module is comprised of two groups of elements:
  +A minimal configuration module is comprised of three groups of elements:
   
   =over
   
  -=item * A global array C<@APACHE_MODULE_COMMANDS> for declaring the
  -new directives and their behavior.
  +=item * An array C<L<@directives|/C__CMDS_>> for declaring the new
  +directives and their behavior.
  +
  +=item * A call to
  +C<L<Apache::Module::add()|docs::2.0::api::Apache::Module/C_add_>> to
  +register the new directives with apache.
   
   =item * A subroutine per each new directive, which is called when the
   directive is seen
  @@ -139,13 +144,13 @@
   
   
   
  -=head2 C<@APACHE_MODULE_COMMANDS>
  +=head2 C<@directives>
   
  -C<@APACHE_MODULE_COMMANDS> is a global array of hash references. Each
  +C<@directives> is an array of hash references. Each
   hash represents a separate new configuration directive. In our example
   we had:
   
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
         {
          name         => 'MyParameter',
          func         => __PACKAGE__ . '::MyParameter',
  @@ -169,6 +174,10 @@
   I<L<args_how|/C_args_how_>>, I<L<req_override|/C_req_override_>> and
   I<L<errmsg|/C_errmsg_>>. They are discussed in the following sections.
   
  +It is worth noting that in previous versions of mod_perl, it was
  +necessary to call this variable @APACHE_MODULE_COMMANDS. It is not
  +the case anymore, and we consistently use the name @directives in 
  +the documentation for clarity. It can be named anything at all.
   
   =head3 C<name>
   
  @@ -274,7 +283,7 @@
   you to store arbitrary strings for later retrieval from your
   directive handler.  For instance:
   
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
         {
          name         => '<Location',
          # func defaults to Redirect()
  @@ -313,6 +322,14 @@
   chosen for a reason - this is exactly how httpd core handles these
   two directives.
   
  +=head2 Registering the new directives
  +
  +Once the C<L<@directives|/C__CMDS_>> array is populated, it needs to be
  +registered with apache using 
  +C<L<Apache::Module::add()|docs::2.0::api::Apache::Module/C_add_>>
  +
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
  +
   =head2 Directive Scope Definition Constants
   
   The I<L<req_override|/C_req_override_>> attribute specifies the
  @@ -780,7 +797,8 @@
     ...
     use Apache::Module ();
     use Apache::CmdParms ();
  -  our @APACHE_MODULE_COMMANDS = (...);
  +  my @directives = (...);
  +  Apache::Module::add(__PACKLAGE__, [EMAIL PROTECTED]);
     ...
     sub SERVER_CREATE {
         my($class, $parms) = @_;
  @@ -860,7 +878,8 @@
     ...
     use Apache::Module ();
     use Apache::CmdParms ();
  -  our @APACHE_MODULE_COMMANDS = (...);
  +  my @directives = (...);
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
     ...
     sub DIR_CREATE {
         my($class, $parms) = @_;
  @@ -921,12 +940,13 @@
     
     use Apache::Const -compile => qw(OK);
     
  -  our @APACHE_MODULE_COMMANDS = (
  +  my @directives = (
         { name => 'MyPlus' },
         { name => 'MyList' },
         { name => 'MyAppend' },
         { name => 'MyOverride' },
     );
  +  Apache::Module::add(__PACKAGE__, [EMAIL PROTECTED]);
     
     sub MyPlus     { set_val('MyPlus',     @_) }
     sub MyAppend   { set_val('MyAppend',   @_) }
  @@ -987,7 +1007,7 @@
     __END__
   
   It's probably a good idea to specify all the attributes for the
  -C<@APACHE_MODULE_COMMANDS> entries, but here for simplicity we have
  +C<@directives> entries, but here for simplicity we have
   only assigned to the I<L<name|/C_name_>> directive, which is a
   must. Since all our directives take a single argument,
   C<L<Apache::TAKE1|/C_Apache__TAKE1_>>, the default
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to