Dave already replied while I was driving home so some replies maybe short. :)

> I really like the new is_X subs, although in the case of the
No. :)  I agree with Dave.

> i.e. If I have aliased EST to America/New_York, could it return
> "America/New_York" rather than 1?  Both are true so it should be
> equivalent, but being able to get the mapping seems useful.  Although
> if I had EST => US/Eastern, then what should it return?  I argue that
> it should still return America/New_York since that is the base time
> zone.

I was considering a function to do this.  If you look...  I hid a solution in the 
docs. :)

    my $my_alias = %{ DateTime::TimeZone::Alias->aliases }->{ EST };

I didn't want a function named alias and another one named aliases.  But - how about:

Anyways, I'm open to suggestions for a method name.

> Finally I still think that not throwing an error if add()ing a
> duplicate definition makes sense (although I agree that croak()ing is
> the right thing to do).  I would like to be able to do:
>
> --
> my $dta = "DateTime::TimeZone::Alias";
> $dta->add(EST => "US/Eastern");
> ...
> $dta->add(EST => "US/Eastern"); # This should be OK
> $dta->add(EST => "US/Central"); # This should croak
> --

This is specifically why I made the is_N functions public.

    if ( ! DateTime::TimeZone::Alias->is_defined( 'EST' ) ) {
        DateTime::TimeZone::Alias->add( EST => 'US/Eastern' );
    }


IF NOT DEFINED "EST" THEN ADD "EST => 'US/Eastern'".

Self documenting code is highly underrated.

> (In fact an add("America/New_York" should also not die).  My theory
> being that people may have a sanity check in a few places to make sure
> the right TZ mappings are defined.  For instance at work we use Mason
> running in mod_perl under Apache, so the same environment persists
> across different pages.  If one page does the add() I wouldn't want a
> subsequent page to have to jump through hoops to check the definition
> of the alias is correct if doing an equivalent add()...  I don't think
> we lose anything by allowing a subsequent add() to silently be skipped
> if it is the same.

This is largely a design issue.  You could use my above example.  Although I did put a 
warning in the docs after you pointed this
out last time.  Perhaps I should increase the documentation on this.

> One last thing, I just realized that the subs expect to be called as
> class methods.  This is fine unless you want to alias them into your
> package (or accidentally call them like DateTime::TimeZone::Alias::add()).
> The following fails:
> --
> use DateTime::TimeZone::Alias;
> *set_tz = \&DateTime::TimeZone::Alias::set;
> set_tz(EST => "US/Eastern");
> --

See Dave's solution.

> I don't know if it is exactly an error, but it is a little annoying.
> You could "fix" it by checking the argument count but that doesn't
> handle remove()... also it will fail if someone wants to superclass
> this class since add calls set through the class.  I have no idea if
> there is a general solution to this problem, someone must have hit it
> before though.

import also calls the set method.  The only fix for this would break sub-classing.

>    Cool stuff, Nice work!

Thanks.

Sometimes I wonder if English is my first language...

<snip patch>

Thanks again for the good comments.

Cheers,

-J

--

Reply via email to