Skip to content
This repository has been archived by the owner on Mar 22, 2020. It is now read-only.

mgrachev/dom_for

Repository files navigation

DomFor

Helper for creating HTML wrappers ActiveRecord objects

Gem Version Build Status Coverage Status Code Climate Dependency Status Inline docs

Installation

Add this line to your application's Gemfile:

gem 'dom_for'

And then execute:

$ bundle

Or install it yourself as:

$ gem install dom_for

Usage

By default the helper dom_for creates tag div. But it can override, passing an additional argument tag: :span, for example:

<%# /app/views/users/index.html.erb %>
<%= dom_for User, class: 'customers', attribute_1: 'value_1', attribute_2: 'value_2', attribute_3: 'value_3' do %>
  <% @users.each do |user| %>
    <%= dom_for user, tag: :p, admin: user.admin, blocked: user.blocked do %>
      <%= content_tag(:span, user.name) %>
    <% end %>
  <% end %>
<% end %>
<div id="users" class="users customers" data-action="index" data-attribute-1="value_1" data-attribute-2="value_2" data-attribute-3="value_3">
  <p id="user_1" class="user" data-admin="true" data-blocked="false" data-object-id="1">
    <span>Mikhail</span>
  </div>
  <p id="user_2" class="user" data-admin="false" data-blocked="false" data-object-id="2">
    <span>Yulia</span>
  </div>
</div>

The first argument can be used as a model ActiveRecord:

<%# /app/views/users/index.html.erb %>
<%= dom_for User do %>
  <%= tag(:span) %>
<% end %>
<div id="users" class="users" data-action="index">
  <span />
</div>

And record ActiveRecord:

<%# /app/views/users/show.html.erb %>
<%= dom_for @user do %>
  <%= tag(:span) %>
<% end %>
<div id="user_1" class="user" data-action="show" data-object-id="1" />
  <span />
</div>

The second argument passed to additional html-attributes (is optional):

<%# /app/views/users/index.html.erb %>
<%= dom_for User class: 'clients', attribute_1: 'value_1', attribute_2: 'value_2' do %>
  <%= tag(:span) %>
<% end %>
<div id="users" class="users clients" data-action="index" data-attribute-1="value_1" data-attribute-2="value_2">
  <span />
</div>

The third argument, the helper dom_for, takes a block of code that will be wrapped in the tag <div> (is optional):

<%# /app/views/users/index.html.erb %>
<%= dom_for User, tag: :span %>
<span id="users" class="users" data-action="index" />

When defined instance variable with class name, the helper dom_for creates the additional html-attributes for this object:

<%# /app/views/users/show.html.erb %>
<% @user = User.last %>
<%= dom_for User do %>
  <%= tag(:span) %>
<% end %>
<div id="user_1" class="user" data-action="show" data-object-id="1" data-object="users">
  <span />
</div>

For each request, the helper dom_for creates additional attribute data-action, which will be equal to the method of the controller handling the request:

<%# /app/views/users/index.html.erb %>
<%= dom_for User do %>
  <%= tag(:span) %>
<% end %>
<div id="users" class="users" data-action="index">
  <span />
</div>

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request