Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Ruby
tree: 1f7deb0765

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.document
.gitignore
LICENSE
README.textile
Rakefile
VERSION
totally_tabular.gemspec

README.textile

Totally Tabular!

Assuming I have 5 people with:
  • first_name
  • last_name
  • registration_status
My pointy-haired boss wants to see a list of these people on our administrative dashboard. Sure, I could write some ugly ERB like so:
  
    <table class="people">
      <thead>
      <tr>
        <th class="header">First Name</th>
        <th>Last Name</th>
        <th>Registration Status</th>
      </tr>
      </thead>
      <tbody>
      <% @people.each do |person| %>
        <tr class="<%= person.registration_status %>">
          <td>Michael Bluth</td>
          <td>Bluth</td>
          <td>
            <% if person.registered? %>
              <strong>Registered</strong>
            <% else %>
              <em>Unregistered</em>
            <% end %>
        </tr>
      <% end %>
      </tbody>
    </table>
  
But why? I mean, we’re using Ruby for Pete’s sake! How about a cleaner way to do the same thing?
  
    <%= person_table(people_presenter.people, :class => 'people') %>
  
Okay, so that’s just a custom Rails helper method. Nothing special. But let’s look at the definition of the helper method! That’s where the special sauce is.
  
    def person_table(people, attributes={})
      TableView.new(@people, :class => 'people') do
        define_column("First Name") do |person|
          header_attributes!(:class => 'header')
          row_attributes!(:class => person.registration_status)
          template! do
            person.first_name
          end
        end
        define_column("Last Name") do |person|
          template! do
            person.last_name
          end
        end
        define_column("Registration Status") do |person|
          template! do
            if person.registered?
              content_tag(:strong, "Registered")
            else
              content_tag(:em, "Unregistered")
            end
          end
        end
      end
    end
  
Something went wrong with that request. Please try again.