0Day Forums
What are these strings called? What is squish? Ruby - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Ruby (https://0day.red/Forum-Ruby)
+--- Thread: What are these strings called? What is squish? Ruby (/Thread-What-are-these-strings-called-What-is-squish-Ruby)



What are these strings called? What is squish? Ruby - senior311 - 07-19-2023

I found this code:

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

What is going on here? I assume this is some special kind of string delimiter. What is it called? Is it Ruby specific? What is `squish` doing?


RE: What are these strings called? What is squish? Ruby - absinthe725522 - 07-19-2023

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.


RE: What are these strings called? What is squish? Ruby - philosophizations34541 - 07-19-2023

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

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


[1]:

[To see links please register here]