class Presenting::Sorting

Public Instance Methods

default() click to toggle source

The default sorting, if no known fields are found in the parameters. Default sorting is specified by name/direction, using an array.

Example:

@sorting.default = [:name, 'asc']
# File lib/presenting/sorting.rb, line 45
def default
  @default ||= "#{fields.first.sql} ASC"
end
default=(val) click to toggle source
# File lib/presenting/sorting.rb, line 48
def default=(val)
  @default = "#{fields.find{|f| f.name == val.first.to_s}.sql} #{desc_or_asc val.second}"
end
fields() click to toggle source
# File lib/presenting/sorting.rb, line 25
def fields
  @fields ||= FieldSet.new
end
fields=(obj) click to toggle source

I want to support two configuration formats:

Sorting.new(:fields => [:first_name, :last_name, :email])

Sorting.new(:fields => {
 'name' => 'CONCAT(first_name, last_name)',
 'email' => 'email_address'
})
# File lib/presenting/sorting.rb, line 13
def fields=(obj)
  case obj
  when Array
    obj.each do |name| fields << name end
    
  when Hash
    obj.each do |k, v|
      fields << {k => v}
    end 
  end
end
to_sql(param) click to toggle source
# File lib/presenting/sorting.rb, line 29
def to_sql(param)
  fields.each do |field|
    # search for and return the first known field
    return "#{field.sql} #{desc_or_asc param[field.name]}" if param[field.name]
  end unless param.blank?
  # no known fields found
  default
end

Protected Instance Methods

desc_or_asc(val) click to toggle source
# File lib/presenting/sorting.rb, line 54
def desc_or_asc(val)
  val.to_s.downcase == 'desc' ? 'DESC' : 'ASC'
end