[svn:mod_parrot] r526 - mod_parrot/trunk/languages/perl6/lib
[email protected] Fri, 5 Dec 2008 12:14:42 -0800 (PST)
| Newsgroups | perl.cvs.mod_parrot |
|---|---|
| Message-ID | <[email protected]> |
Author: jhorwitz
Date: Fri Dec 5 12:14:42 2008
New Revision: 526
Modified:
mod_parrot/trunk/languages/perl6/lib/mod_perl6.pm
Log:
properly merge server & directory configs
Modified: mod_parrot/trunk/languages/perl6/lib/mod_perl6.pm
==============================================================================
--- mod_parrot/trunk/languages/perl6/lib/mod_perl6.pm (original)
+++ mod_parrot/trunk/languages/perl6/lib/mod_perl6.pm Fri Dec 5 12:14:42 2008
@@ -28,6 +28,10 @@
enable
parseheaders
>.map({($_,1)});
+our @server_phases = <open_logs post_config child_init pre_connection
+ process_connection post_read_request map_to_storage trans>;
+our @dir_phases = <header_parser access authen authz response type fixup log
+ cleanup>;
sub load($handler)
{
@@ -47,9 +51,8 @@
# server-scope config
# XXX we shouldn't need to prepopulate these, but things segfault otherwise
- for <open_logs post_config child_init pre_connection process_connection
- post_read_request map_to_storage trans> -> $phase {
- %cfg{$phase ~ '_handler'} = undef;
+ for @server_phases.map({$_ ~ '_handler'}) -> $h {
+ %cfg{$h} = undef;
}
return %cfg;
@@ -61,9 +64,8 @@
# section-scope config
# XXX we shouldn't need to prepopulate these, but things segfault otherwise
- for <header_parser access authen authz response type fixup log
- cleanup> -> $phase {
- %cfg{$phase ~ '_handler'} = undef;
+ for @dir_phases.map({$_ ~ '_handler'}) -> $h {
+ %cfg{$h} = undef;
}
# options set with Perl6Options
@@ -74,16 +76,37 @@
return %cfg;
}
+sub server_merge(%base, %new)
+{
+ my %merged;
+
+ # XXX what to do with preloaded modules & postconfig requires???
+
+ # merge handlers -- never inherit
+ for @server_phases.map({$_ ~ '_handler'}) -> $h {
+ %merged{$h} = %new{$h};
+ }
+
+ return %merged;
+}
+
sub dir_merge(%base, %new)
{
+ my %merged;
+
# merge options -- inherit only if not set
- for %base<options>.keys -> $k {
- unless %new<options>.exists($k) {
- %new<options>{$k} = %base<options>{$k};
- }
+ %merged<options> = {};
+ for %valid_options.keys -> $k {
+ %merged<options>{$k} = %new<options>.exists($k) ??
+ %new<options>{$k} !! %base<options>{$k};
+ }
+
+ # merge handlers -- never inherit
+ for @dir_phases.map({$_ ~ '_handler'}) -> $h {
+ %merged{$h} = %new{$h};
}
- return %new;
+ return %merged;
}
# XXX should cache the handler form during configuration