You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(381) |
Nov
(176) |
Dec
(310) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(334) |
Feb
(96) |
Mar
(149) |
Apr
(214) |
May
(120) |
Jun
(56) |
Jul
(10) |
Aug
(273) |
Sep
(182) |
Oct
(56) |
Nov
(125) |
Dec
(22) |
2003 |
Jan
(63) |
Feb
(181) |
Mar
(498) |
Apr
(433) |
May
(39) |
Jun
(512) |
Jul
(276) |
Aug
(156) |
Sep
(101) |
Oct
(66) |
Nov
(24) |
Dec
(161) |
2004 |
Jan
(1) |
Feb
(377) |
Mar
(68) |
Apr
(26) |
May
(107) |
Jun
(333) |
Jul
(13) |
Aug
|
Sep
(76) |
Oct
(88) |
Nov
(170) |
Dec
(91) |
2005 |
Jan
(52) |
Feb
(239) |
Mar
(402) |
Apr
(15) |
May
(2) |
Jun
(1) |
Jul
(13) |
Aug
|
Sep
(71) |
Oct
(34) |
Nov
|
Dec
|
2006 |
Jan
(5) |
Feb
(5) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
(7) |
Oct
(2) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Chris W. <la...@us...> - 2004-11-28 06:46:28
|
Update of /cvsroot/openinteract/OpenInteract2/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13100/t Modified Files: utils.pl Log Message: update comments: rename show() -> display() in action Index: utils.pl =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/t/utils.pl,v retrieving revision 1.78 retrieving revision 1.79 diff -C2 -d -r1.78 -r1.79 *** utils.pl 28 Nov 2004 06:40:18 -0000 1.78 --- utils.pl 28 Nov 2004 06:46:09 -0000 1.79 *************** *** 53,57 **** base_theme => '2.09', base_user => '2.33', ! comments => '1.15', full_text => '2.57', lookup => '2.06', --- 53,57 ---- base_theme => '2.09', base_user => '2.33', ! comments => '1.16', full_text => '2.57', lookup => '2.06', |
From: Chris W. <la...@us...> - 2004-11-28 06:46:26
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/comments/OpenInteract2/Action In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13100/pkg/comments/OpenInteract2/Action Modified Files: Comments.pm Log Message: update comments: rename show() -> display() in action Index: Comments.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/OpenInteract2/Action/Comments.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Comments.pm 28 Nov 2004 06:00:56 -0000 1.7 --- Comments.pm 28 Nov 2004 06:46:09 -0000 1.8 *************** *** 204,208 **** # Display a single comment ! sub show { my ( $self ) = @_; $log ||= get_logger( LOG_APP ); --- 204,208 ---- # Display a single comment ! sub display { my ( $self ) = @_; $log ||= get_logger( LOG_APP ); |
From: Chris W. <la...@us...> - 2004-11-28 06:46:26
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/comments In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13100/pkg/comments Modified Files: Changes package.conf Log Message: update comments: rename show() -> display() in action Index: Changes =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/Changes,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** Changes 28 Nov 2004 06:01:30 -0000 1.13 --- Changes 28 Nov 2004 06:46:09 -0000 1.14 *************** *** 1,4 **** --- 1,8 ---- Revision history for OpenInteract package comments. + 1.16 Sun Nov 28 01:44:08 EST 2004 + + Rename 'show()' -> 'display()' in OI2::Action::Comments + 1.15 Sun Nov 28 00:14:24 EST 2004 Index: package.conf =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/package.conf,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** package.conf 28 Nov 2004 06:01:30 -0000 1.13 --- package.conf 28 Nov 2004 06:46:09 -0000 1.14 *************** *** 1,4 **** name comments ! version 1.15 author Chris Winters <ch...@cw...> url http://www.cwinters.com/ --- 1,4 ---- name comments ! version 1.16 author Chris Winters <ch...@cw...> url http://www.cwinters.com/ |
From: Chris W. <la...@us...> - 2004-11-28 06:46:23
|
Update of /cvsroot/openinteract/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13100 Modified Files: MANIFEST Log Message: update comments: rename show() -> display() in action Index: MANIFEST =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/MANIFEST,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** MANIFEST 28 Nov 2004 06:40:18 -0000 1.98 --- MANIFEST 28 Nov 2004 06:46:09 -0000 1.99 *************** *** 166,170 **** pkg/base_theme-2.09.zip pkg/base_user-2.33.zip ! pkg/comments-1.15.zip pkg/full_text-2.57.zip pkg/lookup-2.06.zip --- 166,170 ---- pkg/base_theme-2.09.zip pkg/base_user-2.33.zip ! pkg/comments-1.16.zip pkg/full_text-2.57.zip pkg/lookup-2.06.zip |
From: Chris W. <la...@us...> - 2004-11-28 06:40:45
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/base_template/OpenInteract2/Action In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12116/pkg/base_template/OpenInteract2/Action Modified Files: TemplatesUsedBox.pm Log Message: update base_template package: don't send '_anonymous_' templates to used box Index: TemplatesUsedBox.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/base_template/OpenInteract2/Action/TemplatesUsedBox.pm,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** TemplatesUsedBox.pm 14 Jul 2004 03:21:04 -0000 1.10 --- TemplatesUsedBox.pm 28 Nov 2004 06:40:19 -0000 1.11 *************** *** 21,26 **** "'", ref( $controller ), "' which should have ", "OpenInteract2::Controller::ManageTemplates in its \@ISA" ); ! return CTX->request->language_handle ! ->maketext( 'base_template.error.no_manage' ); } my %tmpl_by_package = (); --- 21,25 ---- "'", ref( $controller ), "' which should have ", "OpenInteract2::Controller::ManageTemplates in its \@ISA" ); ! return $self->_msg( 'base_template.error.no_manage' ); } my %tmpl_by_package = (); *************** *** 42,51 **** $full_name = $template; } next if ( $tmpl_used{ $package }{ $name } ); $tmpl_used{ $package }{ $name }++; ! push @{ $tmpl_by_package{ $package } }, ! { name => $name, ! package => $package, ! full_name => $full_name }; } foreach my $package ( keys %tmpl_by_package ) { --- 41,52 ---- $full_name = $template; } + next if ( $name eq '_anonymous_' ); next if ( $tmpl_used{ $package }{ $name } ); $tmpl_used{ $package }{ $name }++; ! push @{ $tmpl_by_package{ $package } }, { ! name => $name, ! package => $package, ! full_name => $full_name ! }; } foreach my $package ( keys %tmpl_by_package ) { *************** *** 83,93 **** holds a hashref of templates keyed by package. Each value is a an array reference of hash references, each with the keys: 'name', ! 'package' and 'full_name'. For the default template used for this box ! you would have: base_template => [ ! { name => 'templates_used_box', ! package => 'base_template', ! full_name => 'base_template::templates_used_box' }, ], --- 84,94 ---- holds a hashref of templates keyed by package. Each value is a an array reference of hash references, each with the keys: 'name', ! 'package' and 'full_name'. For example, the default template used for ! this box you would have: base_template => [ ! { name => 'templates_used_box', ! package => 'base_template', ! full_name => 'base_template::templates_used_box' }, ], |
From: Chris W. <la...@us...> - 2004-11-28 06:40:32
|
Update of /cvsroot/openinteract/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12116 Modified Files: MANIFEST Log Message: update base_template package: don't send '_anonymous_' templates to used box Index: MANIFEST =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/MANIFEST,v retrieving revision 1.97 retrieving revision 1.98 diff -C2 -d -r1.97 -r1.98 *** MANIFEST 28 Nov 2004 06:02:53 -0000 1.97 --- MANIFEST 28 Nov 2004 06:40:18 -0000 1.98 *************** *** 163,167 **** pkg/base_page-2.28.zip pkg/base_security-2.17.zip ! pkg/base_template-3.13.zip pkg/base_theme-2.09.zip pkg/base_user-2.33.zip --- 163,167 ---- pkg/base_page-2.28.zip pkg/base_security-2.17.zip ! pkg/base_template-3.14.zip pkg/base_theme-2.09.zip pkg/base_user-2.33.zip |
From: Chris W. <la...@us...> - 2004-11-28 06:38:02
|
Update of /cvsroot/openinteract/OpenInteract2/doc/examples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10900 Removed Files: arch_create_context arch_import_context conversion_conf_script_execute Log Message: inline some examples --- arch_create_context DELETED --- --- arch_import_context DELETED --- --- conversion_conf_script_execute DELETED --- |
From: Chris W. <la...@us...> - 2004-11-28 06:37:57
|
Update of /cvsroot/openinteract/OpenInteract2/doc/Manual In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10995 Modified Files: Architecture.pod Log Message: inline some examples; update the request/response registration Index: Architecture.pod =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/doc/Manual/Architecture.pod,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Architecture.pod 26 Sep 2004 19:56:26 -0000 1.8 --- Architecture.pod 28 Nov 2004 06:33:06 -0000 1.9 *************** *** 138,147 **** So normally it looks something like this: ! [% INCLUDE examples/arch_create_context | indent 4 %] Once it's created the C<CTX> symbol can be imported and used anywhere, like this: ! [% INCLUDE examples/arch_import_context | indent 4 %] =head1 ADAPTER --- 138,155 ---- So normally it looks something like this: ! my $ctx = OpenInteract2::Context->create({ ! website_dir => $website_dir ! }); Once it's created the C<CTX> symbol can be imported and used anywhere, like this: ! use OpenInteract2::Context qw( CTX ); ! ! sub foo { ! my ( $self ) = @_; ! my $login_info = CTX->lookup_login_config; ! ... ! } =head1 ADAPTER *************** *** 205,214 **** Here's one where we do it inside the adapter for a CGI process: ! my $ctx = OpenInteract2::Context->create( ! { website_dir => $website_dir }); $ctx->assign_request_type( 'cgi' ); $ctx->assign_response_type( 'cgi' ); ! The currently available adapter types are: =over 4 --- 213,224 ---- Here's one where we do it inside the adapter for a CGI process: ! my $ctx = OpenInteract2::Context->create({ ! website_dir => $website_dir ! }); $ctx->assign_request_type( 'cgi' ); $ctx->assign_response_type( 'cgi' ); ! The currently available adapter types, all listed in the 'request' and ! 'response' server configuration keys, are: =over 4 *************** *** 237,252 **** =back ! You can add a new request/response type through the ! C<register_factory_type> for both L<OpenInteract2::Request> and ! L<OpenInteract2::Response>: - # Register a 'fastcgi' request/response type OpenInteract2::Request->register_factory_type( fastcgi => 'OpenInteract2::Request::FastCGI' ); OpenInteract2::Response->register_factory_type( fastcgi => 'OpenInteract2::Response::FastCGI' ); ! Now all calls to 'assign_request_type' and 'assign_response_type' will ! have 'fastcgi' available. =item * --- 247,272 ---- =back ! You can add a new request/response type in two ways. The easiest is ! just to add the request/response type and class to the server ! configuration: ! ! [request] ! ... ! fastcgi = OpenInteract2::Request::FastCGI ! ! [response] ! ... ! fastcgi = OpenInteract2::Response::FastCGI ! ! You can also programmatically register the adapters in your server startup : OpenInteract2::Request->register_factory_type( fastcgi => 'OpenInteract2::Request::FastCGI' ); + OpenInteract2::Response->register_factory_type( fastcgi => 'OpenInteract2::Response::FastCGI' ); ! No matter which you choose, all calls to 'assign_request_type' and ! 'assign_response_type' will have 'fastcgi' available. =item * *************** *** 368,371 **** --- 388,394 ---- in what form the request is coming in or how the adapter handles it. + If you're running a web server the typical user request is coming over + HTTP from a browser, feed reader, bot or some other client. + =head2 Step 2: Adapter Creates Request/Response Objects *************** *** 464,467 **** --- 487,494 ---- the action. + If any observers are registered with the action they receive a + 'filter' observation. Any of these observers can modify the content + we've just generated. + If the cache is activated for this method we'll cache the content. In any case we return the content, finishing the flow for the action and |
From: Chris W. <la...@us...> - 2004-11-28 06:37:45
|
Update of /cvsroot/openinteract/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11073 Modified Files: README Log Message: update credits Index: README =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/README,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** README 13 Jun 2004 06:39:08 -0000 1.14 --- README 28 Nov 2004 06:33:30 -0000 1.15 *************** *** 62,65 **** --- 62,72 ---- * Dive in: 'perldoc OpenInteract2::Manual' + AUTHORS + ========================= + + Chris Winters <ch...@cw...> + + See OpenInteract2::Manual for more thorough credits. + ======================================== $Id$ \ No newline at end of file |
From: Chris W. <la...@us...> - 2004-11-28 06:37:20
|
Update of /cvsroot/openinteract/OpenInteract2/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11073/doc Modified Files: Manual.pod Log Message: update credits Index: Manual.pod =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/doc/Manual.pod,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Manual.pod 9 Jun 2004 02:40:01 -0000 1.17 --- Manual.pod 28 Nov 2004 06:33:30 -0000 1.18 *************** *** 198,203 **** =item * ! intes.net (http://www.intes.net/) has funded and supported OpenInteract ! development from its inception. =item * --- 198,228 ---- =item * ! Salve Nilsen and his team at the Norwegian Meteorological Institute ! (http://met.no/) have provided ideas, use cases, bug reports and ! invaluable advice throughout the OpenInteract2 beta process. ! ! =item * ! ! Teemu Arina and his team at Dicole (http://www.dicole.com/) have ! created a substantial and innovative groupware product called ! MimerDesk. They've also been very active in submitting patches, bug ! reports and ideas for development, particularly i18n support, based on ! their day-to-day usage. ! ! =item * ! ! John Sequeira and HappyCool (running the National Auto Sport ! Association) donated money toward the OpenInteract server which runs ! the website, wiki site, demo sites and JIRA issue tracking. ! ! =item * ! ! Greg Fenton and the folks at iAnywhere contributed a fully-licensed ! version of SQL Anywhere Studio version 9 at YAPC 2004. ! ! =item * ! ! intes.net (http://www.intes.net/) funded and supported OpenInteract ! development through its 1.x versions. =item * *************** *** 209,213 **** =item * ! Christian Lemburg E<lt>le...@ai...E<gt> =back \ No newline at end of file --- 234,240 ---- =item * ! Christian Lemburg E<lt>le...@ai...E<gt>, Rusty Foster ! E<lt>ru...@ku...E<gt>, Christopher Proto, and many other folks ! have helped out. (Please email me if I've forgotten you!) =back \ No newline at end of file |
From: Chris W. <la...@us...> - 2004-11-28 06:03:22
|
Update of /cvsroot/openinteract/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6251 Modified Files: MANIFEST Log Message: update package version Index: MANIFEST =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/MANIFEST,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -d -r1.96 -r1.97 *** MANIFEST 28 Nov 2004 00:10:27 -0000 1.96 --- MANIFEST 28 Nov 2004 06:02:53 -0000 1.97 *************** *** 166,170 **** pkg/base_theme-2.09.zip pkg/base_user-2.33.zip ! pkg/comments-1.14.zip pkg/full_text-2.57.zip pkg/lookup-2.06.zip --- 166,170 ---- pkg/base_theme-2.09.zip pkg/base_user-2.33.zip ! pkg/comments-1.15.zip pkg/full_text-2.57.zip pkg/lookup-2.06.zip |
From: Chris W. <la...@us...> - 2004-11-28 06:03:05
|
Update of /cvsroot/openinteract/OpenInteract2/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6251/t Modified Files: utils.pl Log Message: update package version Index: utils.pl =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/t/utils.pl,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -d -r1.76 -r1.77 *** utils.pl 28 Nov 2004 00:10:28 -0000 1.76 --- utils.pl 28 Nov 2004 06:02:53 -0000 1.77 *************** *** 53,57 **** base_theme => '2.09', base_user => '2.33', ! comments => '1.14', full_text => '2.57', lookup => '2.06', --- 53,57 ---- base_theme => '2.09', base_user => '2.33', ! comments => '1.15', full_text => '2.57', lookup => '2.06', |
From: Chris W. <la...@us...> - 2004-11-28 06:01:56
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/comments In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6050 Modified Files: package.conf Changes Log Message: metadata Index: package.conf =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/package.conf,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** package.conf 16 Jun 2004 01:03:44 -0000 1.12 --- package.conf 28 Nov 2004 06:01:30 -0000 1.13 *************** *** 1,4 **** name comments ! version 1.14 author Chris Winters <ch...@cw...> url http://www.cwinters.com/ --- 1,4 ---- name comments ! version 1.15 author Chris Winters <ch...@cw...> url http://www.cwinters.com/ Index: Changes =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/Changes,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Changes 16 Jun 2004 01:03:51 -0000 1.12 --- Changes 28 Nov 2004 06:01:30 -0000 1.13 *************** *** 1,4 **** --- 1,21 ---- Revision history for OpenInteract package comments. + 1.15 Sun Nov 28 00:14:24 EST 2004 + + - Update template/comment_list.tmpl to lookup the object info for + the description. + + - Ensure the cookie is added properly when the user asks to be + remembered.. + + - Move all user-viewable strings (mostly errors) from + OI2::Action::Comments to resource file. + + - Ensure comments are created with correct timezone in date. + + - Fix notification email template name; also ensure object URL + is contextualized and remove the poster's email due to privacy + concerns. + 1.14 Tue Jun 15 21:02:22 EDT 2004 |
From: Chris W. <la...@us...> - 2004-11-28 05:59:15
|
Update of /cvsroot/openinteract/OpenInteract2/pkg/comments/msg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5542/msg Modified Files: comments-messages-en.msg Log Message: move all error/status messages from action to resource file Index: comments-messages-en.msg =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/pkg/comments/msg/comments-messages-en.msg,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** comments-messages-en.msg 7 Jun 2004 04:59:54 -0000 1.3 --- comments-messages-en.msg 28 Nov 2004 05:58:43 -0000 1.4 *************** *** 35,37 **** comments.summary.error = Error summarizing comments comments.summary = <a href="[_1]">Comments? ([_2])</a> ! comments.notify.new_comment = A new comment has been posted on [_1] \ No newline at end of file --- 35,57 ---- comments.summary.error = Error summarizing comments comments.summary = <a href="[_1]">Comments? ([_2])</a> ! comments.notify.new_comment = A new comment has been posted on [_1] ! comments.status.add_ok = Comment successfully added. ! comments.status.add_notify_ok = Your notification entry added successfully. ! comments.error.data_missing = Data are required for the following fields: [_1] ! comments.error.cannot_fetch = Error fetching comment: [_1] ! comments.error.cannot_fetch_listing = Failed to fetch comments: [_1] ! comments.error.cannot_fetch_by_object = Failed to fetch comments for object: [_1] ! comments.error.not_found = No comment found for specified ID. ! comments.error.no_id = Cannot display comment without a comment ID. ! comments.error.cannot_fetch_object = Cannot fetch object to which comment is attached: [_1] ! comments.error.no_class_for_object = Cannot fetch object to which comment is attached: no class specified in comment. ! comments.error.cannot_add = Error adding comment: [_1] ! comments.error.cannot_fetch_notify = Failed to fetch notifications: [_1] ! comments.error.cannot_fetch_recent = Failed to get recent comments: [_1] ! comments.error.summary_data_missing = No object or class/ID given for which to fetch a summary. ! comments.error.list_for_object_data_missing = Insufficient data supplied to fetch comments by object. ! comments.error.cannot_fetch_object_for_listing = Failed to fetch object with supplied information. Error logged. ! comments.error.cannot_add_notify_bad_email = Could not add notification since the email address you gave ([_1]) seems to be invalid. Sorry. ! comments.error.cannot_add_notify_error_dupe_check = Failed to fetch existing notifications for dupe check, so I could not add yours. ! comments.error.cannot_add_notify_is_dupe = Did not add a notification to this thread since one already exists for the given email address. ! comments.error.cannot_add_notify_persist = Your notification entry addition failed, sorry. ([_1]) |
From: Chris W. <la...@us...> - 2004-11-28 05:17:16
|
Update of /cvsroot/openinteract/OpenInteract2/doc/Manual In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21203/doc/Manual Modified Files: Changes.pod Log Message: latest changes Index: Changes.pod =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/doc/Manual/Changes.pod,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** Changes.pod 24 Oct 2004 16:18:05 -0000 1.51 --- Changes.pod 28 Nov 2004 04:26:50 -0000 1.52 *************** *** 66,74 **** standalone = OpenInteract2::Response::Standalone ! You no longer declare filter-action mappings in 'server.ini'. Both the ! observer declarations and mapping observers to actions go into a new ! 'observer.ini' file. This replaces 'filter.ini' as filters are just a ! particular type of observer. See L<OpenInteract2::Observer> for more ! information. =head2 Major Changes --- 66,90 ---- standalone = OpenInteract2::Response::Standalone ! We've also moved the configuration for where Template Toolkit should ! store its compiled templates; remove: ! ! [dir] ! ... ! cache_tt = $WEBSITE/cache/tt ! ! and add: ! ! [content_generator TT] ! ... ! compile_dir = cache/tt ! ! (If you don't do this a default is provided for you and the old value ! is ignored.) ! ! Also: you no longer declare filter-action mappings in ! 'server.ini'. Both the observer declarations and mapping observers to ! actions go into a new 'observer.ini' file. This replaces 'filter.ini' ! as filters are just a particular type of observer. See ! L<OpenInteract2::Observer> for more information. =head2 Major Changes *************** *** 183,186 **** --- 199,212 ---- template.) + =item * + + Ensure 'cache_expire' is treated as a property in C<clone()> and + copied over. + + =item * + + If an action is caching content and we get a cache hit, issue a 'cache + hit' observation so observers can react to it. + =back *************** *** 282,285 **** --- 308,317 ---- instance of the class. + =item * + + Another small but useful change: you can now have '@INCLUDE' + directives to bring in configuration from a separate file. This can + make for more manageable configuration files. + =back *************** *** 436,439 **** --- 468,481 ---- =back + L<OpenInteract2::Manage::Website::ThemeInstall> + + =over 4 + + =item * + + OIN-104: Assign the default theme as the parent. + + =back + L<OpenInteract2::Manage::Website::UpdatePackageFromWebsite> *************** *** 514,517 **** --- 556,571 ---- =back + L<OpenInteract2::SessionManager> + + =over 4 + + =item * + + Explicitly ->delete() empty sessions, otherwise you get a whole bunch + of entirely unnecessary zero-length files/entries in your session + store. + + =back + L<OpenInteract2::SessionManager::File> *************** *** 526,529 **** --- 580,594 ---- =back + L<OpenInteract2::SPOPS> + + =over 4 + + =item * + + OIN-104: In C<get_security_scopes()>: if the request is not defined return + empty scopes. + + =back + L<OpenInteract2::SQLInstall> *************** *** 547,550 **** --- 612,620 ---- invocation to L<OpenInteract2::URL> methods + =item * + + Add C<add_params_to_url()> which just delegates to the new method in + L<OpenInteract2::URL>. + =back *************** *** 555,558 **** --- 625,639 ---- =item * + In C<create()>, don't escape or add contextualization to URLs that + begin with an 'http:'. + + =item * + + Add C<add_params_to_url( $url, \%params )> which appends the escaped + key/value pairs from C<\%params> to C<$url>. Note that C<$url> is not + modified in any way -- it's assumed to be contextualized and escaped. + + =item * + OIN-79: in addition to escaping query argument values, also escape the query argument names and the base URL. |
From: Chris W. <la...@us...> - 2004-11-28 04:51:56
|
Update of /cvsroot/openinteract/OpenInteract2/doc/Manual In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22880/doc/Manual Modified Files: Changes.pod Log Message: fix pod typo Index: Changes.pod =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/doc/Manual/Changes.pod,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** Changes.pod 28 Nov 2004 04:26:50 -0000 1.52 --- Changes.pod 28 Nov 2004 04:34:24 -0000 1.53 *************** *** 562,566 **** =item * ! Explicitly ->delete() empty sessions, otherwise you get a whole bunch of entirely unnecessary zero-length files/entries in your session store. --- 562,566 ---- =item * ! Explicitly -E<gt>delete() empty sessions, otherwise you get a whole bunch of entirely unnecessary zero-length files/entries in your session store. |
From: Chris W. <la...@us...> - 2004-11-28 04:49:50
|
Update of /cvsroot/openinteract/OpenInteract2/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26222/t Modified Files: context.t Log Message: update context tests to reflect moving dir.cache_tt to its content generator home Index: context.t =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/t/context.t,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** context.t 6 Jun 2004 06:36:03 -0000 1.40 --- context.t 28 Nov 2004 04:49:22 -0000 1.41 *************** *** 256,260 **** is( ref $tt_generator_info, 'HASH', 'TT content generator available and right type' ); ! is( keys %{ $tt_generator_info }, 8, 'TT content generator with right number of keys' ); is( $tt_generator_info->{class}, 'OpenInteract2::ContentGenerator::TT2Process', --- 256,260 ---- is( ref $tt_generator_info, 'HASH', 'TT content generator available and right type' ); ! is( keys %{ $tt_generator_info }, 9, 'TT content generator with right number of keys' ); is( $tt_generator_info->{class}, 'OpenInteract2::ContentGenerator::TT2Process', *************** *** 268,271 **** --- 268,273 ---- is( $tt_generator_info->{compile_cleanup}, 1, '...with compile cleanup instruction' ); + is( $tt_generator_info->{compile_dir}, 'cache/tt', + '...with compile directory' ); is( $tt_generator_info->{compile_ext}, '.ttc', '...with compile extension' ); *************** *** 312,316 **** error => [ 'error' ], log => [ 'logs' ], - cache_tt => [ 'cache', 'tt' ], config => [ 'conf' ], data => [ 'data' ], --- 314,317 ---- |
From: Chris W. <la...@us...> - 2004-11-28 04:48:06
|
Update of /cvsroot/openinteract/OpenInteract2/extra_packages/tips_quotes_cw In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21463/extra_packages/tips_quotes_cw Modified Files: package.conf Changes Log Message: latest quotes (I should probably move this to personal CVS...) Index: package.conf =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/extra_packages/tips_quotes_cw/package.conf,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** package.conf 25 Sep 2004 18:22:23 -0000 1.2 --- package.conf 28 Nov 2004 04:27:50 -0000 1.3 *************** *** 1,4 **** name tips_quotes_cw ! version 1.02 author Chris Winters <ch...@cw...> template_plugin Quote OpenInteract2::QuotePlugin --- 1,4 ---- name tips_quotes_cw ! version 1.03 author Chris Winters <ch...@cw...> template_plugin Quote OpenInteract2::QuotePlugin Index: Changes =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/extra_packages/tips_quotes_cw/Changes,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Changes 25 Sep 2004 18:22:23 -0000 1.2 --- Changes 28 Nov 2004 04:27:51 -0000 1.3 *************** *** 1,4 **** --- 1,8 ---- Revision history for OpenInteract package tips_quotes_cw. + 1.03 Sat Nov 27 23:27:27 EST 2004 + + - Add Kurt Vonnegut quote to RandomQuote + 1.02 Thu Jul 15 00:15:05 EDT 2004 |
From: Chris W. <la...@us...> - 2004-11-28 04:28:22
|
Update of /cvsroot/openinteract/OpenInteract2/extra_packages/tips_quotes_cw/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21463/extra_packages/tips_quotes_cw/OpenInteract2 Modified Files: RandomQuote.pm Log Message: latest quotes (I should probably move this to personal CVS...) Index: RandomQuote.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/extra_packages/tips_quotes_cw/OpenInteract2/RandomQuote.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RandomQuote.pm 3 Jun 2004 13:04:41 -0000 1.1 --- RandomQuote.pm 28 Nov 2004 04:27:50 -0000 1.2 *************** *** 394,396 **** A good programming language should have features that make the kind of people who use the phrase "software engineering" shake their heads disapprovingly. -- Paul Graham ! --- 394,405 ---- A good programming language should have features that make the kind of people who use the phrase "software engineering" shake their heads disapprovingly. -- Paul Graham ! %% ! We are what we pretend to be, so we must be careful what we pretend to be. ! -- Kurt Vonnegut ! %% ! Moral indignation is jealousy with a halo. ! -- H. G. Wells ! %% ! The conception of two people living together for twenty-five years without ! having a cross word suggests a lack of spirit only to be admired in sheep. ! -- Alan Patrick Herbert |
From: Chris W. <la...@us...> - 2004-11-28 04:27:23
|
Update of /cvsroot/openinteract/OpenInteract2/extra_packages/delicious_tags/conf In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21306/extra_packages/delicious_tags/conf Modified Files: action.ini Log Message: add caching parameter Index: action.ini =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/extra_packages/delicious_tags/conf/action.ini,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** action.ini 27 Nov 2004 17:12:05 -0000 1.4 --- action.ini 28 Nov 2004 04:27:07 -0000 1.5 *************** *** 9,18 **** [all_tags_box] ! class = OpenInteract2::Action::DeliciousTags ! task = all_tags ! is_secure = no ! url_none = yes ! weight = 2 ! title_key = tags.all_tags_box.title # meant to be used as component --- 9,19 ---- [all_tags_box] ! class = OpenInteract2::Action::DeliciousTags ! task = all_tags ! is_secure = no ! url_none = yes ! weight = 2 ! title_key = tags.all_tags_box.title ! cache_expire = 10m # meant to be used as component |
From: Chris W. <la...@us...> - 2004-11-28 04:25:28
|
Update of /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20759 Modified Files: Action.pm Log Message: doc updates Index: Action.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2/Action.pm,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** Action.pm 28 Nov 2004 01:02:13 -0000 1.61 --- Action.pm 28 Nov 2004 04:24:42 -0000 1.62 *************** *** 814,818 **** while ( my ( $field, $value ) = each %{ $props } ) { ! # These aren't defined in %PROPS if ( $field =~ /^(cache_expire|is_secure|name)$/ ) { $self->$field( $value ); --- 814,819 ---- while ( my ( $field, $value ) = each %{ $props } ) { ! # These aren't defined in %PROPS -- let them deal with ! # undefined values if ( $field =~ /^(cache_expire|is_secure|name)$/ ) { $self->$field( $value ); *************** *** 2115,2119 **** An arrayref of invalid tasks for this action. Note that the action dispatcher will B<never> execute a task with a leading underscore ! (e.g., '_find_records'); Example: --- 2116,2121 ---- An arrayref of invalid tasks for this action. Note that the action dispatcher will B<never> execute a task with a leading underscore ! (e.g., '_find_records'). This method will not return ! leading-underscore tasks. Example: *************** *** 2236,2244 **** # TODO: will this work? ! my $action = OpenInteract2::Action->new( ! { name => 'foo', ! class => 'OpenInteract2::Action::FooAction', ! task_default => 'drink', ! soda => 'Jolt' } ); =head2 Object Methods --- 2238,2247 ---- # TODO: will this work? ! my $action = OpenInteract2::Action->new({ ! name => 'foo', ! class => 'OpenInteract2::Action::FooAction', ! task_default => 'drink', ! soda => 'Jolt', ! }); =head2 Object Methods *************** *** 2301,2306 **** Examples: ! my $action = OpenInteract2::Action->new({ name => 'games', ! task => 'explore' }); my $url = $action->create_url; # $url: "/games/explore/" --- 2304,2311 ---- Examples: ! my $action = OpenInteract2::Action->new({ ! name => 'games', ! task => 'explore', ! }); my $url = $action->create_url; # $url: "/games/explore/" *************** *** 2362,2366 **** content. ! TODO: fill in info about caching Returns: content generated by the action --- 2367,2374 ---- content. ! Most actions do not implement this method, instead implementing a task ! and using the base class implementation of C<execute()> to lookup the ! task and perform the necessary security checks and caching. (Learn ! about caching in L<OpenInteract2::Manual::Caching>.) Returns: content generated by the action *************** *** 2427,2431 **** skipped. ! Currently we only set properties for which there is a defined value. Returns: action object (C<$self>) --- 2435,2440 ---- skipped. ! Currently we only set properties for which there is a defined value in ! C<\%properties>. Returns: action object (C<$self>) *************** *** 2451,2460 **** # Same ! $action->property( $property_name ); ! $action->$property_name(); ! # Same ! $action->property( $property_name, $value ); ! $action->$property_name( $value ); See L<PROPERTIES> for the list of properties in each action. --- 2460,2469 ---- # Same ! $action->property( 'task_invalid' ); ! $action->task_invalid(); ! # Same ! $action->property( task_invalid => [ 'foo' ] ); ! $action->task_invalid( [ 'foo' ] ); See L<PROPERTIES> for the list of properties in each action. *************** *** 2474,2478 **** the action as parameters. ! Currently we only set parameters for which there is a defined value. Returns: action object (C<$self>) --- 2483,2488 ---- the action as parameters. ! Currently we only set parameters for which there is a defined value in ! C<\%params>. Returns: action object (C<$self>) *************** *** 2494,2498 **** B<param_add( $key, @values )> ! Adds (rather than replaces) the values C<@value> to the parameter C<$key>. If there is a value already set for C<$key>, or if you pass multiple values, it is turned into an array reference and C<@values> --- 2504,2508 ---- B<param_add( $key, @values )> ! Adds (rather than replaces) the values C<@values> to the parameter C<$key>. If there is a value already set for C<$key>, or if you pass multiple values, it is turned into an array reference and C<@values> *************** *** 2509,2515 **** # $full_msg = 'Ooops I... did it again' ! $action->param( error_msg => "Ooops I..." ); ! $action->param_add( error_msg => "did it again" ); ! $action->param( error_msg => 'and again' ); my $full_msg = join( ' ', $action->param( 'error_msg' ) ); # $full_msg = 'and again' --- 2519,2525 ---- # $full_msg = 'Ooops I... did it again' ! $action->param( error_msg => "Ooops I..." ); # Set to value ! $action->param_add( error_msg => "did it again" ); # ...add new value to existing ! $action->param( error_msg => 'and again' ); # ...replace the earlier values entirely my $full_msg = join( ' ', $action->param( 'error_msg' ) ); # $full_msg = 'and again' *************** *** 2591,2594 **** --- 2601,2612 ---- CTX->request->language_handle->maketext( $key, @args ); + Example: + + if ( $@ ) { + $action->param_add( + error_msg => $action->_msg( 'my.error.message', "$@" ) + ); + } + B<_find_task()> *************** *** 2632,2644 **** =item * ! Does not begin with an underscore. =item * ! Is not listed in the C<task_invalid> property. =item * ! Is listed in the C<task_valid> property, if that property is defined. =back --- 2650,2662 ---- =item * ! does not begin with an underscore. =item * ! is not listed in the C<task_invalid> property. =item * ! is listed in the C<task_valid> property if that property is defined. =back |
From: Chris W. <la...@us...> - 2004-11-28 01:33:01
|
Update of /cvsroot/openinteract/OpenInteract2/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24329/t Modified Files: utils.pl Log Message: cosmetic aligning (from using File::Spec::Functions) Index: utils.pl =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/t/utils.pl,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** utils.pl 27 Nov 2004 19:00:27 -0000 1.74 --- utils.pl 27 Nov 2004 20:38:10 -0000 1.75 *************** *** 159,164 **** } $type ||= 'content'; ! my $full_filename = catfile( get_test_dir(), ! @{ $filename } ); if ( $type eq 'name' ) { return $full_filename; --- 159,163 ---- } $type ||= 'content'; ! my $full_filename = catfile( get_test_dir(), @{ $filename } ); if ( $type eq 'name' ) { return $full_filename; |
From: Chris W. <la...@us...> - 2004-11-28 01:03:10
|
Update of /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2/ContentGenerator In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14697/ContentGenerator Modified Files: TT2Process.pm Log Message: move compilation directory configuration location from 'dir' to with the rest of the TT stuff Index: TT2Process.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2/ContentGenerator/TT2Process.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** TT2Process.pm 27 Sep 2004 03:18:45 -0000 1.19 --- TT2Process.pm 28 Nov 2004 01:02:50 -0000 1.20 *************** *** 189,193 **** : DEFAULT_CACHE_SIZE; my $compile_ext = $init_params->{compile_ext} || DEFAULT_COMPILE_EXT; ! my $compile_dir = CTX->lookup_directory( 'cache_tt' ); # If the compile_dir isn't specified, be sure to set it **and** --- 189,199 ---- : DEFAULT_CACHE_SIZE; my $compile_ext = $init_params->{compile_ext} || DEFAULT_COMPILE_EXT; ! ! # Since we've moved the cache configuration give a default ! ! my $base_compile_dir = $init_params->{compile_dir} || 'cache/tt'; ! my $compile_dir = File::Spec->catdir( ! CTX->lookup_directory( 'website' ), $base_compile_dir ! ); # If the compile_dir isn't specified, be sure to set it **and** *************** *** 202,209 **** $self->{_plugin_class}{OI} = 'OpenInteract2::TT2::Plugin'; ! return { PLUGINS => { OI => 'OpenInteract2::TT2::Plugin' }, ! CACHE_SIZE => $cache_size, ! COMPILE_DIR => $compile_dir, ! COMPILE_EXT => $compile_ext }; } --- 208,217 ---- $self->{_plugin_class}{OI} = 'OpenInteract2::TT2::Plugin'; ! return { ! PLUGINS => { OI => 'OpenInteract2::TT2::Plugin' }, ! CACHE_SIZE => $cache_size, ! COMPILE_DIR => $compile_dir, ! COMPILE_EXT => $compile_ext ! }; } |
From: Chris W. <la...@us...> - 2004-11-28 01:02:26
|
Update of /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14531 Modified Files: Action.pm Log Message: add 'cache hit' observation; add notes about the observations thrown from the common actions Index: Action.pm =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/lib/OpenInteract2/Action.pm,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** Action.pm 28 Nov 2004 00:11:52 -0000 1.60 --- Action.pm 28 Nov 2004 01:02:13 -0000 1.61 *************** *** 258,261 **** --- 258,262 ---- my $cached_content = $self->_check_cache; if ( $cached_content ) { + $self->notify_observers( 'cache hit', \$cached_content ); return $cached_content; } *************** *** 1529,1533 **** it requires. The observation is posted just before the content is cached, so if the content is cacheable any modifications will become ! part of the cache. Here is an example: --- 1530,1536 ---- it requires. The observation is posted just before the content is cached, so if the content is cacheable any modifications will become ! part of the cache. (If you need to filter the cached content watch for ! the observation 'cache hit'; it also posts a scalar reference of the ! content.) Here is an example: *************** *** 1554,1558 **** And then map the observer to one or more actions: ! [observer action] wiki = news wiki = page --- 1557,1561 ---- And then map the observer to one or more actions: ! [map] wiki = news wiki = page *************** *** 1571,1578 **** =item B<OpenInteract2::Action::CommonAdd> ! =item B<OpenInteract2::Action::CommonRemove> =item B<OpenInteract2::Action::CommonUpdate> =back --- 1574,1587 ---- =item B<OpenInteract2::Action::CommonAdd> ! Fires: 'pre add' and 'post add' =item B<OpenInteract2::Action::CommonUpdate> + Fires: 'pre update' and 'post update' + + =item B<OpenInteract2::Action::CommonRemove> + + Fires: 'pre remove' and 'post remove' + =back |
From: Chris W. <la...@us...> - 2004-11-28 00:58:20
|
Update of /cvsroot/openinteract/OpenInteract2/doc/Manual In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13419 Modified Files: Caching.pod Log Message: add notes about 'cache hit' observation; move the admin caching section up near the side-effects one Index: Caching.pod =================================================================== RCS file: /cvsroot/openinteract/OpenInteract2/doc/Manual/Caching.pod,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** Caching.pod 28 Nov 2004 00:38:23 -0000 1.10 --- Caching.pod 28 Nov 2004 00:58:00 -0000 1.11 *************** *** 49,52 **** --- 49,100 ---- =back + =head2 Avoiding Side-Effects + + First, you have to ensure that the action producing the content you're + caching has no side-effects. Otherwise the first invocation will work + properly the every subsequent one will fail because it does not + produce the side-effects you're looking for. + + Here are some examples of what we mean by side-effects: + + =over 4 + + =item * + + The action actually modifies an object. (Hopefully this is obvious!) + Because the action never gets run the object will never be modified. + + =item * + + The action increments a counter in a database every time an object is + viewed. Again, the action will never be run so the counter won't be + incremented. + + =item * + + The template used by the action adds a box to the page. Since the + action isn't run the template isn't invoked and the command to add the + box won't be executed. + + =back + + These are poor candidates for caching. You might still be able to + cache the content with creative action observer uses, but you should + tread cautiously and understand what you're doing. + + =head2 Admins: Another Time Not to Cache + + If you're an admin user you frequently see functionality that normal + users do not see: B<Edit> or B<Remove> links next to an object, etc. + You do not want to cache this content, since users shouldn't see this + information. (Normal users modifying the object shouldn't be an issue, + since security should take care of it.) + + As a result, any user defined as an administrator will not view or save + cached content. "Defined as an administrator" means that a call to the + following will return true: + + my $is_admin = CTX->request->auth_is_admin; + =head2 Global Configuration *************** *** 322,338 **** the content will be regenerated anew. ! =head2 When Not to Cache ! If you're an admin user you frequently see functionality that normal ! users do not see: B<Edit> or B<Remove> links next to an object, etc. ! You do not want to cache this content, since users shouldn't see this ! information. (Normal users modifying the object shouldn't be an issue, ! since security should take care of it.) ! As a result, any user defined as an administrator will not view or save ! cached content. "Defined as an administrator" means that a call to the ! following will return true: ! my $is_admin = CTX->request->auth_is_admin; =head1 TEMPLATE CACHING --- 370,392 ---- the content will be regenerated anew. ! =head2 Filtering Cached Content ! As mentioned in L<OpenInteract2::Action> under 'Built-In ! Observations', the base action class filters content B<before> it's ! cached. So when you pull up cached content you're seeing the effects ! of those filters. ! Action observers also have an opportunity to modify or react to cached ! content. Whenever L<OpenInteract2::Action> gets a cache hit it issues ! an observation 'cache hit'. Your observer can listen for this and ! modify the content (since it's passed as a scalar reference) as ! necessary: ! # Translate all upper-case "PERL" references to "Perl" ! sub update { ! my ( $class, $action, $type, $content ) = @_; ! return unless ( $type eq 'cache hit' ); ! $$content =~ s/PERL/Perl/g; ! } =head1 TEMPLATE CACHING |