class RailsServersideDatatables::Column

Constants

CONFIGURATION_KEYS

Attributes

column_filtering[RW]
decorator[RW]
display_name[RW]
filtering[RW]
sorting[RW]

Public Class Methods

new( name, definition, config = {}, &block ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 13
def initialize( name, definition, config = {}, &block )
  @name       = name
  @definition = ExprTreeNode.create_by_type definition
  @structured = config.reject {
        |c| CONFIGURATION_KEYS.include? c
    }.to_a.map {
        |s| [s.first, ExprTreeNode.create_by_type(s.last ) ]
    }.to_h

  @decorator  = block

  @display_name     = config.fetch( :display_name, name.to_s.capitalize )
  @column_filtering = config.fetch( :column_filtering, true )
  @sorting          = config.fetch( :sorting, true )
  @filtering        = config.fetch( :filtering, true )
end

Public Instance Methods

column_filter( filter ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 54
def column_filter( filter )
  return Nothing.new unless column_filtering
  create_filter( filter )
end
configuration() click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 64
def configuration
  {
      filtering: filtering, sorting: sorting,
      column_filtering: true, display_name: display_name,
      name: @name
  }
end
filter( filter ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 59
def filter( filter )
  return Nothing.new unless filtering
  create_filter( filter )
end
order( direction = :ASC ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 49
def order( direction = :ASC )
  return Nothing.new unless sorting
  OrderBy.new( @order_definition || main_column_name, direction )
end
order_definition=( definition ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 30
def order_definition=( definition )
  @order_definition = definition
end
select() click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 44
def select
  @structured.to_a.map { |c| ExpressionAlias.new( c.last, helper_column_name(c.first) ) } +
      [ ExpressionAlias.new( @definition, main_column_name ) ]
end
structured( record ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 34
def structured( record )
  @structured.to_a.map do |s|
    [s.first, record.read_attribute(helper_column_name s.first)]
  end.to_h
end
value( record ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 40
def value( record )
  decorated record.read_attribute( main_column_name ), structured( record )
end

Private Instance Methods

create_filter( filter ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 73
def create_filter( filter )
  FilterByText.new( @definition, filter )
end
decorated( main, structured ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 77
def decorated( main, structured )
  @decorator.nil? ? CGI.escapeHTML( main.to_s ) : @decorator.call( main, structured )
end
helper_column_name( structured_label ) click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 85
def helper_column_name( structured_label )
  "#{@name.to_s}_raw_#{structured_label.to_s}".to_sym
end
main_column_name() click to toggle source
# File lib/rails_serverside_datatables/column.rb, line 81
def main_column_name
  "#{@name.to_s}_main".to_sym
end