I think the most natural way read the code created_at < 10.minutes.ago is 
"created_at is less than ten minutes ago," but that reading suggests the 
mistaken interpretation that created_at is *fewer than ten* minutes ago. 
The correct interpretation is that created_at is *earlier than* ten minutes 
ago. Is there a better way to write the same comparison?

I've thought of three potential improvements so far:

   - 10.minutes.ago > created_at  This "Yoda condition" style doesn't have 
   a translation into ordinary English that tempts you into misunderstanding. 
   But Yoda conditions are inconsistent with the rest of the comparisons in my 
   codebase.
   - Time.now > 10.minutes.after(created_at)  This is another style of Yoda 
   condition. This one allows people who misread the operator (as "more than 
   ten minutes after created_at" instead of "later than ten minutes after 
   created_at") to correctly predict the actual behavior, but for the wrong 
   reason.
   - created_at.earlier_than?(10.minutes.ago)  The ordinary English 
   translation (created_at is earlier than ten minutes ago) is correct. But 
   this requires monkeypatching DateTime (or using the human_time gem) to add 
   the earlier_than? method, which I'd prefer not to do.

Is there a better way that avoids Yoda conditionals, monkeypatching and 
extra gems?

Thanks for the consideration,
Nate

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/b8058e08-6513-4979-b171-3721035464ec%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to