Welcome to another edition of This Week in #dev, a series of posts where we bring some of the most interesting Slack conversations to the public.
Measuring Elapsed Time Correctly
Sara Jackson learned about Process::CLOCK_MONOTONIC
. It should be used
instead of system time updates when measuring elapsed time because it ensures
that the measurement is accurate and not affected by system time updates.
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
do_something(args)
end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
puts "Elapsed time: #{end_time - start_time}"
Secret Active Record Methods
Summer ☀️ shares a cool Active Record feature: using !
query methods to modify
a query object in place instead of returning a new one. Let’s use distinct!
as
an example:
# distinct! modifies the current query object, while distinct creates a new query object:
my_query = User.all
my_query.distinct!
my_query.to_sql
#=> "SELECT DISTINCT \"users\".* FROM \"users\""
my_query = User.all
my_other_query = my_query.distinct
my_query.to_sql
#=> "SELECT \"users\".* FROM \"users\""
my_other_query.to_sql
#=> "SELECT DISTINCT \"users\".* FROM \"users\""
In fact, distinct
is implemented by calling something similar to
self.dup.distinct!
, Summer ☀️ adds. This kind of pattern also exists for other
Active Record query methods like where
/where!
, order
/order!
,
joins
/joins!
, etc.
Thanks
This edition was brought to you by: Sara Jackson, Sean Doyle and Summer ☀️. Thanks to all contributors! 🎉