Sha256: 0579bba04f8fd518e6a2147fde2854cb3b8719e8225bcb726c52dc90edc3c97c

Contents?: true

Size: 1.35 KB

Versions: 10

Compression:

Stored size: 1.35 KB

Contents

module DataTable

  def self.included base
    base.send :extend, ClassMethods
    base.send :extend, Mongoid::ClassMethods
  end

  module ClassMethods
    def for_data_table controller, fields, search_fields=nil, explicit_block=nil, &implicit_block
      params = controller.params.dup
      search_fields ||= fields
      block = (explicit_block or implicit_block)

      objects = _find_objects params, fields, search_fields

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

    private

    def _yield_and_render_array controller, objects, block
      objects.map do |object|
        block[object].map do |string|
          controller.instance_eval %{
            Rails.logger.silence do
              render_to_string :inline => %Q|#{string}|, :locals => {:#{self.name.underscore} => object}
            end
          }
        end
      end
    end

    def _page params
      params[:iDisplayStart].to_i / params[:iDisplayLength].to_i + 1
    end

    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
  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
data_table-0.2.7 lib/data_table/base.rb
data_table-0.2.6 lib/data_table/base.rb
data_table-0.2.5 lib/data_table/base.rb
data_table-0.2.4 lib/data_table/base.rb
data_table-0.2.3 lib/data_table/base.rb
data_table-0.2.2 lib/data_table/base.rb
data_table-0.2.1 lib/data_table/base.rb
data_table-0.2.0 lib/data_table/base.rb
data_table-0.1.9 lib/data_table/base.rb
data_table-0.1.8 lib/data_table/base.rb