handle non-lazy default and builder when init_arg is undef
authorMatt S Trout <mst@shadowcat.co.uk>
Fri, 25 Feb 2011 15:54:08 +0000 (15:54 +0000)
committerMatt S Trout <mst@shadowcat.co.uk>
Fri, 25 Feb 2011 16:14:32 +0000 (16:14 +0000)
commitd02da2bc41a7f450a64ef79a571a889e73f690d6
treeed09b7df45e269f35ed92e4e26b2f0d380dbdbc6
parent941a6305f15e607de118d0b74c11f67ff1e39d24
handle non-lazy default and builder when init_arg is undef

We were skipping attributes entirely in new if there's no init_arg, but
this is not correct - given a non-lazy default or builder the attribute
should be initialized during new().

To handle this, I've re-ordered the checks slightly in Constructor.pm to
do the "is_simple" check first - an attribute with a default or builder
will fail that check, then we skip anyway if no init_arg and no default
or builder (yes, this is hardcoded-ish, but in that case we're definitely
not constructing anything so far as I can see). default and builder are
disregarded if lazy so as not to try and populate pure-lazy attributes.

Accessor also needed tweaking so it could handle the concept of a thing to
build without an init_arg to populate from. This only needs to happen in
one branch since the other branch is for "no default or builder" and thus
never reached.
Changes
lib/Method/Generate/Accessor.pm
lib/Method/Generate/Constructor.pm
t/accessor-default.t