activesorting 0.6.1 → 0.7.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/activesorting.gemspec +1 -0
- data/lib/active_sorting/engine.rb +2 -0
- data/lib/active_sorting/model.rb +27 -7
- data/lib/active_sorting/version.rb +1 -1
- data/lib/active_sorting.rb +0 -1
- metadata +15 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b0f69021ec5e9e64e81c03fe39968216bb84c424
         | 
| 4 | 
            +
              data.tar.gz: c2c94f2befce5784455af47bcf091eb1f11a0e5a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 96183ff9c864ef850a503612495dcac0089d21eebaa2061edc0629065bf3df7d77844ad7bec5995225aa1ac5d8db6ca35d5da26808e748a91effde0f10159aff
         | 
| 7 | 
            +
              data.tar.gz: 923723716c2c1ba524dc8c4650e3a97fd0e6f147d091e7703623f752ba416f23978e9be0f25c00fe0d1ddb4e57bdeee15d94747b19008ddf1cedd7278dd579e0
         | 
    
        data/activesorting.gemspec
    CHANGED
    
    | @@ -22,6 +22,7 @@ Gem::Specification.new do |spec| | |
| 22 22 | 
             
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 23 23 | 
             
              spec.add_development_dependency 'rspec'
         | 
| 24 24 | 
             
              spec.add_development_dependency 'sqlite3'
         | 
| 25 | 
            +
              spec.add_development_dependency 'database_cleaner'
         | 
| 25 26 | 
             
              spec.add_development_dependency 'coveralls'
         | 
| 26 27 | 
             
              spec.add_development_dependency 'appraisal'
         | 
| 27 28 |  | 
    
        data/lib/active_sorting/model.rb
    CHANGED
    
    | @@ -20,6 +20,7 @@ module ActiveSorting | |
| 20 20 | 
             
                    active_sorting_options[:name] = name
         | 
| 21 21 | 
             
                    active_sorting_check_options
         | 
| 22 22 | 
             
                    validates active_sorting_options[:name], presence: true
         | 
| 23 | 
            +
                    default_scope { active_sorting_default_scope }
         | 
| 23 24 | 
             
                    before_validation :active_sorting_callback_before_validation
         | 
| 24 25 | 
             
                  end
         | 
| 25 26 |  | 
| @@ -37,11 +38,20 @@ module ActiveSorting | |
| 37 38 | 
             
                    # TODO: columns_hash breaks when database has no tables
         | 
| 38 39 | 
             
                    # field_type = columns_hash[active_sorting_field.to_s].type
         | 
| 39 40 | 
             
                    # unless field_type == :integer
         | 
| 40 | 
            -
                    #   raise ArgumentError, "Sortable field should be of type Integer, #{field_type} given"
         | 
| 41 | 
            +
                    #   raise ArgumentError, "Sortable field should be of type Integer, #{field_type} where given"
         | 
| 41 42 | 
             
                    # end
         | 
| 42 43 | 
             
                    unless active_sorting_step.is_a?(Fixnum)
         | 
| 43 | 
            -
                      raise ArgumentError,  | 
| 44 | 
            +
                      raise ArgumentError, "Sortable step should be of type Fixnum, #{active_sorting_step.class.name} where given"
         | 
| 44 45 | 
             
                    end
         | 
| 46 | 
            +
                    unless active_sorting_scope.respond_to?(:each)
         | 
| 47 | 
            +
                      raise ArgumentError, "Sortable step should be of type Enumerable, #{active_sorting_scope.class.name} where given"
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def active_sorting_default_scope
         | 
| 52 | 
            +
                    conditions = {}
         | 
| 53 | 
            +
                    conditions[active_sorting_field] = active_sorting_order
         | 
| 54 | 
            +
                    order(conditions)
         | 
| 45 55 | 
             
                  end
         | 
| 46 56 |  | 
| 47 57 | 
             
                  # Calculate the least possible changes required to
         | 
