I think you're out of luck, if you want to support 1.8 then you have to use =>
. As usual, I will mention that you must use =>
in certain cases in 1.9:
- If the key is not a symbol. Remember that any object (symbols, strings, classes, floats, ...) can be a key in a Ruby Hash.
- If you need a symbol that you'd quote:
:'this.that'
.
- If you use MongoDB for pretty much anything you'll be using things like
:$set => hash
but $set: hash
is a syntax error.
Back to our regularly scheduled programming.
Why do I say that you're out of luck? The Hash literal syntaxes (both of them) are hard-wired in the parser and I don't think you're going to have much luck patching the parser from your gem. Ruby 1.8.7's parse.y
has this to say:
assoc : arg_value tASSOC arg_value
{
$$ = list_append(NEW_LIST($1), $3);
}
;
and tASSOC
is =>
so hash literals are hard-wired to use =>
. 1.9.3's says this:
assoc : arg_value tASSOC arg_value
{
/*%%%*/
$$ = list_append(NEW_LIST($1), $3);
/*%
$$ = dispatch2(assoc_new, $1, $3);
%*/
}
| tLABEL arg_value
{
/*%%%*/
$$ = list_append(NEW_LIST(NEW_LIT(ID2SYM($1))), $2);
/*%
$$ = dispatch2(assoc_new, $1, $2);
%*/
}
;
We have the fat-arrow syntax again (arg_value tASSOC arg_value
) and the JavaScript style (tLABEL arg_value
); AFAIK, tLABEL
is also the source of the restrictions on what sorts of symbols (no :$set
, no :'this.that'
, ...) can be used with the JavaScript-style syntax. The current trunk parse.y
matches 1.9.3 for Hash literals.
So the Hash literal syntax is hard-wired into the parser and you're stuck with fat arrows if you want to support 1.8.