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.