Class: Presenting::Sorting

Inherits:
Object
  • Object
show all
Includes:
Configurable
Defined in:
lib/presenting/sorting.rb

Defined Under Namespace

Classes: Field, FieldSet

Instance Method Summary collapse

Methods included from Configurable

#initialize

Instance Method Details

#defaultObject

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']


45
46
47
# File 'lib/presenting/sorting.rb', line 45

def default
  @default ||= "#{fields.first.sql} ASC"
end

#default=(val) ⇒ Object



48
49
50
# 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

#fieldsObject



25
26
27
# File 'lib/presenting/sorting.rb', line 25

def fields
  @fields ||= FieldSet.new
end

#fields=(obj) ⇒ Object

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'
})


13
14
15
16
17
18
19
20
21
22
23
# 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) ⇒ Object



29
30
31
32
33
34
35
36
# 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