Both are supported by ruby-mode with syntax-propertize-function without
too much trouble.
I've just tried this out, looking up some ruby syntax on Wikipedia.
Adapting its example, start out with this in ruby-mode:
#########################################################################
a = <<-BLOCK
This is a double-quoted string
BLCK
BLOCK
b
#########################################################################
Now everything down to and including the second BLOCK has string face.
This seems correct. Delete the O from the first BLOCK, so that the
string is now terminated by BLCK. The second BLOCK still has string
face, although it is no longer in the string. Is this a bug?