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] |