Sha256: 0f32a0e37793f8cb992ae2e1955f7f3f0b1e01fdb81e6fd86ea4a7456f73b5a9
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
require "data_tables/responder/version" require 'data_tables/modules/pagination' require 'data_tables/modules/search' require 'data_tables/active_model_serializers/adapter' require 'data_tables/responder/railtie' if defined? ::Rails::Railtie module DataTables module Responder def self.respond(resource, params) model = resource.try(:model) || resource results = resource hashed_orders = transmute_datatable_order(params[:order], params[:columns]) orders = flat_keys_to_nested hashed_orders order_by = orders.collect do |k, order| if order.is_a? Hash if (klass = model.reflect_on_association(k).try(:klass)) results = results.joins(k) klass.arel_table[order.first.first].send(order.first.last) end else { k => order } end end results = search(results, params) # Rails.logger.warn "SEARCH BY: #{search_by}" results = order_by.inject(results) { |r, o| r.order(o) } results = paginate(results, params) end def self.flat_keys_to_nested(hash) hash.each_with_object({}) do |(key, value), all| key_parts = key.split('.').map!(&:to_sym) leaf = key_parts[0...-1].inject(all) { |h, k| h[k] ||= {} } leaf[key_parts.last] = value end end def self.paginate(collection, params) Modules::Pagination.new(collection, params).paginate end def self.search(collection, params) Modules::Search.new(collection, params).search end def self.transmute_datatable_order(orders, columns) Hash[if orders.is_a? Array orders.collect do |order| if (name = columns[order[:column]][:data]).present? [name, order[:dir]] else nil end end else [] end.compact] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
data_tables-responder-0.3.0 | lib/data_tables/responder.rb |