module DataTable::ClassMethods

Public Instance Methods

for_data_table(controller, fields, search_fields=nil, explicit_block=nil, &implicit_block) click to toggle source
# File lib/data_table/base.rb, line 9
def for_data_table controller, fields, search_fields=nil, explicit_block=nil, &implicit_block
  incoming_params = if controller.params.respond_to?(:permit) then
                      controller.params.permit(:sSearch, :sEcho, :iDisplayStart, :iDisplayLength, :iSortCol_0, :sSortDir_0)
                    else
                      controller.params
                    end
  params = Hash[*incoming_params.to_h.map {|key, value| [key.to_s.downcase.to_sym, value] }.flatten]
  search_fields ||= fields
  block = (explicit_block or implicit_block)

  objects = _find_objects params, fields, search_fields
  matching_count = objects.respond_to?(:total_entries) ? objects.total_entries : _matching_count(params, search_fields)

  {:sEcho                => params[:secho].to_i,
   :iTotalRecords        => self.count,
   :iTotalDisplayRecords => matching_count,
   :aaData               => _yield_and_render_array(controller, objects, block)
  }.to_json.html_safe
end

Private Instance Methods

_page(params) click to toggle source
# File lib/data_table/base.rb, line 45
def _page params
  return 1 if params[:idisplaystart].blank? or params[:idisplaylength].blank?

  params[:idisplaystart].to_i / params[:idisplaylength].to_i + 1
end
_per_page(params) click to toggle source
# File lib/data_table/base.rb, line 51
def _per_page params
  case (display_length = params[:idisplaylength].to_i)
    when -1 then self.count
    when  0 then 25
    else         display_length
  end
end
_yield_and_render_array(controller, objects, block) click to toggle source
# File lib/data_table/base.rb, line 31
def _yield_and_render_array controller, objects, block
  objects.map do |object|
    block[object].map do |string|
      safe_string = string.to_s.gsub("|", " ")
      controller.instance_eval %{
        log_level, Rails.logger.level = Rails.logger.level, Logger::ERROR
        render_to_string(:inline => %q|#{safe_string}|, :locals => {:#{self.name.underscore} => object}).tap do
          Rails.logger.level = log_level
        end
      }
    end
  end
end