awesome_nested_set 3.5.0 → 3.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG +9 -0
- data/README.md +2 -2
- data/lib/awesome_nested_set/helper.rb +6 -6
- data/lib/awesome_nested_set/model/movable.rb +12 -7
- data/lib/awesome_nested_set/model/prunable.rb +13 -3
- data/lib/awesome_nested_set/model/relatable.rb +4 -0
- data/lib/awesome_nested_set/move.rb +3 -1
- data/lib/awesome_nested_set/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +40 -32
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1818a52d06b6fe933cb0ef212d2fa5a3f5fbcfc5bc1c425a277e937099f2fbc7
         | 
| 4 | 
            +
              data.tar.gz: 0e8700c3b160be17c40e29c9a95e0f560367e312abad8328b7f0b72c7e691099
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7927532d26559726db357a3f955f68ed04fb7fe4bda01a074e8379c1df638711554bacabba0b393594734dafbaccc5a97db7bc0122e85e469161ce067a211bff
         | 
| 7 | 
            +
              data.tar.gz: b6f7a4b82a1a850e48a72ce6852fc4f82e3f8a1a84524d4885ef757020ffaf8239bdafb638796a37f9ab47756de0c7bdc70364764da0eae17072c84ef884260e
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,5 +1,14 @@ | |
| 1 1 | 
             
            Unreleased version
         | 
| 2 2 |  | 
| 3 | 
            +
            3.7.0
         | 
| 4 | 
            +
            * Teach #move_to_child_of and #move_to_child_with_index to accept :root as a parameter [Micah Geisel](https://github.com/botandrose)
         | 
| 5 | 
            +
            * Add #roots method [Micah Geisel](https://github.com/botandrose)
         | 
