module PhiltreRails::PhiltreViewHelpers
Public Instance Methods
default_order_link_class()
click to toggle source
can be overridden
# File lib/philtre-rails/philtre_view_helpers.rb, line 15 def default_order_link_class OrderLink end
order_by( filter, *fields, label: fields.first.to_s.titleize, order_link_class: default_order_link_class )
click to toggle source
Heavily modified from SearchLogic.
# File lib/philtre-rails/philtre_view_helpers.rb, line 20 def order_by( filter, *fields, label: fields.first.to_s.titleize, order_link_class: default_order_link_class ) return label if filter.nil? # current ordering from the filter # each expr is a Sequel::SQL::Expression exprs = Hash[ filter.order_expressions ] # Invert each ordering for the generated link. Current sort order will be displayed. order_links = fields.map do |field| if exprs[field] order_link_class.new exprs[field].invert, active: true else order_link_class.new Sequel.asc(field) end end # filter params must have order in the right format filter_params = filter.filter_parameters.dup filter_params[:order] = unify_array( order_links.map( &:name ) ) params_hash = {filter.class::Model.model_name.param_key.to_sym => filter_params} link_text = raw( [label, order_links.first.andand.icon].compact.join(' ') ) link_to link_text, params_hash, {class: order_links.first.andand.css_class} end
unify_array( ary )
click to toggle source
There is a nicer way to do this, but it means monkey-patching Array. Which upsets some folks.
# File lib/philtre-rails/philtre_view_helpers.rb, line 6 def unify_array( ary ) case ary.size when 0; nil when 1; ary.first else; ary end end