Sha256: 551da426b1f88cd6064459b80049e9eada74f5ca5ddeafded6f6b124d8966ca0

Contents?: true

Size: 1.46 KB

Versions: 8

Compression:

Stored size: 1.46 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
      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

    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

8 entries across 8 versions & 1 rubygems

Version Path
data_table-0.3.7 lib/data_table/base.rb
data_table-0.3.6 lib/data_table/base.rb
data_table-0.3.5 lib/data_table/base.rb
data_table-0.3.4 lib/data_table/base.rb
data_table-0.3.3 lib/data_table/base.rb
data_table-0.3.2 lib/data_table/base.rb
data_table-0.3.1 lib/data_table/base.rb
data_table-0.3.0 lib/data_table/base.rb