Add rspec to dev env, change repo source. Take back rails_datatables to plugins with all files. Refs #263

This commit is contained in:
Pavel Chipiga 2012-03-30 00:24:57 +03:00
parent 050398c39f
commit 531ba0a35f
9 changed files with 178 additions and 16 deletions

View File

@ -22,7 +22,7 @@ gem 'jbuilder'
# gem 'rugged', '~> 0.16.0'
gem 'grack', :git => 'git://github.com/rdblue/grack.git', :require => 'git_http'
gem "grit", :git => 'git://github.com/chipiga/grit.git' #, :path => '~/Sites/code/grit'
gem "grit", :git => 'git://github.com/warpc/grit.git' #, :path => '~/Sites/code/grit'
gem 'charlock_holmes', '~> 0.6.8' #, :git => 'git://github.com/brianmario/charlock_holmes.git', :branch => 'bundle-icu'
gem 'diff-display', '~> 0.0.1'
@ -73,7 +73,7 @@ group :development do
end
group :test do
gem 'rspec-rails', '~> 2.9.0'
gem 'rspec-rails', '~> 2.9.0', :group => 'development'
gem 'factory_girl_rails', '~> 3.0.0'
gem 'rr', '~> 1.0.4'
gem 'shoulda'

View File

@ -1,12 +1,3 @@
GIT
remote: git://github.com/chipiga/grit.git
revision: 696b0967cb7e6bac044569d898e5acef431d4f97
specs:
grit (2.4.1)
diff-lcs (~> 1.1)
mime-types (~> 1.15)
posix-spawn (~> 0.3.6)
GIT
remote: git://github.com/chipiga/redhillonrails_core.git
revision: 5f58167c41882890c223168b0a5521d99e8d92aa
@ -21,6 +12,15 @@ GIT
specs:
grack (0.2.0)
GIT
remote: git://github.com/warpc/grit.git
revision: 696b0967cb7e6bac044569d898e5acef431d4f97
specs:
grit (2.4.1)
diff-lcs (~> 1.1)
mime-types (~> 1.15)
posix-spawn (~> 0.3.6)
GEM
remote: http://rubygems.org/
specs:

View File

@ -1,3 +1,4 @@
# -*- encoding : utf-8 -*-
class RemoveAutoBuildList < ActiveRecord::Migration
def self.up
drop_table :auto_build_lists
@ -13,4 +14,4 @@ class RemoveAutoBuildList < ActiveRecord::Migration
t.datetime "updated_at"
end
end
end
end

View File

@ -1,3 +1,4 @@
# -*- encoding : utf-8 -*-
class DeleteCategories < ActiveRecord::Migration
def self.up
remove_column :projects, :category_id
@ -14,4 +15,4 @@ class DeleteCategories < ActiveRecord::Migration
end
add_column :projects, :category_id, :integer
end
end
end

View File

@ -1,4 +1,4 @@
# encoding: UTF-8
# -*- encoding : utf-8 -*-
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.

View File

@ -0,0 +1,4 @@
# -*- encoding : utf-8 -*-
require_relative 'rails_datatables/rails_datatables'
ActionView::Base.send :include, RailsDatatables

View File

