baby_squeel icon indicating copy to clipboard operation
baby_squeel copied to clipboard

Support `.nil?` in DSL

Open pelletencate opened this issue 6 years ago • 4 comments

Right now, in order to check if something IS NULL, I have to use field == nil in the DSL. Wouldn't it be more ruby-esque to be able to say field.nil? instead?

pelletencate avatar May 15 '18 18:05 pelletencate

Hmm... sort of, but this feels pretty like it would cause unexpected problems that would be really hard to figure out what went wrong. Plus, then we'd have to support !field.nil? to produce an IS NOT NULL query.

I would rather add is_null(field) and is_not_null(field)

rzane avatar May 15 '18 19:05 rzane

One problem with field == nil is that RuboCop keeps trying to replace it with .nil? !

chewi avatar Jun 05 '18 15:06 chewi

Yeah, the initial reason why I proposed this change was Rubocop complaining. I feel kinda stupid not thinking about !field.nil?, that's a more legit concern than whatever I have.

tbh, is_null or is_not_null, while it would please rubocop, would in my opinion be a step in the wrong direction. A better thing would be to have @bbatsov et al join in, to think about the possibility to provide a custom rubocop plug with your gem, or – more generally – if there's anything that would help accommodate cases (a/o DSL) where the == operator gets overloaded.

Besides, Rubocop also complains about == 0. And making an is_zero?(field) and is_not_zero?(field), would be even more unnecessary.

pelletencate avatar Sep 23 '18 18:09 pelletencate

One problem with field == nil is that RuboCop keeps trying to replace it with .nil? !

That's configurable. :) Obviously a static analyzer can't really figure out that something might be a special DSL. I think in such situations you can just exclude the DSL files from the checks and be done with it.

bbatsov avatar Sep 23 '18 19:09 bbatsov