| 6 | 
            +
            * Support Rails 7.2 [Ahmed A. Ibrahim](https://github.com/AhmedAliIbrahim)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            3.6.0
         | 
| 9 | 
            +
            * Support Rails 7.1 [Harshal Bhakta](https://github.com/harshalbhakta)
         | 
| 10 | 
            +
            * Improve ImpossibleMove error message [AlejandroFernandesAntunes](https://github.com/AlejandroFernandesAntunes)
         | 
| 11 | 
            +
             | 
| 3 12 | 
             
            3.5.0
         | 
| 4 13 | 
             
            * Support Rails 7.0.0 [Peter Berkenbosch](https://github.com/peterberkenbosch) and [Andrew Hampton](https://github.com/andrewhampton)
         | 
| 5 14 | 
             
            * Make `order_column` option more flexible by removing explicit `=> :asc` [Regis Millet](https://github.com/Kulgar)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            # Awesome Nested Set
         | 
| 2 2 |  | 
| 3 | 
            -
            [](https://github.com/collectiveidea/awesome_nested_set/actions/workflows/ci.yml) [](https://codeclimate.com/github/collectiveidea/awesome_nested_set) | 
| 3 | 
            +
            [](https://github.com/collectiveidea/awesome_nested_set/actions/workflows/ci.yml) [](https://codeclimate.com/github/collectiveidea/awesome_nested_set)
         | 
| 4 4 |  | 
| 5 5 |  | 
| 6 6 | 
             
            Awesome Nested Set is an implementation of the nested set pattern for ActiveRecord models.
         | 
| 7 7 | 
             
            It is a replacement for acts_as_nested_set and BetterNestedSet, but more awesome.
         | 
| 8 8 |  | 
| 9 | 
            -
            Version 3.2 supports Rails 6, 3.1 supports Rails 5 & 4. Version 2 supports Rails 3. 
         | 
| 9 | 
            +
            Older versions: Version 3.2 supports Rails 6, 3.1 supports Rails 5 & 4. Version 2 supports Rails 3. 
         | 
| 10 10 | 
             
            Gem versions prior to 2.0 support Rails 2.
         | 
| 11 11 |  | 
| 12 12 | 
             
            ## What makes this so awesome?
         | 
| @@ -11,7 +11,7 @@ module CollectiveIdea #:nodoc: | |
| 11 11 | 
             
                    # You can pass a block receiving an item and returning the string displayed in the select.
         | 
| 12 12 | 
             
                    #
         | 
| 13 13 | 
             
                    # == Params
         | 
| 14 | 
            -
                    #  * + | 
| 14 | 
            +
                    #  * +class_or_items+ - Class name or top level items
         | 
| 15 15 | 
             
                    #  * +mover+ - The item that is being move, used to exclude impossible moves
         | 
| 16 16 | 
             
                    #  * +&block+ - a block that will be used to display: { |item| ... item.name }
         | 
| 17 17 | 
             
                    #
         | 
| @@ -21,12 +21,12 @@ module CollectiveIdea #:nodoc: | |
| 21 21 | 
             
                    #       "#{'–' * i.level} #{i.name}"
         | 
| 22 22 | 
             
                    #     }) %>
         | 
| 23 23 | 
             
                    #
         | 
| 24 | 
            -
                    def nested_set_options( | 
| 25 | 
            -
                      if  | 
| 26 | 
            -
                        items =  | 
| 24 | 
            +
                    def nested_set_options(class_or_items, mover = nil)
         | 
| 25 | 
            +
                      if class_or_items.is_a? Array
         | 
| 26 | 
            +
                        items = class_or_items.reject { |e| !e.root? }
         | 
| 27 27 | 
             
                      else
         | 
| 28 | 
            -
                         | 
| 29 | 
            -
                        items = Array( | 
| 28 | 
            +
                        class_or_items = class_or_items.roots if class_or_items.respond_to?(:scope)
         | 
| 29 | 
            +
                        items = Array(class_or_items)
         | 
| 30 30 | 
             
                      end
         | 
| 31 31 | 
             
                      result = []
         | 
| 32 32 | 
             
                      items.each do |root|
         | 
| @@ -36,26 +36,31 @@ module CollectiveIdea #:nodoc: | |
| 36 36 |  | 
| 37 37 | 
             
                      # Move the node to the child of another node
         | 
| 38 38 | 
             
                      def move_to_child_of(node)
         | 
| 39 | 
            -
                         | 
| 39 | 
            +
                        if node == :root
         | 
| 40 | 
            +
                          move_to_root
         | 
| 41 | 
            +
                        else
         | 
| 42 | 
            +
                          move_to node, :child
         | 
| 43 | 
            +
                        end
         | 
| 40 44 | 
             
                      end
         | 
| 41 45 |  | 
| 42 46 | 
             
                      # Move the node to the child of another node with specify index
         | 
| 43 47 | 
             
                      def move_to_child_with_index(node, index)
         | 
| 44 | 
            -
                         | 
| 48 | 
            +
                        siblings = node == :root ? roots : node.children
         | 
| 49 | 
            +
                        if siblings.empty?
         | 
| 45 50 | 
             
                          move_to_child_of(node)
         | 
| 46 | 
            -
                        elsif  | 
| 47 | 
            -
                          move_to_right_of( | 
| 51 | 
            +
                        elsif siblings.count == index
         | 
| 52 | 
            +
                          move_to_right_of(siblings.last)
         | 
| 48 53 | 
             
                        else
         | 
| 49 | 
            -
                          my_position =  | 
| 54 | 
            +
                          my_position = siblings.index(self)
         | 
| 50 55 | 
             
                          if my_position && my_position < index
         | 
| 51 56 | 
             
                            # e.g. if self is at position 0 and we want to move self to position 1 then self
         | 
| 52 57 | 
             
                            # needs to move to the *right* of the node at position 1. That's because the node
         | 
| 53 58 | 
             
                            # that is currently at position 1 will be at position 0 after the move completes.
         | 
| 54 | 
            -
                            move_to_right_of( | 
| 59 | 
            +
                            move_to_right_of(siblings[index])
         | 
| 55 60 | 
             
                          elsif my_position && my_position == index
         | 
| 56 61 | 
             
                            # do nothing. already there.
         | 
| 57 62 | 
             
                          else
         | 
| 58 | 
            -
                            move_to_left_of( | 
| 63 | 
            +
                            move_to_left_of(siblings[index])
         | 
| 59 64 | 
             
                          end
         | 
| 60 65 | 
             
                        end
         | 
| 61 66 | 
             
                      end
         | 
| @@ -35,9 +35,14 @@ module CollectiveIdea #:nodoc: | |
| 35 35 | 
             
                        end
         | 
| 36 36 | 
             
                      end
         | 
| 37 37 |  | 
| 38 | 
            +
                      # Use reverse to delete from deepest child to parent in order to respect any possible foreign keys
         | 
| 39 | 
            +
                      def decendants_to_destroy_in_order
         | 
| 40 | 
            +
                        descendants.reverse
         | 
| 41 | 
            +
                      end
         | 
| 42 | 
            +
             | 
| 38 43 | 
             
                      def destroy_or_delete_descendants
         | 
| 39 44 | 
             
                        if acts_as_nested_set_options[:dependent] == :destroy
         | 
| 40 | 
            -
                           | 
| 45 | 
            +
                          decendants_to_destroy_in_order.each do |model|
         | 
| 41 46 | 
             
                            model.skip_before_destroy = true
         | 
| 42 47 | 
             
                            model.destroy
         | 
| 43 48 | 
             
                          end
         | 
| @@ -47,8 +52,13 @@ module CollectiveIdea #:nodoc: | |
| 47 52 | 
             
                        elsif acts_as_nested_set_options[:dependent] == :restrict_with_error
         | 
| 48 53 | 
             
                          unless leaf?
         | 
| 49 54 | 
             
                            record = self.class.human_attribute_name(:children).downcase
         | 
| 50 | 
            -
                             | 
| 51 | 
            -
             | 
| 55 | 
            +
                            if Rails::VERSION::MAJOR < 5
         | 
| 56 | 
            +
                              errors.add(:base, :"restrict_dependent_destroy.many", record: record)
         | 
| 57 | 
            +
                              return false
         | 
| 58 | 
            +
                            else
         | 
| 59 | 
            +
                              errors.add(:base, :"restrict_dependent_destroy.has_many", record: record)
         | 
| 60 | 
            +
                              throw :abort
         | 
| 61 | 
            +
                            end
         | 
| 52 62 | 
             
                          end
         | 
| 53 63 | 
             
                          return true
         | 
| 54 64 | 
             
                         elsif acts_as_nested_set_options[:dependent] == :nullify
         | 
| @@ -129,7 +129,9 @@ module CollectiveIdea #:nodoc: | |
| 129 129 |  | 
| 130 130 | 
             
                    def prevent_impossible_move
         | 
| 131 131 | 
             
                      if !root && !instance.move_possible?(target)
         | 
| 132 | 
            -
                         | 
| 132 | 
            +
                        error_msg = "Impossible move, target node (#{target.class.name},ID: #{target.id}) 
         | 
| 133 | 
            +
                          cannot be inside moved tree (#{instance.class.name},ID: #{instance.id})."
         | 
| 134 | 
            +
                        raise ImpossibleMove, error_msg
         | 
| 133 135 | 
             
                      end
         | 
| 134 136 | 
             
                    end
         | 
| 135 137 |  | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: awesome_nested_set
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Brandon Keepers
         | 
| @@ -12,31 +12,33 @@ bindir: bin | |
| 12 12 | 
             
            cert_chain:
         | 
| 13 13 | 
             
            - |
         | 
| 14 14 | 
             
              -----BEGIN CERTIFICATE-----
         | 
| 15 | 
            -
               | 
| 16 | 
            -
               | 
| 17 | 
            -
               | 
| 18 | 
            -
               | 
| 19 | 
            -
               | 
| 20 | 
            -
               | 
| 21 | 
            -
               | 
| 22 | 
            -
               | 
| 23 | 
            -
               | 
| 24 | 
            -
               | 
| 25 | 
            -
               | 
| 26 | 
            -
               | 
| 27 | 
            -
               | 
| 28 | 
            -
               | 
| 29 | 
            -
               | 
| 30 | 
            -
               | 
| 31 | 
            -
               | 
| 32 | 
            -
               | 
| 33 | 
            -
               | 
| 34 | 
            -
               | 
| 35 | 
            -
               | 
| 36 | 
            -
               | 
| 37 | 
            -
               | 
| 15 | 
            +
              MIIEhjCCAu6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBNMQ0wCwYDVQQDDARnZW1z
         | 
| 16 | 
            +
              MREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixkARkWBWFybmR0MRIwEAYK
         | 
| 17 | 
            +
              CZImiZPyLGQBGRYCaW8wHhcNMjQwNzI1MDkzMTM3WhcNMjUwNzI1MDkzMTM3WjBN
         | 
| 18 | 
            +
              MQ0wCwYDVQQDDARnZW1zMREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixk
         | 
| 19 | 
            +
              ARkWBWFybmR0MRIwEAYKCZImiZPyLGQBGRYCaW8wggGiMA0GCSqGSIb3DQEBAQUA
         | 
| 20 | 
            +
              A4IBjwAwggGKAoIBgQCb2WAH3bZwQeiyrc8ihYIM3cDDfiJbUYDxwE4+c8PT+WBO
         | 
| 21 | 
            +
              WIC4QMdiVLllwliKoCjDeH14dNHGYBJFFu4+jj+jyzYEPaxPn05N4zUZiFe3oXzf
         | 
| 22 | 
            +
              ipaNxdCuilrMrRT0hFclKWvGUT5meVmfxEgX65FPHezv5W4za4ajxfMItUqJCooQ
         | 
| 23 | 
            +
              lfXB8sO6j/z94ZpHOzj/HT/q6krXSQWSYGLmb3ZKRIeo8uk3cAcAYBO6UtRm9AiU
         | 
| 24 | 
            +
              IRrRy0Q8TRANkaoAmcNgetZj/g++ppDxVD0GNijvOphPOpPdZpoQKoX+Z0wQSVdg
         | 
| 25 | 
            +
              rFXDi48MAfvbq+THNB4F/Mu2K+TuFT0ggsyWazgdfKsH3gt6qlqQ6unx04SCsJmB
         | 
| 26 | 
            +
              3XUr5Wquco64evFNXHaN3nrUMuZMecETRPTwyXRl7gMahDEb1OB+pcZvkXQU+0Tc
         | 
| 27 | 
            +
              UNq+Y9MSfvmPBV8T4IZN43eJetY4Roco8ULQH2TeCppgQAWImeQOzGdHaL7ZNAYu
         | 
| 28 | 
            +
              bbv1i5bW9bOBCY3N9+0CAwEAAaNxMG8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
         | 
| 29 | 
            +
              HQYDVR0OBBYEFLyPUmHA7YP43s4Nd0gx/ryHSR3EMBoGA1UdEQQTMBGBD2dlbXNA
         | 
| 30 | 
            +
              cC5hcm5kdC5pbzAaBgNVHRIEEzARgQ9nZW1zQHAuYXJuZHQuaW8wDQYJKoZIhvcN
         | 
| 31 | 
            +
              AQELBQADggGBAAw69VoNOTd5HQOQczs0zm+p5bZw3e+EFiDy/N9o8Lv5rHfyGhA5
         | 
| 32 | 
            +
              f+faBqfxQHDB3VSEFtCnoVFsCUaC1AdRzWztqS40x5GgQRwcM2llTwMYv5C++gC2
         | 
| 33 | 
            +
              xPchTvi5FgDI++a05isObUvtNZ/wrZYBhy75ofzGAAMfuB/+XzsGbsOxSwZVlCne
         | 
| 34 | 
            +
              YLkPa26euounYtKRGLz+X9YD4vDHP5VwsrqsvACMwVGHv+MIM3TQ3TvVrQ7QR9Ov
         | 
| 35 | 
            +
              yUmuDhnAXep8omj9HyiukfqIdTsIMZK8nMcJH4wXC7mjjOBoyRtMwsQIT8OpwSP9
         | 
| 36 | 
            +
              A7++64WBwTLbbGSCMCdw8X1kmmaZjaPrNkJ4wNaeJPZPPgDmL1XKJavQ8xZ/nwGF
         | 
| 37 | 
            +
              VXf+6/IyX9OrQwL2uw0b+1NiR2gFpOLcOy2ixKdua13S9CWRRsR3VJve+PIyycC7
         | 
| 38 | 
            +
              aLV+FI9i9b1YUXG2gDKqLOkF/FNBWNckAmGj7kYkdLG76G5aRGP0HvfKbIiQ3HTC
         | 
| 39 | 
            +
              jAtsfxiSgc0fAw==
         | 
| 38 40 | 
             
              -----END CERTIFICATE-----
         | 
| 39 | 
            -
            date:  | 
| 41 | 
            +
            date: 2024-08-28 00:00:00.000000000 Z
         | 
| 40 42 | 
             
            dependencies:
         | 
| 41 43 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 44 | 
             
              name: activerecord
         | 
| @@ -47,7 +49,7 @@ dependencies: | |
| 47 49 | 
             
                    version: 4.0.0
         | 
| 48 50 | 
             
                - - "<"
         | 
| 49 51 | 
             
                  - !ruby/object:Gem::Version
         | 
| 50 | 
            -
                    version: ' | 
| 52 | 
            +
                    version: '8.0'
         | 
| 51 53 | 
             
              type: :runtime
         | 
| 52 54 | 
             
              prerelease: false
         | 
| 53 55 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -57,7 +59,7 @@ dependencies: | |
| 57 59 | 
             
                    version: 4.0.0
         | 
| 58 60 | 
             
                - - "<"
         | 
| 59 61 | 
             
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            -
                    version: ' | 
| 62 | 
            +
                    version: '8.0'
         | 
| 61 63 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 62 64 | 
             
              name: appraisal
         | 
| 63 65 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -120,28 +122,34 @@ dependencies: | |
| 120 122 | 
             
                requirements:
         | 
| 121 123 | 
             
                - - "~>"
         | 
| 122 124 | 
             
                  - !ruby/object:Gem::Version
         | 
| 123 | 
            -
                    version: ' | 
| 125 | 
            +
                    version: '13'
         | 
| 124 126 | 
             
              type: :development
         | 
| 125 127 | 
             
              prerelease: false
         | 
| 126 128 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 127 129 | 
             
                requirements:
         | 
| 128 130 | 
             
                - - "~>"
         | 
| 129 131 | 
             
                  - !ruby/object:Gem::Version
         | 
| 130 | 
            -
                    version: ' | 
| 132 | 
            +
                    version: '13'
         | 
| 131 133 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 132 134 | 
             
              name: rspec-rails
         | 
| 133 135 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 134 136 | 
             
                requirements:
         | 
| 135 | 
            -
                - - " | 
| 137 | 
            +
                - - ">="
         | 
| 136 138 | 
             
                  - !ruby/object:Gem::Version
         | 
| 137 139 | 
             
                    version: 4.0.0
         | 
| 140 | 
            +
                - - "<="
         | 
| 141 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 142 | 
            +
                    version: '6.2'
         | 
| 138 143 | 
             
              type: :development
         | 
| 139 144 | 
             
              prerelease: false
         | 
| 140 145 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 141 146 | 
             
                requirements:
         | 
| 142 | 
            -
                - - " | 
| 147 | 
            +
                - - ">="
         | 
| 143 148 | 
             
                  - !ruby/object:Gem::Version
         | 
| 144 149 | 
             
                    version: 4.0.0
         | 
| 150 | 
            +
                - - "<="
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '6.2'
         | 
| 145 153 | 
             
            description: An awesome nested set implementation for Active Record
         | 
| 146 154 | 
             
            email: info@collectiveidea.com
         | 
| 147 155 | 
             
            executables: []
         | 
| @@ -191,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 191 199 | 
             
                - !ruby/object:Gem::Version
         | 
| 192 200 | 
             
                  version: '0'
         | 
| 193 201 | 
             
            requirements: []
         | 
| 194 | 
            -
            rubygems_version: 3. | 
| 202 | 
            +
            rubygems_version: 3.5.11
         | 
| 195 203 | 
             
            signing_key:
         | 
| 196 204 | 
             
            specification_version: 4
         | 
| 197 205 | 
             
            summary: An awesome nested set implementation for Active Record
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |