Hey Cory --

> My Hero.  This new method is great!

Hehe...  I'm glad you like it.


I apologize for replying on-list, but having just released 2.3, I'm about to
suggest something which may very well necessitate a 2.4 release tonight,
before anything important is built on top of 2.3.

The cgiapp_prerun() provides an important hook, but it is still a bit
limited.  One thing it does not yet do is provide a facility through which
you can modify the run-mode.  After I made the release, it occurred to me
that changing the run-mode based on some other logic would be useful.  That
might allow you to put a dynamic switch in-line which is triggered based on
some other logic.  For instance (to modify my earlier example):


   sub cgiapp_prerun {
      my $self = shift;
      my $run_mode = shift;

      unless ($self->is_user_allowed($run_mode)) {
         return "show_login_form";
      }

      return $run_mode;
   }


This is a pretty different interface from the cgiapp_prerun() in 2.3.  I'm a
bit nervous about using return values because failure to return the run-mode
would totally break the app.  (Maybe that's OK?)  This raises the bar a bit
for anyone who would like to use cgiapp_prerun() for adding a behavior which
would NOT change the run-mode.  (Now, they HAVE to return the run-mode, or
else!)

Two other possible interfaces are using a special param, 'CGIAPP_RUNMODE',
or using a scalar-ref.

The param interface might look like this:

   sub cgiapp_prerun {
      my $self = shift;
      my $run_mode = shift;

      unless ($self->is_user_allowed($run_mode)) {
         $self->param("CGIAPP_RUNMODE" => "show_login_form");
      }
   }

The problem here is that this "special param" would only have an effect if
changed in the cgiapp_prerun() method.  While you *could* change it
anywhere, only in cgiapp_prerun() will it actually change what run-mode is
called.  Kind of deceptive and confusing.


The scalar-ref interface might look like this:

   sub cgiapp_prerun {
      my $self = shift;
      my $ref_run_mode = shift;

      unless ($self->is_user_allowed($$ref_run_mode)) {
         $$ref_run_mode = "show_login_form";
      }
   }

The upside of this is that it doesn't put the onus on every developer to
return a run-mode even if they are not changing it.  The problem is
two-fold:  First, the current interface already is documented as passing in
a scalar -- not a scalar-ref.  (Since the release was just made today, this
is probably not a big deal since no code was yet written to use a scalar.)
The second problem is that scalar-refs, like all refs, are thorny to work
with.  Most Perl programmers are uncomfortable with this type of "C-style"
interface.


So, it's decision time!

First off:  Is being able to change the run-mode as important as I suspect
it is?  If not, no further changes are required.

If changing the run-mode is important (as I suspect it is), than what
interface suits the list members best?  We have three options:

  1. Return run-mode value
  2. Set special param, 'CGIAPP_RUNMODE'
  3. Modify scalar-ref


I'm inclined to use the return-value method, but what do y'all think?


TTYL,

-Jesse-



  Jesse Erlbaum, CTO
  Vanguard Media
  http://www.vm.com
  212.242.5317 x115
  [EMAIL PROTECTED]



---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/cgiapp@lists.vm.com/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to