Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
rear / lib / rear / helpers / order.rb
Size: Mime:
module RearHelpers
  module InstanceMixin

    # flip-flopping vectors, that's it, if current vector set to asc
    # this method will return desc, and vice-versa.
    # also it will return UI arrow direction - when vector is asc
    # arrow is down and arrow is up when vector is desc
    def sortable_vector column
      vector = ['asc', nil].include?(order_params[column.string_name]) ? 'desc' : 'asc'
      [vector, vector == 'asc' ? 'down' : 'up']
    end

    # checks whether ordering is happening by given column
    # and if it is, check whether a valid vector used
    def sortable_vector? column
      if vector = (params[:order] || {})[column.string_name]
        valid_sortable_vector? vector
      end
    end

    def valid_sortable_vector? vector
      vector if vector == 'asc' || vector == 'desc'
    end

    def order_params
      @__rear__order_params ||= pane_columns.inject({}) do |map,column|
        (vector = sortable_vector?(column)) ?
          map.update(column.string_name => vector) : map
      end.freeze
    end

    def order_params_to_sql
      order = []
      order_params.each_pair do |column_name, vector|
        if column_name == pkey.to_s
          column = RearInput.new(column_name)
        else
          next unless column = columns.find {|c| c.string_name == column_name}
        end
        case __rear__.orm
        when :dm
          column.order_by.each {|c| order << c.send(vector)}
        when :ar
          columns = column.order_by.map {|c| '%s %s' % [RearUtils.quote_ar_column(model, c), vector]}
          order  << columns.join(', ')
        end
      end
      order.any? ? order : nil
    end
  end
end