class Datatable::Application

Public Class Methods

new(view, model, items, order_items=nil, pre_filter=false, filter='') click to toggle source
# File lib/datatable/application.rb, line 11
def initialize(view, model, items, order_items=nil, pre_filter=false, filter='')
  @view = view
  if pre_filter
    @model= model.where(filter)
  else
    @model = model
  end
  @items = items
  @order = order_items.blank? ? items : order_items
end

Public Instance Methods

as_json(options = {}) click to toggle source
# File lib/datatable/application.rb, line 22
def as_json(options = {})
  {
    sEcho: params[:draw].to_i,
    iTotalRecords: @model.count,
    iTotalDisplayRecords: dimension.total_entries,
    aaData: sanitize_data(data)
  }
end
set_datatable_button(dimension, partial_path) click to toggle source
# File lib/datatable/application.rb, line 31
def set_datatable_button dimension, partial_path
  ApplicationController.new.render_to_string(partial: partial_path, locals: { dimension: dimension })
end

Private Instance Methods

dimension() click to toggle source
# File lib/datatable/application.rb, line 37
def dimension
  @dimension ||= fetch_dimension
end
fetch_dimension() click to toggle source
# File lib/datatable/application.rb, line 41
def fetch_dimension
  dimension = @model
  search = ''

  @items.each_with_index do |val, key|
    search << (key == 0 ? val+' LIKE :search ' : 'OR ' + val + ' LIKE :search ')
  end

  if params[:order]
    params[:order].each do |key, val|
      column_for_order = val[:column].to_i
      dimension = dimension.order("#{@order[column_for_order]} #{val[:dir]}")
    end
  end

  if !params[:search][:value].blank?
    dimension = dimension.where(search, search: "%#{params[:search][:value]}%")
  end

  params[:columns].each do |key,column|
    if !column[:search][:value].blank?
      dimension = dimension.where(@items[column[:data].to_i] + ' LIKE :search ', search: "%#{column[:search][:value]}%")
    end
  end
  dimension = dimension.page(page).per_page(per_page)
  dimension
end
get_asset(id) click to toggle source
# File lib/datatable/application.rb, line 95
def get_asset id
  asset = AssetConsumer.new current_user.customer_id, id
  asset = asset.get_asset
end
imagen_data(value, url, default) click to toggle source
# File lib/datatable/application.rb, line 77
def imagen_data value, url, default
  if value.url(:thumb) == url
    image_tag default, class: "img-circle", size: "60", style: "border: 5px solid #FFF;"
  else
    image_tag value.url(:thumb), class: "img-circle", size: "60", style: "border: 5px solid #FFF;"
  end
end
miles(value) click to toggle source
# File lib/datatable/application.rb, line 85
def miles value
  number_with_delimiter(value, delimiter: ".")
end
page() click to toggle source
# File lib/datatable/application.rb, line 69
def page
  params[:start].to_i / per_page + 1
end
per_page() click to toggle source
# File lib/datatable/application.rb, line 73
def per_page
  params[:length].to_i > 0 ? params[:length].to_i : 10
end
rut_format(value) click to toggle source
# File lib/datatable/application.rb, line 89
def rut_format value
  spliter = value.split("-")
  formated = number_with_delimiter(spliter[0], delimiter: ".")
  formated.to_s+"-"+spliter[1].to_s
end
sanitize_data(data) click to toggle source
# File lib/datatable/application.rb, line 100
def sanitize_data data
  # sanitize data, when the persistent (or stored) Cross-site scripting vulnerability
  data.each do |row|
    row.each_with_index do |attribute, index|
      row[index] = sanitize(row[index]) if row[index].is_a? String
    end
  end
  data
end