Module: Listify::Helper

Defined in:
lib/listify.rb

Instance Method Summary collapse

Instance Method Details

#listify(collection, options = {}) ⇒ Object

Generate an HTML list from a ruby collection

Examples:

Simple List

listify( ['first item', 'second item', 'third item'], class: 'parts-list' )
=> "<ul class='parts-list'>
     <li>first item</li>
     <li>second item</li>
     <li>third item</li>
   </ul>"

Nested List

listify( {'First Category' => ['item one', 'item two'], 'Second Category' => ['item three', 'item four'] } )
  => "<ul>
        <li>First Category
          <ul>
            <li>item one</li>
            <li>item two</li>
          </ul>
        </li>
      <li>Second Category
        <ul>
          <li>item three</li>
          <li>item four</li>
        </ul>
      </li>
    </ul>"

Multiple Column List

listify( ['first item', 'second item', 'third item', 'fourth item', 'fifth item'], columns: 2 )
=> "<ul>
     <li>first item</li>
     <li>second item</li>
   </ul>
   <ul>
     <li>third item</li>
     <li>fourth item</li>
     <li>fifth item</li>
   </ul>"

Parameters:

  • collection (Array, Hash{sublist_name => sublist[Array, Hash]})

    the collection to render as a list

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :class (String)

    HTML class to apply to the <ul> elements

  • :columns (Integer) — default: 1

    When specified, break list into multiple lists. Breaks will occur at top level only if list is nested. Not supported for lists nested more than one level deep.

Returns:

  • ActiveSupport::SafeBuffer



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/listify.rb', line 50

def listify(collection, options = {})
  number_of_columns = options.fetch(:columns, 1)

  if number_of_columns > 1
    options.delete(:columns)
    columnizer = Columnizer.new(collection, number_of_columns)

    elements = []
    (1..number_of_columns).each do |column|
      items_for_column = columnizer.items_for_column(column)
      next if items_for_column.empty?
      column_element =  :ul, options do
        list_items_for(items_for_column)
      end
      elements << column_element
    end


    return elements.inject(:+)

  else
     :ul, options do
      list_items_for(collection)
    end
  end

end