@ -0,0 +1,20 @@
Copyright (c) 2009 [name of plugin creator]
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,138 @@
## RailsDatatables
A simpler, Rails-friendly interface to using the [DataTables](http://datatables.net) jQuery library.
### Prerequisites
Make sure you have jQuery.js and jQuery.dataTables.js in /public/javascripts/ and that they're included in your layout.
### Setup
Give table a class of 'datatable' so that the Javascript knows which table to alter. NOTE: If you want to use multiple tables on a single page, include the :table_dom_id in the options hash to specify the ID table to be altered.
Add thead around the table header (These elements will associate to the columns array created below, allowing sorting).
Add tbody around the table rows (These are the elements that will be sorted and paginated.)
Activate using <%= datatable() %>, passing in the columns, how to filter them (sorting type), and any other settings (ajax source, search?, label for search, processing image)
<% columns = [{:type => 'html', :class => "first"}, {:type => 'html'}, {:type => 'html'}, {:type => nil, :class => "last"}] %>
<%= datatable(columns, {:sort_by => "[0, 'desc']", :processing => image_tag("spinner.gif") }) %>
<table id='users' class='datatable'>
<thead>
<tr>
<th>Name</th>
<th>Account Level</th>
<th>Email</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<%- @users.each do |user| -%>
<tr id="<%= dom_id(user) %>">
<td><%= user.name %></td>
<td><%= user.account.account_level.name %></td>
<td><%= user.email %></td>
<td><%= link_to "Edit", edit_system_user_path(user) %></td>
</tr>
<%- end -%>
</tbody>
</table>
### Options
#### Table Options
:sort_by - array, default column number (0 - n-1) and sort order. e.g. "[2, 'desc']". Defaults to initial order.
:search - boolean, display the search field. Defaults to true.
:search_label - string, the label for the search field. Defaults to "Search".
:processing - string, the text or image to display while processing data. Defaults to "Processing".
:persist_state - boolean, remember the sorting and page of the tables for the user. Defaults to true.
:additional_data - hash, pass along additional data, such as filter values. Default is none.
:table_dom_id - string, the ID of the table to alter. If nothing is passed, it will look for a class of 'datatable'. Necessary if you want to have multiple DataTables on a single page.
:per_page - the number of rows to show per page (renamed from display_length)
:append - functions to all at the end of the dataTable() call. Useful for [Datatables plugins](http://www.datatables.net/plug-ins/api)
:no_records_message - Message to display if no records are found, whether on load or after searching
:auto_width - Automatically adjust the width of the columns. Defaults to true.
:row_callback - a function to run on each row in the table. Inserted in to "'fnRowCallback': function( nRow, aData, iDisplayIndex ) { }". See [documentation for fnRowCallback](http://www.datatables.net/usage/callbacks) for more information.
#### Column Options
:class - string, the class to assign to the table cell. Default is none.
:type - string, the type of content in the column, for non-Ajax tables. 'html' will strip all HTML and sort on the inner value, as a string. Default is string.
:sortable - boolean, allow this column to be sorted on. Default is true.
:searchable - boolean, allow this column to be searched, for non-Ajax tables. Default is true.
#### AJAX Options
When you're working with large datasets it's not reasonable to load everything on page load. Use an :ajax_source to load just the records that are being displayed, do custom searching (DB, Solr, etc).
:ajax_source - string, for large datasets, use an ajax source to load each page on its own. For smaller datasets, just load the whole set and let datatable do the sorting
Add a datatable method on your controller to return JSON
* Return the objects to be displayed
* Return the total number of objects
* Add a method to handle sorting - DataTables returns the column that is being sorted (0 - n), so you need to know which column is which and sort on it.
### AJAX Example
#### Datatable view example - datatable.html.erb
{"sEcho": <%= params[:sEcho] || -1 %>,
"iTotalRecords": <%= @total_objects %>,
"iTotalDisplayRecords": <%= @total_object %>,
"aaData":[
<% @objects.each do |object| %>
['<%= link_to(object.user.name, user) %>',
'<%= object.description || "-" %>',
'<%= object.created_at %>'
],
<% end %>
]}
#### Controller example - using will_paginate
def datatable
@objects = current_objects(params)
@total_objectss = total_objects(params)
render :layout => false
end
private
def current_objects(params={})
current_page = (params[:iDisplayStart].to_i/params[:iDisplayLength].to_i rescue 0)+1
@current_objects = Object.paginate :page => current_page,
:include => [:user],
:order => "#{datatable_columns(params[:iSortCol_0])} #{params[:sSortDir_0] || "DESC"}",
:conditions => conditions,
:per_page => params[:iDisplayLength]
end
def total_objects(params={})
@total_objects = Object.count :include => [:user], :conditions => conditions
end
def datatable_columns(column_id)
case column_id.to_i
when 1
return "objects.description"
when 2
return "objects.created_at"
else
return "users.name"
end
end
def conditions
conditions = []
conditions << "(objects.description ILIKE '%#{params[:sSearch]}%' OR users.name ILIKE '%#{params[:sSearch]}%')" if(params[:sSearch])
return conditions.join(" AND ")
end
### Note
There is a more functionality offered by DataTables than this plugin currently provides. We add to it as we find need for other features. If there's a feature of DataTables that you'd like to see, fork this repo and add it so we can all benefit.
### Credits
Copyright (c) 2009 [Phronos](http://phronos.com), released under the MIT license

View File

@ -115,5 +115,3 @@ module RailsDatatables
}.join(",")
end
end
ActionView::Base.send :include, RailsDatatables