I have a couple of comments below...

On Sun, Nov 30, 2008 at 7:02 PM, Mark Stosberg <[EMAIL PROTECTED]> wrote:

>
> HTML::Template currently supports 4 formats for the input file, with three
> different APIs
> to specify it:
>
>  First:
>   new( filename   => $f, ... );
>   new( scalarref  => $f, ... );
>   new( arrayref   => $f, ... );
>   new( filehandle => $f, ... );
>
>  Second:
>   new_file($f, ... );
>   new_scalar_ref($f, ... );
>   new_array_ref($f, ... );
>   new_filehandle($f, ... );
>
>  Third:
>   new(type => 'filename'  , source => $f, ...);
>   new(type => 'scalarref' , source => $f, ...);
>   new(type => 'arrayref'  , source => $f, ...);
>   new(type => 'filehandle', source => $f, ...);
>
> ###
>
> I find these more verbose and confusing than it needs to be. Beecause the
> second option provides alternate spellings for 3 out of 4 options, it's
> hard to
> ever get the spelling right without consulting the docs.
>

First, I'd like to see alternatives for the unfortunately misspelled :-)
methods:

new_filename()
new_scalarref()
new_arrayref()

Since those are practically one-liners anyway, a few additions ought not be
a big deal.



>
> I would like to contribute a patch that cleans all this up to this:
>
>  new(source => $filehandle);
>  new(source => $filename);
>  new(source => $scalarref);
>  new(source => $arrayref);
>
> Since we can detect the difference between a string, a scalarref, an
> arrayref
> and a filehandle, we don't need to user to repeat this information for us.
> It
> can "just work". The auto-detection logic would come into play if "source"
> is
> specified, but 'type' is not.
>
> HTML::FillInForm had a similar interface and is a precendent for this kind
> of API overhaul.
> You can see their old API:
>
>
> http://search.cpan.org/~tjmather/HTML-FillInForm-2.00/lib/HTML/FillInForm.pm#Old_syntax<http://search.cpan.org/%7Etjmather/HTML-FillInForm-2.00/lib/HTML/FillInForm.pm#Old_syntax>
>
> And the new API:
>
>
> http://search.cpan.org/~tjmather/HTML-FillInForm-2.00/lib/HTML/FillInForm.pm#SYNOPSIS<http://search.cpan.org/%7Etjmather/HTML-FillInForm-2.00/lib/HTML/FillInForm.pm#SYNOPSIS>
>
> The attach patch includes working code and tests which head in this
> direction,
> but it is not complete. (The current patch auto-detects the first arg,
> instead of
> the value for 'source').
>
> The final patch would update the docs to highlight the simpler new syntax
> and
> de-emphasize the other interfaces (The same approach used by
> HTML::FillInForm).
> This would simplify things for new users, while users migrating from older
> versions would still find the reference docs for the older APIs.
>
> Before proceeding further, I wanted to get some feedback about heading in
> this
> direction.
>

I think this is an okay idea.  But I'm leery of the technique of shoehorning
alternative syntax over existing syntax the way your patch seems to imply.

Instead, I would look at this spot in the code:

  # handle the "type", "source" parameter format (does anyone use it?)
  if (exists($options->{type})) {
    exists($options->{source}) or croak("HTML::Template->new() called
with 'type' parameter set, but no 'source'!");
    ($options->{type} eq 'filename' or $options->{type} eq 'scalarref' or
     $options->{type} eq 'arrayref' or $options->{type} eq 'filehandle') or
       croak("HTML::Template->new() : type parameter must be set to
'filename', 'arrayref', 'scalarref' or 'filehandle'!");

    $options->{$options->{type}} = $options->{source};
    delete $options->{type};
    delete $options->{source};
  }

It looks like this is the only place that needs to change.

Finally, at least one other package, HTML::Template::Compiled, may
also benefit from these API changes.

Regards,

Brad
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Html-template-users mailing list
Html-template-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/html-template-users

Reply via email to