Sha256: bbce93100fbe8ff681dc7596e474484cec10c48872a46bad5ee2df3283aea9bd

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module SimpleTableFor
  module Helpers
    # Creates a table field
    # See table for details
    def field(content, options = {})
      content_tag :td, content, id: options[:id], class: options[:class]
    end

    # Creates a table
    # Usage:
    #   <%= table_for @posts, %w[Title Text Date Comments\ count -] do |post| %>
    #     <%= field post.title %>
    #     <%= field post.text %>
    #     <%= field post.date %>
    #     <%= field post.comments.count %>
    #     <%= field link_to('View', post) %>
    #   <% end %>
    def table_for(collection, headers, options = {})
      options = Defaults.get.merge options

      content_tag :table, id: options[:id], class: options[:class] do
        concat (content_tag :thead do
          content_tag :tr do
            headers.map do |header|
              concat(content_tag :th, header)
            end
          end
        end)

        concat (content_tag :tbody do
          collection.map do |obj|
            concat (content_tag :tr do
              capture{ yield obj }
            end)
          end
        end)
      end
    end
  end

  # This class handles the default options
  class Defaults
    # Get de default options
    def self.get
      @defaults || defaults
    end

    # Set the default options
    #   SimpleTableFor::Defaults.set id: 'id', class: 'class'
    def self.set(options)
      @defaults = defaults.merge options
    end

    private
      def self.defaults
        {id: '', class: ''}
      end
  end
end

ActionView::Base.send :include, SimpleTableFor::Helpers if defined? ActionView::Base

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_table_for-0.1.1 lib/simple_table_for.rb