What are these strings called? What is squish? Ruby What are these strings called? What is squish? Ruby ruby-on-rails ruby-on-rails

What are these strings called? What is squish? Ruby


This is a syntax for a Here Document (HereDoc), which is a multiline string in Ruby.

For example, this:

sql = <<-SQL        UPDATE #{klass.constantize.table_name}           SET uuid = uuid_generate_v4(), updated_at = now()         WHERE id IN (#{group.map(&:id).join(',')})           AND uuid IS NULL      SQL

Will give you an sql string variable whose value is literally:

         UPDATE #{klass.constantize.table_name}           SET uuid = uuid_generate_v4(), updated_at = now()         WHERE id IN (#{group.map(&:id).join(',')})           AND uuid IS NULL

with all the spaces and newlines preserved.

From the HereDoc docs:

To call a method on a heredoc place it after the opening identifier

A popular usage of that quote is when you have a long string and you don't want to write it on a single line, and hence use a HereDoc for it, but you still don't want to keep all the newline characters and white spaces that the HereDoc preserves, in which case you can just call squish (which is a method added by Rails) to remove them. For example, this:

sql = <<-SQL.squish        UPDATE #{klass.constantize.table_name}           SET uuid = uuid_generate_v4(), updated_at = now()         WHERE id IN (#{group.map(&:id).join(',')})           AND uuid IS NULL      SQL

Will give you an sql string variable whose value is literally:

UPDATE #{klass.constantize.table_name} SET uuid = uuid_generate_v4(), updated_at = now() WHERE id IN (#{group.map(&:id).join(',')}) AND uuid IS NULL

With all consequent newline characters and spaces squished into one whitespace.


String#squish comes from Rails and means that resulting inline string is without multiple \n and \s.From docs:

Returns the string, first removing all whitespace on both ends of the string, and then changing remaining consecutive whitespace groups into one space each.