class Sortable::Sort

Attributes

args[R]
scope[R]

Public Class Methods

new(scope, column, direction, *args) click to toggle source
# File lib/sortable.rb, line 34
def initialize(scope, column, direction, *args)
  @scope = scope
  @column = column
  @direction = direction
  @args = args
end

Public Instance Methods

all() click to toggle source
# File lib/sortable.rb, line 45
def all
  all = scope.all

  if column
    all = all.merge(column.scope) if column.scope.present?

    if column.method
      all = all.public_send(column.method, direction.to_sym, *args)
    elsif column.column.is_a?(Symbol)
      all = all.order(column.column => direction)
    else
      all = all.order("#{column.column} #{direction}")
    end
  end

  all
end
column() click to toggle source
# File lib/sortable.rb, line 67
def column
  columns[@column.to_s]&.first
end
columns() click to toggle source
# File lib/sortable.rb, line 41
def columns
  @columns ||= create_columns
end
create_column(column) click to toggle source
# File lib/sortable.rb, line 78
def create_column(column)
  if column.respond_to?(:last) && column.last.is_a?(Hash)
    Column.new(*column[0...-1], **column.last)
  else
    Column.new(*column)
  end
end
create_columns() click to toggle source
# File lib/sortable.rb, line 71
def create_columns
  scope.sortable.flat_map do |columns|
    columns = [columns] unless columns.all? { |column| column.is_a?(Symbol) }
    columns.map { |column| create_column(column) }
  end.group_by { |column| column.name.to_s }
end
direction() click to toggle source
# File lib/sortable.rb, line 63
def direction
  @direction.to_s == "desc" ? "desc" : "asc"
end