I guess I was not clear enough. This option does indeed exist in 1.7. I just wanted to make sure it does not get dropped in 2.0 as part of the cleanup work.
Alex On Mon, Jan 30, 2017 at 4:04 PM, Nathan Bubna <nbu...@gmail.com> wrote: > On Mon, Jan 30, 2017 at 12:51 PM, Nathan Bubna <nbu...@gmail.com> wrote: > > > On Sat, Jan 28, 2017 at 11:23 AM, Alex Fedotov <a...@kayak.com> wrote: > > > >> You guys should definitely leave a way of disabling the toString() > >> conversion in boolean expressions. > >> > > > > Seems reasonable, and also familiar; this may have been discussed before. > > > > Oh, yes, and built. I knew this was familiar. :) > > See http://velocity.apache.org/engine/2.0/configuration.html : > > directive.if.tostring.nullcheck = true > > > > > >> There are many places where people do null checks if #if($obj)...#end. > >> > >> Classes almost never return an empty string or null string from the > >> toString call. Even worse some classes may use toString for debugging > >> purposes and produce very long strings (including nested objects, > etc.). > >> In the code above that would be a huge inefficiency. > >> > > > > Yes, that's part of the motive to have this lookup chain. If there's a > > match higher up, toString() is avoided. Big deal for maps and arrays. > > > > > >> > >> Alex > >> > >> On Sat, Jan 28, 2017 at 2:06 PM, Nathan Bubna <nbu...@gmail.com> wrote: > >> > >> > Shame that i can't remember anymore all my reasons for wanting those > >> > "getAs<Type>" lookups. Wondering why getAsNumber and getAsBoolean are > >> here > >> > too. Anyone else recall the use case? And assuming that i had good > >> reason > >> > (that did happen sometimes <grin>), i wonder why i pushed for bucking > >> the > >> > "to<Type>()" convention. > >> > > >> > As for the literals, the thought of them being used in #if statements > >> in a > >> > template language is cringe-inducing. What's the use-case? Temporary > >> > debugging hacks? If so, part of me thinks maybe only 'true' should > even > >> be > >> > allowed. > >> > > >> > On Sat, Jan 28, 2017 at 7:15 AM, Claude Brisson <cla...@renegat.net> > >> > wrote: > >> > > >> > > > >> > > > >> > >>>> What is the problem? > >> > >>>> > >> > >>>> Velocity "truthiness": > >> > >>> https://issues.apache.org/jira/browse/VELOCITY-692 > >> > >>> > >> > >>> It should definitely be part of 2.0. I missed it because the issue > >> was > >> > >>> closed, we should have opened a 2.0 one to remember it. > >> > >>> > >> > >> > >> > >> Thats's the problem if a closed/resolved issue does not have an > >> > >> assignee. You never know who handled it without reading the entire > >> > >> thread. A ticket should always have an assignee if code has been > >> > changed. > >> > >> > >> > >> > >> > > Here's what had been specified by Nathan at the time (order is > >> > meaningful, > >> > > and falseness seems easier to specify than truth): > >> > > > >> > > $obj is null > >> > > $obj is boolean false > >> > > $obj returns false from getAsBoolean() (provided there is such a > >> method) > >> > > $obj is empty string (CharSequence w/length 0) > >> > > $obj returns true from isEmpty() (provided there is such a method) > >> > > $obj is array of length 0 > >> > > $obj returns null from getAsString() (provided there is such a > method) > >> > > $obj returns empty string from getAsString() (provided there is > such a > >> > > method) > >> > > $obj returns null from getAsNumber() (provided there is such a > method) > >> > > $obj returns 0 from length() or size() (provided there is such a > >> method) > >> > > $obj returns empty string from toString() (provided there is such a > >> > method) > >> > > > >> > > Regarding this spec: > >> > > - I'm not sure about getAsString() ; toString() is usually the > >> standard > >> > > way of getting the String representation and should be enough. > >> > > - I'm not convinced by the fact that zero should be true. I hear > >> > Nathan's > >> > > point that for a display language, zero is as legitimate as any > other > >> > > number to be displayed. But it breaks the principle of least > surprise, > >> > > since each and every other language around, when not forbidding > number > >> > > towards boolean implicit conversion, consider zero as false. > >> > > > >> > > So I'd rather go with: > >> > > > >> > > $obj is null > >> > > $obj is Boolean false > >> > > $obj is Number zero (whatever Number variant) > >> > > $obj returns false from getAsBoolean() (provided there is such a > >> method) > >> > > $obj is empty string (CharSequence w/length 0) > >> > > $obj returns true from isEmpty() (provided there is such a method) > >> > > $obj is array of length 0 > >> > > $obj returns null from getAsNumber() (provided there is such a > method) > >> > > $obj returns 0 from length() or size() (provided there is such a > >> method) > >> > > $obj returns empty string from toString() (provided there is such a > >> > method) > >> > > > >> > > Also, I noticed that Velocity weren't very consistent with literals. > >> The > >> > > only literal returning true is the 'true' literal. "foo" is false, > >> > whereas > >> > > it should be consistent with $foo containing "foo". > >> > > > >> > > Claude > >> > > > >> > > > >> > > ------------------------------------------------------------ > --------- > >> > > To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org > >> > > For additional commands, e-mail: dev-h...@velocity.apache.org > >> > > > >> > > > >> > > >> > > > > >