Skip to content

HTML+ERB

Opening Tags

Script Tag (<%)

erb
<% "String" %>
json
{
  type: "erb-loud",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Expression Tag (<%=)

erb
<%= "String" %>
json
{
  type: "erb-loud",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Raw text output Tag (<%==)

erb
<%== "String" %>
json
{
  type: "erb-loud",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Comment Tag (<%#)

Can also be seen as <% #.

erb
<%# Comment %>
json
{
  type: "erb-comment",
  language: "ruby",
  value: {
    // Prism return value
  }
}

??? Tag (<%-)

erb
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

??? Tag (<%%)

erb
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Closing tags

??? Tag (%>)

erb
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

??? Tag (%%>)

erb
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

??? Tag (-%>)

erb
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Attribute Value interpolation

Interpolate attribute value

erb
<article id="<%= dom_id(article) %>"></article>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Interpolate attribute value with static value

erb
<article class="article <%= classes_for(article) %>"></article>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Attributes Interpolation

Output

erb
<input <%= "type='text' %> />
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Conditional

erb
<input <% if true %> type="text" <% end %> />
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Conditionals

Tag Children

erb
<% if true %>
  <h1><%= "Hello World" %></h1>
<% end %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Loops

Tag Children

erb
<% @posts.each do |post| %>
  <h1><%= post.title %></h1>
<% end %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Blocks

TODO

Rails Tag Helpers

content_tag

erb
<%= content_tag(:p, "Hello world!") %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

tag.<tag name>

erb
<%= tag.div tag.p("Hello world!") %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

tag.<tag name> with block

erb
<%= tag.p do %>
  Hello world!
<% end %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

tag.<tag name> with attributes

erb
<%= tag.section class: ["bg-black text-white"] %>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

tag.attributes

erb
<input <%= tag.attributes(type: :text, aria: { label: "Search" }) %>>
json
{
  type: "erb-???",
  language: "ruby",
  value: {
    // Prism return value
  }
}

Disallowed

We should disallow/discourage the following patterns

Dynamic tag names

erb
<<%= "input" %> required />

Dynamic Attribute names

erb
<input <%= "type" %>="text" />

Released under the MIT License.