
Security News
NIST Under Federal Audit for NVD Processing Backlog and Delays
As vulnerability data bottlenecks grow, the federal government is formally investigating NIST’s handling of the National Vulnerability Database.
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
As vulnerability data bottlenecks grow, the federal government is formally investigating NIST’s handling of the National Vulnerability Database.
Research
Security News
Socket’s Threat Research Team has uncovered 60 npm packages using post-install scripts to silently exfiltrate hostnames, IP addresses, DNS servers, and user directories to a Discord-controlled endpoint.
Security News
TypeScript Native Previews offers a 10x faster Go-based compiler, now available on npm for public testing with early editor and language support.