activesorting 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/gemfiles/40.gemfile.lock +1 -1
- data/gemfiles/41.gemfile.lock +1 -1
- data/gemfiles/42.gemfile.lock +1 -1
- data/gemfiles/50.gemfile.lock +1 -1
- data/lib/active_sorting/model.rb +22 -6
- data/lib/active_sorting/version.rb +1 -1
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 463b48951a19bd71e5e868e6d5ef31e95d55c29d
         | 
| 4 | 
            +
              data.tar.gz: d34ce47ee5756fbead1eabd47080e599832b2ea6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 19e97e2679c79cc42f76d37fb64822a642197e8ff3a176d9b743fbf085879cfa3d15221f60ec4188b4e243a2f53310298abd43082ef8548aed6e753a47b85821
         | 
| 7 | 
            +
              data.tar.gz: eb854d49e2a8e6394cf03fbcee88ac45fcfd8145f2a350d86aa8507510a4c42b999c7abe2efb32c3c22ba3119a78c11c30a5cd7575c29b79e8dbf0474f6b8481
         | 
    
        data/gemfiles/40.gemfile.lock
    CHANGED
    
    
    
        data/gemfiles/41.gemfile.lock
    CHANGED
    
    
    
        data/gemfiles/42.gemfile.lock
    CHANGED
    
    
    
        data/gemfiles/50.gemfile.lock
    CHANGED
    
    
    
        data/lib/active_sorting/model.rb
    CHANGED
    
    | @@ -24,6 +24,22 @@ module ActiveSorting | |
| 24 24 | 
             
                    before_validation :active_sorting_callback_before_validation
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 |  | 
| 27 | 
            +
                  # Sorts and updates the database with the given list of items
         | 
| 28 | 
            +
                  # in the given order.
         | 
| 29 | 
            +
                  #
         | 
| 30 | 
            +
                  # +new_list+ List of ids of records in the desired order
         | 
| 31 | 
            +
                  # +id_column+ the field used for fetching records from the databse,
         | 
| 32 | 
            +
                  #             defaults to :id
         | 
| 33 | 
            +
                  def sort_list(new_list, id_column = :id)
         | 
| 34 | 
            +
                    raise ArgumentError, "Sortable list should not be empty" unless new_list.count
         | 
| 35 | 
            +
                    conditions = {}
         | 
| 36 | 
            +
                    conditions[id_column] = new_list
         | 
| 37 | 
            +
                    old_list = unscoped.where(conditions).pluck(:id)
         | 
| 38 | 
            +
                    raise ArgumentError, "Sortable list should be persisted to database" unless old_list.count
         | 
| 39 | 
            +
                    changes = active_sorting_changes_required(old_list, new_list)
         | 
| 40 | 
            +
                    active_sorting_make_changes(new_list, changes)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 27 43 | 
             
                  # Default sorting options
         | 
| 28 44 | 
             
                  def active_sorting_default_options
         | 
| 29 45 | 
             
                    {
         | 
| @@ -65,7 +81,7 @@ module ActiveSorting | |
| 65 81 | 
             
                    end
         | 
| 66 82 | 
             
                    proposal1 = active_sorting_calculate_changes(old_list.dup, new_list.dup)
         | 
| 67 83 | 
             
                    if proposal1.count >= (new_list.count / 4)
         | 
| 68 | 
            -
                      proposal2 = active_sorting_calculate_changes(old_list.reverse, new_list.reverse)
         | 
| 84 | 
            +
                      proposal2 = active_sorting_calculate_changes(old_list.dup.reverse, new_list.dup.reverse)
         | 
| 69 85 | 
             
                      changes = proposal1.count < proposal2.count ? proposal1 : proposal2
         | 
| 70 86 | 
             
                    else
         | 
| 71 87 | 
             
                      changes = proposal1
         | 
| @@ -98,17 +114,17 @@ module ActiveSorting | |
| 98 114 | 
             
                        # We're moving an item to last position,
         | 
| 99 115 | 
             
                        # increase the count of last item's position
         | 
| 100 116 | 
             
                        # by the step
         | 
| 101 | 
            -
                        n1 = find(index.pred).active_sorting_value
         | 
| 117 | 
            +
                        n1 = find(new_list[index.pred]).active_sorting_value
         | 
| 102 118 | 
             
                        n2 = n1 + active_sorting_step
         | 
| 103 119 | 
             
                      elsif index == 0
         | 
| 104 120 | 
             
                        # We're moving an item to first position
         | 
| 105 121 | 
             
                        # Calculate the gap between following 2 items
         | 
| 106 | 
            -
                        n1 = find(index.next).active_sorting_value
         | 
| 107 | 
            -
                        n2 = find(index.next.next).active_sorting_value
         | 
| 122 | 
            +
                        n1 = find(new_list[index.next]).active_sorting_value
         | 
| 123 | 
            +
                        n2 = find(new_list[index.next.next]).active_sorting_value
         | 
| 108 124 | 
             
                      else
         | 
| 109 125 | 
             
                        # We're moving a non-terminal item
         | 
| 110 | 
            -
                        n1 = find(index.pred).active_sorting_value
         | 
| 111 | 
            -
                        n2 = find(index.next).active_sorting_value
         | 
| 126 | 
            +
                        n1 = find(new_list[index.pred]).active_sorting_value
         | 
| 127 | 
            +
                        n2 = find(new_list[index.next]).active_sorting_value
         | 
| 112 128 | 
             
                      end
         | 
| 113 129 | 
             
                      find(id).active_sorting_center_item(n1, n2)
         | 
| 114 130 | 
             
                    end
         |