| @@ -51,7 +61,7 @@ module ActiveSorting | |
| 51 61 | 
             
                  def active_sorting_changes_required(old_list, new_list)
         | 
| 52 62 | 
             
                    changes = []
         | 
| 53 63 | 
             
                    if old_list.count != new_list.count
         | 
| 54 | 
            -
                      raise ArgumentError, " | 
| 64 | 
            +
                      raise ArgumentError, "Sortable new and old lists should be of the same length"
         | 
| 55 65 | 
             
                    end
         | 
| 56 66 | 
             
                    proposal1 = active_sorting_calculate_changes(old_list.dup, new_list.dup)
         | 
| 57 67 | 
             
                    if proposal1.count >= (new_list.count / 4)
         | 
| @@ -115,6 +125,10 @@ module ActiveSorting | |
| 115 125 | 
             
                  def active_sorting_order
         | 
| 116 126 | 
             
                    active_sorting_options[:order]
         | 
| 117 127 | 
             
                  end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                  def active_sorting_scope
         | 
| 130 | 
            +
                    active_sorting_options[:scope]
         | 
| 131 | 
            +
                  end
         | 
| 118 132 | 
             
                end
         | 
| 119 133 |  | 
| 120 134 | 
             
                def active_sorting_value
         | 
| @@ -125,7 +139,7 @@ module ActiveSorting | |
| 125 139 | 
             
                  send("#{self.class.active_sorting_field}=", new_value)
         | 
| 126 140 | 
             
                end
         | 
| 127 141 |  | 
| 128 | 
            -
                # Centers an item between the given two positions
         | 
| 142 | 
            +
                # Centers an item between the where given two positions
         | 
| 129 143 | 
             
                def active_sorting_center_item(n1, n2)
         | 
| 130 144 | 
             
                  delta = (n1 - n2).abs
         | 
| 131 145 | 
             
                  smaller = [n1, n2].min
         | 
| @@ -141,9 +155,15 @@ module ActiveSorting | |
| 141 155 |  | 
| 142 156 | 
             
                # Generate the next stepping
         | 
| 143 157 | 
             
                def active_sorting_next_step
         | 
| 158 | 
            +
                  conditions = {}
         | 
| 159 | 
            +
                  self.class.active_sorting_scope.each do |s|
         | 
| 160 | 
            +
                    conditions[s] = send(s)
         | 
| 161 | 
            +
                  end
         | 
| 144 162 | 
             
                  # Get the maximum value for the sortable field name
         | 
| 145 | 
            -
                   | 
| 146 | 
            -
             | 
| 163 | 
            +
                  max = self.class
         | 
| 164 | 
            +
                            .unscoped
         | 
| 165 | 
            +
                            .where(conditions)
         | 
| 166 | 
            +
                            .maximum(self.class.active_sorting_field)
         | 
| 147 167 | 
             
                  # First value will always be 0
         | 
| 148 168 | 
             
                  return 0 if max.nil?
         | 
| 149 169 | 
             
                  # Increment by the step value configured
         | 
| @@ -151,7 +171,7 @@ module ActiveSorting | |
| 151 171 | 
             
                end
         | 
| 152 172 |  | 
| 153 173 | 
             
                ## Callbacks
         | 
| 154 | 
            -
                # Generates a new code based on given options
         | 
| 174 | 
            +
                # Generates a new code based on where given options
         | 
| 155 175 | 
             
                def active_sorting_callback_before_validation
         | 
| 156 176 | 
             
                  field_name = self.class.active_sorting_field
         | 
| 157 177 | 
             
                  send("#{field_name}=", active_sorting_next_step) if send(field_name).nil?
         | 
    
        data/lib/active_sorting.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activesorting
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Omar Abdel-Wahab
         | 
| @@ -66,6 +66,20 @@ dependencies: | |
| 66 66 | 
             
                - - ">="
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: database_cleaner
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - ">="
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - ">="
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 69 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 84 | 
             
              name: coveralls
         | 
| 71 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         |