Takkun
Takkun

Reputation: 6381

Can I put HTML into a variable?

Using the Sinatra library, I'm trying to condense two functions that display HTML code into a single function. Both these functions differ by only a small amount of HTML. Here's an example.

def make_start_page()
   <<EOS
   <!DOCTYPE html>
   <html lang="en">
   <head>
   </head>
   <body>
      <p> Hello </p>
      <img src="..." />
   </body>
   </html>
   EOS
end

def make_guess_page()
   <<EOS
   <!DOCTYPE html>
   <html lang="en">
   <head>
   </head>
   <body>
      <p> Something different </p>
      <a href="..." >1</a>
   </body>
   </html>
   EOS
end

In the Ruby function that will call these two functions, I was wondering if it is possible to take the small portion of HTML that differs and pass it to a single, condensed version of these two functions that will display the page.

def handle()
   if 1
      var = "<p> Hello </p>
      <img src="..." />"
   elsif 2
      var = "<p> Something different </p>
      <a href="..." >1</a>"
   make_start_guess_page(var)
end

Upvotes: 0

Views: 138

Answers (2)

ksol
ksol

Reputation: 12275

There no reason why you could not do that. However if you want to print it, you'll probably have to use functions like String#html_safe in rails, or != in haml

Upvotes: 1

Ry-
Ry-

Reputation: 225281

You can interpolate variables in heredoc:

def make_start_page(var)
   <<EOS
   <!DOCTYPE html>
   <html lang="en">
   <head>
   </head>
   <body>
      #{var}
   </body>
   </html>
   EOS
end

For example.

Upvotes: 2

Related Questions