Sha256: 8a48e4b8e93675a3754f37168408c9a58a9b29bc166c9d724f1b960eec99b87d

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

module SortableTable
  module App
    module Controllers
      module ApplicationController
  
        def self.included(base)
          base.class_eval do
            include InstanceMethods
            extend ClassMethods
          end
        end
        
        module ClassMethods
          def sortable_attributes(*args)
            mappings           = args.last.is_a?(Hash) ? args.pop : {}
            acceptable_columns = args.collect(&:to_s) + mappings.keys.collect(&:to_s)
            
            define_method(:sort_order) do |*default| 
              direction = params[:order] == 'ascending' ? 'asc' : 'desc'
              column    = params[:sort] || 'created_on'
              if params[:sort] && acceptable_columns.include?(column)
                column = mappings[column.to_sym] || column
                "#{column} #{direction}"
              else
                "#{acceptable_columns.first} #{default_sort_direction(default)}"
              end
            end
          end
        end
        
        module InstanceMethods
          def default_sort_direction(default)
            if default.any? && default.first.is_a?(Hash) && default.first.has_key?(:default)
              default.first[:default] == 'ascending' ? 'asc' : 'desc'
            else
              'desc'  
            end
          end
        end

      end
    end
  end  
end


Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
dancroak-sortable_table-0.1.1 lib/sortable_table/app/controllers/application_controller.rb
dancroak-sortable_table-0.2.0 lib/sortable_table/app/controllers/application_controller.rb
dancroak-sortable_table-0.3.0 lib/sortable_table/app/controllers/application_controller.rb
ryana-sortable_table-0.2.0 lib/sortable_table/app/controllers/application_controller.rb