Do End Your Braces

Braces and do/end are completely swappable—almost all the time. They have different precedence. It’s not often that anyone comes across what this means in practice.

In shoulda, these do different things:

should redirect_to('#edit') { article_edit_path(@article) }
should redirect_to('#edit') do

To get a better grasp on the differences, consider these two simple methods:

def outer(inner, &block)
  inner'outer') if block_given?

def inner(&block)'inner') if block_given?

Here outer is analogous to should and inner to redirect_to. Instead of having any real logic, though, they call a block with what they are. In practice:

outer inner {|where| puts "#{where} called me"}

# "inner called me"

outer inner do |where|
  puts "#{where} called me"

# "outer called me"

Mike Burns

Sharpen your programming skills by completing coding exercises that are reviewed by other developers at Upcase today.