Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions ajax-datatables-rails.gemspec
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
# -*- encoding: utf-8 -*-
require File.expand_path('../lib/ajax-datatables-rails/version', __FILE__)
require File.expand_path('../lib/ajax-datatables-rails', __FILE__)

Gem::Specification.new do |gem|
gem.authors = ["Joel Quenneville"]
gem.email = ["joel.quenneville@collegeplus.org"]
gem.description = %q{TODO: Write a gem description}
gem.summary = %q{TODO: Write a gem summary}
gem.description = %q{A gem that simplifies using datatables and hundreds of records via ajax}
gem.summary = %q{A wrapper around datatable's ajax methods that allow synchronization with server-side pagination in a rails app}
gem.homepage = ""

gem.files = `git ls-files`.split($\)
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.name = "ajax-datatables-rails"
gem.require_paths = ["lib"]
gem.version = Ajax::Datatables::Rails::VERSION
gem.version = AjaxDatatablesRails::VERSION

gem.add_runtime_dependency 'jquery-datatables-rails', '~> 1.9.1'
end
84 changes: 79 additions & 5 deletions lib/ajax-datatables-rails.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,83 @@
require "ajax-datatables-rails/version"
require 'rails'

module Ajax
module Datatables
module Rails
# Your code goes here...
class AjaxDatatablesRails

VERSION = '0.0.1'

class << self

def columns(column_array)
@@columns ||= column_array
end

def model_name(model_name)
@@model_name ||= model_name
end

def searchable_columns(columns_array)
@@searchable_columns ||= columns_array
end

end

def initialize(view)
@view = view
end

def method_missing(meth, *args, &block)
@view.send(meth, *args, &block)
end

def as_json(options = {})
{
sEcho: params[:sEcho].to_i,
iTotalRecords: @@model_name.count,
iTotalDisplayRecords: get_raw_records.count,
aaData: data
}
end

private

def get_raw_records
raise
end

def fetch_records
search_records(sort_records(paginate_records(get_raw_records)))
end

def paginate_records(records)
records.page(page).per(per_page)
end

def sort_records(records)
records.order("#{sort_column} #{sort_direction}")
end

def search_records(records)
if params[:sSearch].present?
query = @@searchable_columns.map do |column|
"#{column} LIKE :search"
end.join(" OR ")
records = records.where(query, search: "%#{params[:sSearch]}%")
end
return records
end

def page
params[:iDisplayStart].to_i/per_page + 1
end

def per_page
params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
end

def sort_column
@@columns[params[:iSortCol_0].to_i]
end

def sort_direction
params[:sSortDir_0] == "desc" ? "DESC" : "ASC"
end
end
7 changes: 0 additions & 7 deletions lib/ajax-datatables-rails/version.rb

This file was deleted.

4 changes: 4 additions & 0 deletions lib/generators/ajaxdatatable/USAGE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Description:
The cancan:ability generator creates an Ability class in the models
directory. You can move this file anywhere you want as long as it
is in the load path.
8 changes: 8 additions & 0 deletions lib/generators/ajaxdatatable/ajaxdatatable_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class AjaxdatatableGenerator < Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)
argument :model, type: :string

def generate_ajaxdatatable
template 'datatable.rb', File.join('app/datatables', "#{model.tableize}_datatable.rb")
end
end
25 changes: 25 additions & 0 deletions lib/generators/ajaxdatatable/templates/datatable.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
class <%= model.classify %>Datatable < AjaxDatatableRails
model_name <%= model.classify %>
columns # insert array of column names here
searchable_columns #insert array of columns that will be searched

private

def data
<%= model.tableize %>.map do |<%= model.tableize.singularize %>|
[
# comma separated list of the values for each cell of a table row
]
end
end

def <%= model.tableize %>
@<%= model.tableize %> ||= fetch_records
end

def get_raw_records
# insert query here
end

# ==== Insert 'presenter'-like methods below if necessary
end
3 changes: 3 additions & 0 deletions lib/generators/datatable_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class DatatableGenerator < Rails::Generators::Base
create_file "app/datatables/datatable.rb", "# test"
end