Tap If

Install / Use

In your Gemfile add: gem 'tap_if'
Then run bundle install.
Add require 'tap_if' before you use it.

Examples

Delegates to Object#tap if the caller is truthy or given the method name + args evaluate to a truthy value. Useful for clarity - always return the caller but only execute the block when the condition passes.

# Update the user's account token if the user is an admin of the account.

User.find(user_id).tap_if(:admin?, ) do |user|
  user.update_token()
end

# Only update twitter/facebook if the post actually publishes.

def publish
  (post.pending? && post.update_attributes(:published => true)).tap_if do
    the_update = "New blog post: #{post.title[0..100]}... #{post.link}"

    Twitter.update(the_update)
    Facebook.update(the_update)
  end
end

The Motivation

I found myself assigning a variable and doing something to it if a condition passed. This pattern leaves dangling ifs on the end of lines and is simply less clear than code that will execute if the line is reached.

# I found myself doing (a contrived version):

user = User.where(:email => email).first
user.update_attributes(:status => "active") if user.present? && user.admin?

#But now I can do:

User.where(:email => email).first.tap_if(:admin?) do |user|
  user.update_attributes(:status => "active")
end

# In essence we always update the user assuming we get there.

License

License: MIT-LICENSE (LICENSE.md)