Sha256: 830b099bf5d146a6ae47bc26d3d4d01d94364b42c766d80877807af5d7c74eb0

Contents?: true

Size: 1.87 KB

Versions: 30

Compression:

Stored size: 1.87 KB

Contents

module Effective
  # The collection is an Array of Arrays
  class ArrayDatatableTool
    attr_accessor :table_columns

    delegate :order_column_index, :order_direction, :page, :per_page, :search_column, :to => :@datatable

    def initialize(datatable, table_columns)
      @datatable = datatable
      @table_columns = table_columns
    end

    def order_column
      @order_column ||= table_columns.find { |_, values| values[:index] == order_column_index }.try(:second) # This pulls out the values
    end

    def search_terms
      @search_terms ||= @datatable.search_terms.select { |name, search_term| table_columns.key?(name) }
    end

    def order(collection)
      if order_column.present?
        if order_direction == 'ASC'
          collection.sort! { |x, y| x[order_column[:index]] <=> y[order_column[:index]] }
        else
          collection.sort! { |x, y| y[order_column[:index]] <=> x[order_column[:index]] }
        end
      end

      collection
    end

    def search(collection)
      search_terms.each do |name, search_term|
        column_search = search_column(collection, table_columns[name], search_term)
        raise 'search_column must return an Array object' unless column_search.kind_of?(Array)
        collection = column_search
      end
      collection
    end

    def search_column_with_defaults(collection, table_column, search_term)
      search_term = search_term.downcase

      collection.select! do |row|
        value = row[table_column[:index]].to_s.downcase

        if table_column[:filter][:type] == :select && table_column[:filter][:fuzzy] != true
          value == search_term
        else
          value.include?(search_term)
        end
      end || collection
    end

    def paginate(collection)
      Kaminari.paginate_array(collection).page(page).per(per_page)
    end
  end
end

# [
#   [1, 'title 1'],
#   [2, 'title 2'],
#   [3, 'title 3']
# ]

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
effective_datatables-1.4.3 app/models/effective/array_datatable_tool.rb
effective_datatables-1.4.2 app/models/effective/array_datatable_tool.rb
effective_datatables-1.4.1 app/models/effective/array_datatable_tool.rb
effective_datatables-1.4.0 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.8 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.7 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.6 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.5 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.4 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.3 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.2 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.1 app/models/effective/array_datatable_tool.rb
effective_datatables-1.3.0 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.5 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.4 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.3 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.2 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.1 app/models/effective/array_datatable_tool.rb
effective_datatables-1.2.0 app/models/effective/array_datatable_tool.rb
effective_datatables-1.1.6 app/models/effective/array_datatable_tool.rb