public Method

TextHelper.cycle(first_value, *values)

Creates a Cycle object whose to_s method cycles through elements of an array every time it is called. This can be used for example, to alternate classes for table rows. You can use named cycles to allow nesting in loops. Passing a Hash as the last parameter with a :name key will create a named cycle. You can manually reset a cycle by calling reset_cycle and passing the name of the cycle.

Examples

 # Alternate CSS classes for even and odd numbers...
 @items = [1,2,3,4]
 <table>
 <% @items.each do |item| %>
   <tr class="<%= cycle("even", "odd") -%>">
     <td>item</td>

 <% end %>
 </table>

 # Cycle CSS classes for rows, and text colors for values within each row
 @items = x = [{:first => 'Robert', :middle => 'Daniel', :last => 'James'},
              {:first => 'Emily', :middle => 'Shannon', :maiden => 'Pike', :last => 'Hicks'},
             {:first => 'June', :middle => 'Dae', :last => 'Jones'}]
 <% @items.each do |item| %>
   <tr class="<%= cycle("even", "odd", :name => "row_class") -%>">
     <td>
       <% item.values.each do |value| %>
         <%# Create a named cycle "colors" %>
         <span style="color:<%= cycle("red", "green", "blue", :name => "colors") -%>">
           <%= value %>

       <% end %>
       <% reset_cycle("colors") %>
     </td>

<% end %>

Source Code

# File action_view/helpers/text_helper.rb, line 384
def cycle(first_value, *values)
  if (values.last.instance_of? Hash)
    params = values.pop
    name = params[:name]
  else
    name = "default"
  end
  values.unshift(first_value)

  cycle = get_cycle(name)
  if (cycle.nil? || cycle.values != values)
    cycle = set_cycle(name, Cycle.new(*values))
  end
  return cycle.to_s
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.