This is a syntax for a [Here Document](
[To see links please register here]
) (`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`](
[To see links please register here]
) (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.