35 lines
		
	
	
		
			685 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			685 B
		
	
	
	
		
			Ruby
		
	
	
	
module Mongoid
 | 
						|
  module Sortable
 | 
						|
    extend ActiveSupport::Concern
 | 
						|
 | 
						|
    included do
 | 
						|
      field :sort_number, type: Integer
 | 
						|
 | 
						|
      after_initialize :set_sort_number
 | 
						|
    end
 | 
						|
 | 
						|
    module ClassMethods
 | 
						|
      def default_sort(sorted = true)
 | 
						|
        if !sorted
 | 
						|
          asc(:sort_number)
 | 
						|
        else
 | 
						|
          asc
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
 | 
						|
    def set_sort_number
 | 
						|
      if self.new? && self.sort_number.nil?
 | 
						|
        last_record = self.class.desc(:sort_number).first
 | 
						|
        if last_record && last_record.sort_number
 | 
						|
          self.sort_number = (last_record.sort_number + 10) / 10 * 10
 | 
						|
        else
 | 
						|
          self.sort_number = 10
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |