Conditional chaining of methods
Problem
I have seen the following pattern repeatedly:
institution_users =
  if params[:is_internal]
    User.
      for_institution(some_id).
      only_name_and_email.
      internal_only
  else
    User.
      for_institution(some_id).
      only_name_and_email.
      external_only
  endIt is quite unreadable as you end up reading the same code twice, wondering as there is any difference between method chains...
Solution
Instead consider the following:
users_for_institution = lambda {
  User.
    for_institution(some_id).
    only_name_and_email
}
institution_users =
  if params[:is_internal]
    users_for_institution.call.internal_only
  else
    users_for_institution.call.external_only
  endOf course you can also nest more methods chains:
users_for_institution = lambda { |some_id|
  User.
    for_institution(some_id).
    only_name_and_email
}
internal_users = lambda {
  users_for_institution.
    call(123).
    internal_only
}
internal_users.call.sorted # only one DB queryConclusion
The presented technique is fairly basic.
Sometimes it make the code more efficient (avoids hitting DB multiple times).
The biggest benefit I see here is that it removes the unnecessary code duplication (DRY).
Written by Daniel Kosalla
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
 #Ruby 
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#

 
 
 
 
