
Security News
Open Source Maintainers Feeling the Weight of the EU’s Cyber Resilience Act
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
thoughtbot-sortable_table
Advanced tools
h1. Sortable Table
Sort HTML tables in your Rails app.
h2. Install
script/plugin install git://github.com/thoughtbot/sortable_table.git
In app/controllers/application_controller.rb:
class ApplicationController < ActionController::Base
include SortableTable::App::Controllers::ApplicationController
end
In app/helpers/application_helper.rb:
module ApplicationHelper
include SortableTable::App::Helpers::ApplicationHelper
end
h2. Testing
context "enough Users to sort" do
setup do
5.times { Factory :user }
end
should_sort_by_attributes :name, :email, :age, :group => "groups.name"
context "GET to #index" do
setup { get :index }
should_display_sortable_table_header_for :name, :email, :age, :group
end
end
This is the common case for a RESTful UsersController.
h2. Controller
class UsersController < Admin::BaseController
sortable_attributes :name, :email, :age, :group => "groups.name"
def index
@users = User.paginate :page => params[:page], :order => sort_order
end
end
sortable_attributes defines a sort_order method that gets called in your action.
If the index action is rendered without a params[:sort] option, @users will be sorted by :name, the first option in the list of sortable_attributes.
h2. View
Users
<%= sortable_table_header :name => "Name", :sort => "name" %>
<%= sortable_table_header :name => "Email", :sort => "email" %>
<%= sortable_table_header :name => "Age", :sort => "age" %>
<%= sortable_table_header :name => "Group", :sort => "group" %>
<% @users.each do |user| %>
<% end %>
<%= html_escape(user.name) %> <%= html_escape(user.email) %> <%= html_escape(user.age) %> <%= html_escape(user.group.name) %>
sortable_table_header creates a table header containing a link with the correct :sort and :order params. It also has a class of "ascending" or "descending" so you can add styles with arrows. You can add your own styles as well.
h2. Example styles
th.ascending a {
background: url(/images/sort-ascending-arrow.gif) 0% 50% no-repeat;
padding-left: 15px;
}
th.descending a {
background: url(/images/sort-descending-arrow.gif) 0% 50% no-repeat;
padding-left: 15px;
}
h2. Overriding defaults
h3. should_sort_by_attributes
Opinionated defaults:
If you need to test another action (or a nested controller), pass a block:
should_sort_by_attributes :age do |sort, order|
get :show, :sort => sort, :order => order, :group_id => @group.id
end
If you need to test another collection or model name, use should_sort_by.
h3. should_sort_by
The :collection, :model_name, and :action options of should_sort_by.
context "with a non-standard collection name" do
action = lambda { |sort, order| get :members, :sort => sort, :order => order }
should_sort_by :name, { :collection => "members",
:model_name => "user",
:action => action } do |user|
user.name
end
end
h3. sort_order
The default sort order is descending. This applies to the first time you click on a table header. You can override this to be ascending:
def index
@users = User.find :all, :order => sort_order("ascending")
end
Dan Croak, Joe Ferris, Jason Morrison and Boston.rb.
Copyright (c) 2008 Dan Croak, released under the MIT license
FAQs
Unknown package
We found that thoughtbot-sortable_table demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The EU Cyber Resilience Act is prompting compliance requests that open source maintainers may not be obligated or equipped to handle.
Security News
Crates.io adds Trusted Publishing support, enabling secure GitHub Actions-based crate releases without long-lived API tokens.
Research
/Security News
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.