module PassionView::Sortable

Attributes

sort_column[RW]
sort_direction[RW]

Public Class Methods

new(items, options = {}) click to toggle source
Calls superclass method
# File lib/passion_view/sortable.rb, line 8
def initialize(items, options = {})
  super
  sort = options.delete(:sort) || {}

  sort_with(sort[:sort], sort[:direction])
end

Public Instance Methods

default_sort_column() click to toggle source
# File lib/passion_view/sortable.rb, line 31
def default_sort_column
  resource_class.primary_key
end
default_sort_direction() click to toggle source
# File lib/passion_view/sortable.rb, line 35
def default_sort_direction
  sort_directions_available.first
end
items() click to toggle source
Calls superclass method
# File lib/passion_view/sortable.rb, line 15
def items
  super.order(order_arel[sort_column].send(sort_direction))
end
order_arel() click to toggle source
# File lib/passion_view/sortable.rb, line 51
def order_arel
  table = resource_class.arel_table
  pk = default_sort_column

  { pk => table[pk.to_sym] }
end
sort_by_path(column, direction = default_sort_direction) click to toggle source
# File lib/passion_view/sortable.rb, line 39
def sort_by_path(column, direction = default_sort_direction)
  sortable_path(sortable_params(column, direction))
end
sort_column_available?(name) click to toggle source
# File lib/passion_view/sortable.rb, line 23
def sort_column_available?(name)
  sort_columns_available.include?(name.to_s)
end
sort_columns_available() click to toggle source
# File lib/passion_view/sortable.rb, line 19
def sort_columns_available
  order_arel.keys
end
sort_directions_available() click to toggle source
# File lib/passion_view/sortable.rb, line 27
def sort_directions_available
  %w(asc desc)
end
sort_with(column, direction) click to toggle source
# File lib/passion_view/sortable.rb, line 70
def sort_with(column, direction)
  self.sort_column = column || default_sort_column
  self.sort_column = default_sort_column unless sort_columns_available.include?(sort_column)

  self.sort_direction = direction || default_sort_direction
  self.sort_direction = default_sort_direction unless %w(asc desc).include?(sort_direction)
end
sortable_params(column = nil, direction = nil) click to toggle source
# File lib/passion_view/sortable.rb, line 58
def sortable_params(column = nil, direction = nil)
  params = {}

  column    ||= sort_column
  direction ||= sort_direction

  params[:sort]      = column
  params[:direction] = direction

  params
end
sortable_path(options) click to toggle source
# File lib/passion_view/sortable.rb, line 43
def sortable_path(options)
  resource_path(url_options.merge(options))
end
url_options() click to toggle source
Calls superclass method PassionView::Pathable#url_options
# File lib/passion_view/sortable.rb, line 47
def url_options
  super.merge(sortable_params)
end