closure_tree 6.5.0 → 7.3.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 +5 -5
- data/.github/workflows/ci.yml +96 -0
- data/.gitignore +2 -0
- data/.rspec +1 -1
- data/Appraisals +90 -7
- data/CHANGELOG.md +94 -42
- data/Gemfile +0 -12
- data/README.md +66 -23
- data/Rakefile +7 -10
- data/_config.yml +1 -0
- data/bin/appraisal +29 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/closure_tree.gemspec +16 -9
- data/lib/closure_tree/finders.rb +32 -9
- data/lib/closure_tree/has_closure_tree.rb +4 -0
- data/lib/closure_tree/has_closure_tree_root.rb +5 -7
- data/lib/closure_tree/hash_tree_support.rb +4 -4
- data/lib/closure_tree/hierarchy_maintenance.rb +28 -8
- data/lib/closure_tree/model.rb +42 -16
- data/lib/closure_tree/numeric_deterministic_ordering.rb +20 -6
- data/lib/closure_tree/numeric_order_support.rb +7 -3
- data/lib/closure_tree/support.rb +18 -12
- data/lib/closure_tree/support_attributes.rb +10 -1
- data/lib/closure_tree/support_flags.rb +1 -4
- data/lib/closure_tree/version.rb +1 -1
- data/lib/generators/closure_tree/migration_generator.rb +8 -0
- data/lib/generators/closure_tree/templates/create_hierarchies_table.rb.erb +1 -1
- metadata +78 -79
- data/.travis.yml +0 -29
- data/gemfiles/activerecord_4.2.gemfile +0 -19
- data/gemfiles/activerecord_5.0.gemfile +0 -19
- data/gemfiles/activerecord_5.0_foreigner.gemfile +0 -20
- data/gemfiles/activerecord_edge.gemfile +0 -20
- data/img/example.png +0 -0
- data/img/preorder.png +0 -0
- data/spec/cache_invalidation_spec.rb +0 -39
- data/spec/cuisine_type_spec.rb +0 -38
- data/spec/db/database.yml +0 -21
- data/spec/db/models.rb +0 -128
- data/spec/db/schema.rb +0 -166
- data/spec/fixtures/tags.yml +0 -98
- data/spec/generators/migration_generator_spec.rb +0 -48
- data/spec/has_closure_tree_root_spec.rb +0 -154
- data/spec/hierarchy_maintenance_spec.rb +0 -16
- data/spec/label_spec.rb +0 -554
- data/spec/matcher_spec.rb +0 -34
- data/spec/metal_spec.rb +0 -55
- data/spec/model_spec.rb +0 -9
- data/spec/namespace_type_spec.rb +0 -13
- data/spec/parallel_spec.rb +0 -159
- data/spec/spec_helper.rb +0 -24
- data/spec/support/database.rb +0 -52
- data/spec/support/database_cleaner.rb +0 -14
- data/spec/support/exceed_query_limit.rb +0 -18
- data/spec/support/hash_monkey_patch.rb +0 -13
- data/spec/support/query_counter.rb +0 -18
- data/spec/support/sqlite3_with_advisory_lock.rb +0 -10
- data/spec/support_spec.rb +0 -14
- data/spec/tag_examples.rb +0 -665
- data/spec/tag_spec.rb +0 -6
- data/spec/user_spec.rb +0 -174
- data/spec/uuid_tag_spec.rb +0 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 7034c0f3149bb3fabe92f4d03f118e4704b80a5ccbfa371e50f1a0f7f624c534
         | 
| 4 | 
            +
              data.tar.gz: 9a9faf0245f8252442c3c2e80a73eeccdf1e94d748dcb8a2ace96ebf131984c1
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 13ee25bbdd76b240ebc74a2f3b6b5846c09a302f60ec2d48dff0d0d8a825f015a66bed08e1eec2bdfad80d437e139337e9e9bbdbb0831ac3b0a4bd5e0493e7e8
         | 
| 7 | 
            +
              data.tar.gz: 97f0e9bbde7fb694bf52833cfd9c469b5f22944752b5f33586486c2edd10958ac422dc957a847d3ba63153de85b63e9e84494b0529cb855590a72610726d5c2f
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            name: CI
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            on:
         | 
| 5 | 
            +
              - push
         | 
| 6 | 
            +
              - pull_request
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            jobs:
         | 
| 9 | 
            +
              rspec:
         | 
| 10 | 
            +
                runs-on: ubuntu-20.04
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                services:
         | 
| 13 | 
            +
                  postgres:
         | 
| 14 | 
            +
                    image: 'postgres:13'
         | 
| 15 | 
            +
                    ports: ['5432:5432']
         | 
| 16 | 
            +
                    env:
         | 
| 17 | 
            +
                      POSTGRES_PASSWORD: postgres
         | 
| 18 | 
            +
                      POSTGRES_DB: closure_tree
         | 
| 19 | 
            +
                    options: >-
         | 
| 20 | 
            +
                      --health-cmd pg_isready
         | 
| 21 | 
            +
                      --health-interval 10s
         | 
| 22 | 
            +
                      --health-timeout 5s
         | 
| 23 | 
            +
                      --health-retries 5
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                strategy:
         | 
| 26 | 
            +
                  fail-fast: false
         | 
| 27 | 
            +
                  matrix:
         | 
| 28 | 
            +
                    ruby:
         | 
| 29 | 
            +
                      - '3.0'
         | 
| 30 | 
            +
                      - '2.7'
         | 
| 31 | 
            +
                      - '2.6'
         | 
| 32 | 
            +
                      - '2.5'
         | 
| 33 | 
            +
                    rails:
         | 
| 34 | 
            +
                      - activerecord_6.1
         | 
| 35 | 
            +
                      - activerecord_6.0
         | 
| 36 | 
            +
                      - activerecord_5.2
         | 
| 37 | 
            +
                      - activerecord_5.1
         | 
| 38 | 
            +
                      - activerecord_5.0
         | 
| 39 | 
            +
                      - activerecord_4.2
         | 
| 40 | 
            +
                      - activerecord_edge
         | 
| 41 | 
            +
                    adapter:
         | 
| 42 | 
            +
                      - sqlite3
         | 
| 43 | 
            +
                      - mysql2
         | 
| 44 | 
            +
                      - postgresql
         | 
| 45 | 
            +
                    exclude:
         | 
| 46 | 
            +
                      - ruby: '2.7'
         | 
| 47 | 
            +
                        rails: activerecord_4.2
         | 
| 48 | 
            +
                      - ruby: '3.0'
         | 
| 49 | 
            +
                        rails: activerecord_4.2
         | 
| 50 | 
            +
                      - ruby: '3.0'
         | 
| 51 | 
            +
                        rails: activerecord_5.0
         | 
| 52 | 
            +
                      - ruby: '3.0'
         | 
| 53 | 
            +
                        rails: activerecord_5.1
         | 
| 54 | 
            +
                      - ruby: '3.0'
         | 
| 55 | 
            +
                        rails: activerecord_5.2
         | 
| 56 | 
            +
                      - ruby: '2.5'
         | 
| 57 | 
            +
                        rails: activerecord_edge
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                steps:
         | 
| 60 | 
            +
                  - name: Checkout
         | 
| 61 | 
            +
                    uses: actions/checkout@v2
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  - name: Setup Ruby
         | 
| 64 | 
            +
                    uses: ruby/setup-ruby@v1
         | 
| 65 | 
            +
                    with:
         | 
| 66 | 
            +
                      ruby-version: ${{ matrix.ruby }}
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  - name: Set DB Adapter
         | 
| 69 | 
            +
                    env:
         | 
| 70 | 
            +
                      RAILS_VERSION: ${{ matrix.rails }}
         | 
| 71 | 
            +
                      DB_ADAPTER: ${{ matrix.adapter }}
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                    # See: https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#mysql
         | 
| 74 | 
            +
                    run: |
         | 
| 75 | 
            +
                      if [ "${DB_ADAPTER}" = "mysql2" ]; then
         | 
| 76 | 
            +
                        sudo systemctl start mysql.service
         | 
| 77 | 
            +
                        mysql -u root -proot -e 'create database closure_tree;'
         | 
| 78 | 
            +
                      fi
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  - name: Bundle
         | 
| 81 | 
            +
                    env:
         | 
| 82 | 
            +
                      RAILS_VERSION: ${{ matrix.rails }}
         | 
| 83 | 
            +
                      DB_ADAPTER: ${{ matrix.adapter }}
         | 
| 84 | 
            +
                      BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile
         | 
| 85 | 
            +
                    run: |
         | 
| 86 | 
            +
                      gem install bundler
         | 
| 87 | 
            +
                      bundle config path vendor/bundle
         | 
| 88 | 
            +
                      bundle install --jobs 4 --retry 3
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  - name: RSpec
         | 
| 91 | 
            +
                    env:
         | 
| 92 | 
            +
                      RAILS_VERSION: ${{ matrix.rails }}
         | 
| 93 | 
            +
                      DB_ADAPTER: ${{ matrix.adapter }}
         | 
| 94 | 
            +
                      BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile
         | 
| 95 | 
            +
                      WITH_ADVISORY_LOCK_PREFIX: ${{ github.run_id }}
         | 
| 96 | 
            +
                    run: bin/rake --trace spec:all
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rspec
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            -- | 
| 1 | 
            +
            --color
         | 
    
        data/Appraisals
    CHANGED
    
    | @@ -1,22 +1,105 @@ | |
| 1 1 |  | 
| 2 2 | 
             
            appraise 'activerecord-4.2' do
         | 
| 3 3 | 
             
              gem 'activerecord', '~> 4.2.0'
         | 
| 4 | 
            +
              platforms :ruby do
         | 
| 5 | 
            +
                gem 'mysql2', "< 0.5"
         | 
| 6 | 
            +
                gem 'pg', "~> 0.21"
         | 
| 7 | 
            +
                gem 'sqlite3', '~> 1.3.13'
         | 
| 8 | 
            +
              end
         | 
| 4 9 |  | 
| 5 | 
            -
              platforms : | 
| 6 | 
            -
                gem ' | 
| 10 | 
            +
              platforms :jruby do
         | 
| 11 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 12 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 13 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 7 14 | 
             
              end
         | 
| 8 15 | 
             
            end
         | 
| 9 16 |  | 
| 10 | 
            -
            appraise 'activerecord-5.0 | 
| 17 | 
            +
            appraise 'activerecord-5.0' do
         | 
| 11 18 | 
             
              gem 'activerecord', '~> 5.0.0'
         | 
| 12 | 
            -
               | 
| 19 | 
            +
              platforms :ruby do
         | 
| 20 | 
            +
                gem 'mysql2'
         | 
| 21 | 
            +
                gem 'pg'
         | 
| 22 | 
            +
                gem 'sqlite3', '~> 1.3.13'
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              platforms :jruby do
         | 
| 26 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 27 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 28 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 29 | 
            +
              end
         | 
| 13 30 | 
             
            end
         | 
| 14 31 |  | 
| 15 | 
            -
            appraise 'activerecord-5. | 
| 16 | 
            -
              gem 'activerecord', '~> 5. | 
| 32 | 
            +
            appraise 'activerecord-5.1' do
         | 
| 33 | 
            +
              gem 'activerecord', '~> 5.1.0'
         | 
| 34 | 
            +
              platforms :ruby do
         | 
| 35 | 
            +
                gem 'mysql2'
         | 
| 36 | 
            +
                gem 'pg'
         | 
| 37 | 
            +
                gem 'sqlite3', '~> 1.3.13'
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              platforms :jruby do
         | 
| 41 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 42 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 43 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            appraise 'activerecord-5.2' do
         | 
| 48 | 
            +
              gem 'activerecord', '~> 5.2.0'
         | 
| 49 | 
            +
              platforms :ruby do
         | 
| 50 | 
            +
                gem 'mysql2'
         | 
| 51 | 
            +
                gem 'pg'
         | 
| 52 | 
            +
                gem 'sqlite3'
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              platforms :jruby do
         | 
| 56 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 57 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 58 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            appraise 'activerecord-6.0' do
         | 
| 63 | 
            +
              gem 'activerecord', '~> 6.0.0'
         | 
| 64 | 
            +
              platforms :ruby do
         | 
| 65 | 
            +
                gem 'mysql2'
         | 
| 66 | 
            +
                gem 'pg'
         | 
| 67 | 
            +
                gem 'sqlite3'
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              platforms :jruby do
         | 
| 71 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 72 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 73 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            appraise 'activerecord-6.1' do
         | 
| 78 | 
            +
              gem 'activerecord', '~> 6.1.0'
         | 
| 79 | 
            +
              platforms :ruby do
         | 
| 80 | 
            +
                gem 'mysql2'
         | 
| 81 | 
            +
                gem 'pg'
         | 
| 82 | 
            +
                gem 'sqlite3'
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              platforms :jruby do
         | 
| 86 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 87 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 88 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 89 | 
            +
              end
         | 
| 17 90 | 
             
            end
         | 
| 18 91 |  | 
| 19 92 | 
             
            appraise 'activerecord-edge' do
         | 
| 20 93 | 
             
              gem 'activerecord', github: 'rails/rails'
         | 
| 21 | 
            -
               | 
| 94 | 
            +
              platforms :ruby do
         | 
| 95 | 
            +
                gem 'mysql2'
         | 
| 96 | 
            +
                gem 'pg'
         | 
| 97 | 
            +
                gem 'sqlite3'
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
              platforms :jruby do
         | 
| 101 | 
            +
                gem 'activerecord-jdbcmysql-adapter'
         | 
| 102 | 
            +
                gem 'activerecord-jdbcpostgresql-adapter'
         | 
| 103 | 
            +
                gem 'activerecord-jdbcsqlite3-adapter'
         | 
| 104 | 
            +
              end
         | 
| 22 105 | 
             
            end
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,27 +1,79 @@ | |
| 1 1 | 
             
            # Changelog
         | 
| 2 2 |  | 
| 3 | 
            -
            ### 6.5.0
         | 
| 4 3 |  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 4 | 
            +
            ### 7.3.0
         | 
| 5 | 
            +
            - Ruby 3.0 support
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ### 7.2.0
         | 
| 8 | 
            +
            - Ruby 2.7 support
         | 
| 9 | 
            +
            - Ordering raw SQL argument wrapped with Arel.sql
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ### 7.1.0
         | 
| 12 | 
            +
            Closure Tree is now tested against Rails 6.0
         | 
| 13 | 
            +
            - Directly require core_ext for String#strip_heredoc[PR 350](https://github.com/ClosureTree/closure_tree/pull/350) 
         | 
| 14 | 
            +
            - Call Module#module_parent instead of deprecated #parent[PR 354](https://github.com/ClosureTree/closure_tree/pull/354)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ### 7.0.0
         | 
| 17 | 
            +
            Closure Tree is now tested against Rails 5.2
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            - Postpone configuration (database introspection)[PR 264](https://github.com/ClosureTree/closure_tree/pull/264)
         | 
| 20 | 
            +
            - Fix "tree.find_by_path([])" [PR 288](https://github.com/ClosureTree/closure_tree/pull/288)
         | 
| 21 | 
            +
            - Fixed generator specs and added migration version [PR 292](https://github.com/ClosureTree/closure_tree/pull/292)
         | 
| 22 | 
            +
            - Eliminate deprecation warnings in ActiveRecord 5.2 [PR 296](https://github.com/ClosureTree/closure_tree/pull/296)
         | 
| 23 | 
            +
            - When using 'oracle_enhanced', remove 'AS' on the table_name alias. [PR 298](https://github.com/ClosureTree/closure_tree/pull/298)
         | 
| 24 | 
            +
            - README update [PR 301](https://github.com/ClosureTree/closure_tree/pull/301)
         | 
| 25 | 
            +
            - Add `with_descendant` finder [PR 302](https://github.com/ClosureTree/closure_tree/pull/302)
         | 
| 26 | 
            +
            - Fix pg version for rails prior 5.1 [PR 303](https://github.com/ClosureTree/closure_tree/pull/303)
         | 
| 27 | 
            +
            - Test on Rails 5.2 & fix mysql for older Rails [PR 304](https://github.com/ClosureTree/closure_tree/pull/304)
         | 
| 28 | 
            +
            - Test with ActiveRecord 5.2.0 [PR 307](https://github.com/ClosureTree/closure_tree/pull/307)
         | 
| 29 | 
            +
            - README update [PR 310](https://github.com/ClosureTree/closure_tree/pull/310)
         | 
| 30 | 
            +
            - FactoryBot linter failing for a model that uses closure_tree [PR 311](https://github.com/ClosureTree/closure_tree/pull/311)
         | 
| 31 | 
            +
            - Added dont_order_roots option [PR 312](https://github.com/ClosureTree/closure_tree/pull/312)
         | 
| 32 | 
            +
            - Added instance methods to determine the relationship between 2 nodes [PR 314](https://github.com/ClosureTree/closure_tree/pull/314)
         | 
| 33 | 
            +
            - Add an instance method to check the relationship between 2 nodes: #family_of? [PR 319](https://github.com/ClosureTree/closure_tree/pull/319)
         | 
| 34 | 
            +
            - Remove options restrictions on has_closure_tree_root [PR 321](https://github.com/ClosureTree/closure_tree/pull/321)
         | 
| 35 | 
            +
            - Fix uninitialized variable warnings [PR 323](https://github.com/ClosureTree/closure_tree/pull/323)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            ### 6.6.0
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            Closure Tree is now tested against Rails 5.1, and just passed 50 contributors and
         | 
| 40 | 
            +
            1000 stars on github! 🎉!
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            Note that Closure Tree has moved to a new "Closure Tree" github organization.
         | 
| 43 | 
            +
            **Future gem releases will be done by other contributors.**
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            * ActiveSupport 5.1 deprecation warnings were addressed in [PR
         | 
| 46 | 
            +
              262](https://github.com/ClosureTree/closure_tree/pull/262). Thanks, [Charles
         | 
| 47 | 
            +
              Pence](https://github.com/cpence)!
         | 
| 48 | 
            +
            * ActiveSupport 5.1 test failures were fixed in 
         | 
| 49 | 
            +
              [PR 280](https://github.com/ClosureTree/closure_tree/pull/280). 
         | 
| 50 | 
            +
              Thanks, [Bobby Uhlenbrock](https://github.com/uhlenbrock)!
         | 
| 51 | 
            +
            * A database connection was leaked at startup, fixed in [PR
         | 
| 52 | 
            +
              263](https://github.com/ClosureTree/closure_tree/pull/263). Thanks, [Andrey
         | 
| 53 | 
            +
              Novikov](https://github.com/Envek)!
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            ### 6.5.0
         | 
| 7 56 |  | 
| 57 | 
            +
            * Merged [PR 258](https://github.com/ClosureTree/closure_tree/pull/258) which
         | 
| 58 | 
            +
              improves hierarchy maintenance with large trees. Thanks, [Nikolay
         | 
| 59 | 
            +
              Bekirov](https://github.com/nbekirov)!
         | 
| 8 60 | 
             
            ### 6.4.0
         | 
| 9 61 |  | 
| 10 | 
            -
            * Merged [PR 236](https://github.com/ | 
| 62 | 
            +
            * Merged [PR 236](https://github.com/ClosureTree/closure_tree/pull/236) which adds documentation for `has_closure_tree_root`.
         | 
| 11 63 | 
             
            * Added ruby 2.4 and dropped Rails 4.1 from the build matrix.
         | 
| 12 64 |  | 
| 13 65 | 
             
            ### 6.3.0
         | 
| 14 66 |  | 
| 15 | 
            -
            * `prepend_child` [handles invalid children properly now](https://github.com/ | 
| 67 | 
            +
            * `prepend_child` [handles invalid children properly now](https://github.com/ClosureTree/closure_tree/issues/249).
         | 
| 16 68 | 
             
              Thanks [Amit Saxena](https://github.com/amitsaxena)!
         | 
| 17 69 | 
             
            * Dropped official support for jruby and ruby 2.0 (no code was changed)
         | 
| 18 70 |  | 
| 19 71 | 
             
            ### 6.2.0
         | 
| 20 72 |  | 
| 21 | 
            -
            * Fix for [MySQL lock lengths](https://github.com/ | 
| 73 | 
            +
            * Fix for [MySQL lock lengths](https://github.com/ClosureTree/closure_tree/issues/231).
         | 
| 22 74 | 
             
               Thanks to [Liam](https://github.com/hut8)!
         | 
| 23 | 
            -
            * [Tom Smyth](https://github.com/hooverlunch) added [eager tree loading](https://github.com/ | 
| 24 | 
            -
            * Merged [PR 200](https://github.com/ | 
| 75 | 
            +
            * [Tom Smyth](https://github.com/hooverlunch) added [eager tree loading](https://github.com/ClosureTree/closure_tree/pull/232)
         | 
| 76 | 
            +
            * Merged [PR 200](https://github.com/ClosureTree/closure_tree/pull/200) which may or may not add support to SQLServer 2008 (but this is not a supported RDBMS).
         | 
| 25 77 |  | 
| 26 78 | 
             
            ### 6.1.0
         | 
| 27 79 |  | 
| @@ -45,7 +97,7 @@ | |
| 45 97 | 
             
            * Dropped support for versions of Rails 3.2 and 4.0 (which are no longer supported).
         | 
| 46 98 | 
             
            * Dropped support for Ruby 1.9 and JRuby 1.9 (which are no longer supported).
         | 
| 47 99 | 
             
            * Added support for `.hash_tree` from `.parent` and `.children`. 
         | 
| 48 | 
            -
              Addresses [PR146](https://github.com/ | 
| 100 | 
            +
              Addresses [PR146](https://github.com/ClosureTree/closure_tree/pull/146).
         | 
| 49 101 | 
             
              Thanks for reporting this and the breaking test, [Mike](https://github.com/mkralla11)!
         | 
| 50 102 |  | 
| 51 103 | 
             
            ### 5.2.0
         | 
| @@ -56,7 +108,7 @@ | |
| 56 108 | 
             
            * [Ryan Selk](https://github.com/rselk) made several enhancements to the migration generation (thanks!).
         | 
| 57 109 | 
             
            * [ruok5](https://github.com/ruok5) updated the README to clarify a heirarchy maintenance usecase. Thanks!
         | 
| 58 110 | 
             
            * Made migrations error with a helpful message if the target didn't have the `has_closure_tree` or
         | 
| 59 | 
            -
              `acts_as_tree` annotation. This addresses [issue 131](https://github.com/ | 
| 111 | 
            +
              `acts_as_tree` annotation. This addresses [issue 131](https://github.com/ClosureTree/closure_tree/issues/131).
         | 
| 60 112 |  | 
| 61 113 | 
             
            ### 5.1.1
         | 
| 62 114 |  | 
| @@ -67,7 +119,7 @@ | |
| 67 119 |  | 
| 68 120 | 
             
            * [Abdelkader Boudih](https://github.com/seuros) added a database generator
         | 
| 69 121 | 
             
              for the hierarchies table. Thanks!
         | 
| 70 | 
            -
            * [Jason Weathered](https://github.com/jasoncodes) fixed [issue #117](https://github.com/ | 
| 122 | 
            +
            * [Jason Weathered](https://github.com/jasoncodes) fixed [issue #117](https://github.com/ClosureTree/closure_tree/pull/117)
         | 
| 71 123 | 
             
              with the preordered traversal code that assumed the primary key column was called `id`. Thanks!
         | 
| 72 124 |  | 
| 73 125 | 
             
            ### 5.0.0
         | 
| @@ -91,13 +143,13 @@ | |
| 91 143 |  | 
| 92 144 | 
             
            ### 4.6.2
         | 
| 93 145 |  | 
| 94 | 
            -
            * Pulled in [106](https://github.com/ | 
| 146 | 
            +
            * Pulled in [106](https://github.com/ClosureTree/closure_tree/pull/106) which fixed a bug introduced
         | 
| 95 147 | 
             
              in 4.6.0 which broke if the numeric ordering column wasn't named 'sort_order'. Tests have been
         | 
| 96 148 | 
             
              added. Thanks for the fix, [Fission Xuiptz](https://github.com/fissionxuiptz)!
         | 
| 97 149 |  | 
| 98 150 | 
             
            ### 4.6.1
         | 
| 99 151 |  | 
| 100 | 
            -
            * Address [issue 60](https://github.com/ | 
| 152 | 
            +
            * Address [issue 60](https://github.com/ClosureTree/closure_tree/issues/60) (use `.empty?` rather 
         | 
| 101 153 | 
             
              than `.nil?`—thanks for the suggestion, [Leonel Galán](https://github.com/leonelgalan),
         | 
| 102 154 | 
             
              [Doug Mayer](https://github.com/doxavore) and [Samnang Chhun](https://github.com/samnang)!
         | 
| 103 155 |  | 
| @@ -124,7 +176,7 @@ | |
| 124 176 |  | 
| 125 177 | 
             
            ### 4.4.0
         | 
| 126 178 |  | 
| 127 | 
            -
            * Added ```.self_and_descendant_ids``` and ```.self_and_ancestors_ids``` from [PR92](https://github.com/ | 
| 179 | 
            +
            * Added ```.self_and_descendant_ids``` and ```.self_and_ancestors_ids``` from [PR92](https://github.com/ClosureTree/closure_tree/pull/92).
         | 
| 128 180 | 
             
              Thanks, [Kir Shatrov](https://github.com/kirs)!
         | 
| 129 181 |  | 
| 130 182 | 
             
            * Dropped support for Rails 3.0.
         | 
| @@ -139,7 +191,7 @@ | |
| 139 191 | 
             
            ### 4.2.9
         | 
| 140 192 |  | 
| 141 193 | 
             
            * Support for Heroku's cray assets:precompile hack for Rails 4.
         | 
| 142 | 
            -
              Addresses [issue 78](https://github.com/ | 
| 194 | 
            +
              Addresses [issue 78](https://github.com/ClosureTree/closure_tree/issues/78).
         | 
| 143 195 | 
             
              Thanks for the assist, [Alex Bowman](https://github.com/axlekb).
         | 
| 144 196 |  | 
| 145 197 | 
             
            ### 4.2.8
         | 
| @@ -149,7 +201,7 @@ | |
| 149 201 | 
             
            ### 4.2.7
         | 
| 150 202 |  | 
| 151 203 | 
             
            * ```self_and_ancestors``` and ```ancestry_hierarchy``` are reloaded
         | 
| 152 | 
            -
              when nodes are reparented. Addresses [issue 68](https://github.com/ | 
| 204 | 
            +
              when nodes are reparented. Addresses [issue 68](https://github.com/ClosureTree/closure_tree/issues/68).
         | 
| 153 205 | 
             
              Thanks for the assist, [Ivan Stana](https://github.com/istana).
         | 
| 154 206 |  | 
| 155 207 | 
             
            ### 4.2.6
         | 
| @@ -169,12 +221,12 @@ | |
| 169 221 | 
             
            ### 4.2.4
         | 
| 170 222 |  | 
| 171 223 | 
             
            * Support for ```root?```, ```child?```, and proper parent-child associations
         | 
| 172 | 
            -
              when both the parent and the child are not persisted. Addresses [issue 64](https://github.com/ | 
| 224 | 
            +
              when both the parent and the child are not persisted. Addresses [issue 64](https://github.com/ClosureTree/closure_tree/issues/64).
         | 
| 173 225 | 
             
              Thanks for the help, [Gabriel Mazetto](https://github.com/brodock)!
         | 
| 174 226 |  | 
| 175 227 | 
             
            ### 4.2.3
         | 
| 176 228 |  | 
| 177 | 
            -
            * Fixed ```attr_accessible?``` error introduced in 4.2.2 ([issue 66](https://github.com/ | 
| 229 | 
            +
            * Fixed ```attr_accessible?``` error introduced in 4.2.2 ([issue 66](https://github.com/ClosureTree/closure_tree/issues/66)).
         | 
| 178 230 | 
             
            * Switched to use new WithAdvisoryLock::DatabaseAdapterSupport (in v0.0.9) to add Postgis support
         | 
| 179 231 |  | 
| 180 232 | 
             
            ### 4.2.2
         | 
| @@ -204,11 +256,11 @@ | |
| 204 256 |  | 
| 205 257 | 
             
            * Numeric, deterministically ordered siblings will always be [0..#{self_and_siblings.count}]
         | 
| 206 258 | 
             
              (previously, the sort order might use negative values, which broke the preordering).
         | 
| 207 | 
            -
              Resolves [issue 49](https://github.com/ | 
| 259 | 
            +
              Resolves [issue 49](https://github.com/ClosureTree/closure_tree/issues/49). Thanks for the help,
         | 
| 208 260 | 
             
              [Leonel Galan](https://github.com/leonelgalan), [Juan Hoyos](https://github.com/elhoyos), and
         | 
| 209 261 | 
             
              [Michael Elfassy](https://github.com/elfassy)!
         | 
| 210 262 |  | 
| 211 | 
            -
            * The ```order``` option can be a symbol now. Resolves [issue 46](https://github.com/ | 
| 263 | 
            +
            * The ```order``` option can be a symbol now. Resolves [issue 46](https://github.com/ClosureTree/closure_tree/issues/46).
         | 
| 212 264 |  | 
| 213 265 | 
             
            ### 4.0.0
         | 
| 214 266 |  | 
| @@ -223,22 +275,22 @@ | |
| 223 275 | 
             
            ### 3.10.2
         | 
| 224 276 |  | 
| 225 277 | 
             
            * Prevent faulty SQL statement when ```#siblings``` is called on an unsaved records.
         | 
| 226 | 
            -
              Resolves [issue 52](https://github.com/ | 
| 278 | 
            +
              Resolves [issue 52](https://github.com/ClosureTree/closure_tree/pull/52). Perfect pull
         | 
| 227 279 | 
             
              request by [Gary Greyling](https://github.com/garygreyling).
         | 
| 228 280 |  | 
| 229 281 | 
             
            * The ```.roots``` class method now correctly respects the ```:order``` option.
         | 
| 230 | 
            -
              Resolves [issue 53](https://github.com/ | 
| 282 | 
            +
              Resolves [issue 53](https://github.com/ClosureTree/closure_tree/issues/53).
         | 
| 231 283 | 
             
              Thanks for finding this, [Brendon Muir](https://github.com/brendon)!
         | 
| 232 284 |  | 
| 233 285 | 
             
            ### 3.10.1
         | 
| 234 286 |  | 
| 235 287 | 
             
            * Multipart constant names like "Admin::PageHierarchy" are now supported.
         | 
| 236 | 
            -
              Resolves [issue 47](https://github.com/ | 
| 288 | 
            +
              Resolves [issue 47](https://github.com/ClosureTree/closure_tree/issues/47).
         | 
| 237 289 | 
             
              Thanks for the perfect pull request, [Simon Menke](https://github.com/fd)!
         | 
| 238 290 |  | 
| 239 291 | 
             
            * Committing transactions involving large numbers of hierarchy model classes was very slow due
         | 
| 240 292 | 
             
              to hash collisions in the hierarchy class. A better hash implementation addressed
         | 
| 241 | 
            -
              [issue 48](https://github.com/ | 
| 293 | 
            +
              [issue 48](https://github.com/ClosureTree/closure_tree/issues/48).
         | 
| 242 294 | 
             
              Thanks, [Joel Turkel](https://github.com/jturkel)!
         | 
| 243 295 |  | 
| 244 296 | 
             
            ### 3.10.0
         | 
| @@ -267,19 +319,19 @@ All three of these improvements were suggested by Andrew Bromwich. Thanks! | |
| 267 319 | 
             
            ### 3.8.0
         | 
| 268 320 |  | 
| 269 321 | 
             
            * Support for preordered descendants. This requires a numeric sort order column.
         | 
| 270 | 
            -
              Resolves [feature request 38](https://github.com/ | 
| 322 | 
            +
              Resolves [feature request 38](https://github.com/ClosureTree/closure_tree/issues/38).
         | 
| 271 323 | 
             
            * Moved modules from ```acts_as_tree``` into separate files
         | 
| 272 324 |  | 
| 273 325 | 
             
            ### 3.7.3
         | 
| 274 326 |  | 
| 275 327 | 
             
            Due to MySQL's inability to lock rows properly, I've switched to advisory_locks for
         | 
| 276 328 | 
             
            all write paths. This will prevent deadlocks, addressing
         | 
| 277 | 
            -
            [issue 41](https://github.com/ | 
| 329 | 
            +
            [issue 41](https://github.com/ClosureTree/closure_tree/issues/41).
         | 
| 278 330 |  | 
| 279 331 | 
             
            ### 3.7.2
         | 
| 280 332 |  | 
| 281 333 | 
             
            * Support for UUID primary keys. Addresses
         | 
| 282 | 
            -
              [issue 40](https://github.com/ | 
| 334 | 
            +
              [issue 40](https://github.com/ClosureTree/closure_tree/issues/40). Thanks for the pull request,
         | 
| 283 335 | 
             
              [Julien](https://github.com/calexicoz)!
         | 
| 284 336 |  | 
| 285 337 | 
             
            ### 3.7.1
         | 
| @@ -290,7 +342,7 @@ all write paths. This will prevent deadlocks, addressing | |
| 290 342 | 
             
            ### 3.7.0
         | 
| 291 343 |  | 
| 292 344 | 
             
            **Thread safety!**
         | 
| 293 | 
            -
            * [Advisory locks](https://github.com/ | 
| 345 | 
            +
            * [Advisory locks](https://github.com/ClosureTree/with_advisory_lock) were
         | 
| 294 346 | 
             
              integrated with the class-level ```find_or_create_by_path``` and ```rebuild!```.
         | 
| 295 347 | 
             
            * Pessimistic locking is used by the instance-level ```find_or_create_by_path```.
         | 
| 296 348 |  | 
| @@ -303,7 +355,7 @@ wasting time on the ruby side. | |
| 303 355 | 
             
            ### 3.6.7
         | 
| 304 356 |  | 
| 305 357 | 
             
            * Added workaround for ActiveRecord::Observer usage pre-db-creation. Addresses
         | 
| 306 | 
            -
              [issue 32](https://github.com/ | 
| 358 | 
            +
              [issue 32](https://github.com/ClosureTree/closure_tree/issues/32).
         | 
| 307 359 | 
             
              Thanks, [Don Morrison](https://github.com/elskwid)!
         | 
| 308 360 |  | 
| 309 361 | 
             
            ### 3.6.6
         | 
| @@ -314,28 +366,28 @@ Thanks, [James Miller](https://github.com/bensie)! | |
| 314 366 | 
             
            ### 3.6.5
         | 
| 315 367 |  | 
| 316 368 | 
             
            * Use ```quote_table_name``` instead of ```quote_column_name```. Addresses
         | 
| 317 | 
            -
             [issue 29](https://github.com/ | 
| 369 | 
            +
             [issue 29](https://github.com/ClosureTree/closure_tree/issues/29). Thanks,
         | 
| 318 370 | 
             
             [Marcello Barnaba](https://github.com/vjt)!
         | 
| 319 371 |  | 
| 320 372 | 
             
            ### 3.6.4
         | 
| 321 373 |  | 
| 322 374 | 
             
            * Use ```.pluck``` when available for ```.ids_from```. Addresses
         | 
| 323 | 
            -
             [issue 26](https://github.com/ | 
| 375 | 
            +
             [issue 26](https://github.com/ClosureTree/closure_tree/issues/26). Thanks,
         | 
| 324 376 | 
             
             [Chris Sturgill](https://github.com/sturgill)!
         | 
| 325 377 |  | 
| 326 378 | 
             
            ### 3.6.3
         | 
| 327 379 |  | 
| 328 | 
            -
            * Fixed [issue 24](https://github.com/ | 
| 380 | 
            +
            * Fixed [issue 24](https://github.com/ClosureTree/closure_tree/issues/24), which optimized ```#hash_tree```
         | 
| 329 381 | 
             
              for roots. Thanks, [Saverio Trioni](https://github.com/rewritten)!
         | 
| 330 382 |  | 
| 331 383 | 
             
            ### 3.6.2
         | 
| 332 384 |  | 
| 333 | 
            -
            * Fixed [issue 23](https://github.com/ | 
| 385 | 
            +
            * Fixed [issue 23](https://github.com/ClosureTree/closure_tree/issues/23), which added support for ```#siblings```
         | 
| 334 386 | 
             
              when sort_order wasn't specified. Thanks, [Gary Greyling](https://github.com/garygreyling)!
         | 
| 335 387 |  | 
| 336 388 | 
             
            ### 3.6.1
         | 
| 337 389 |  | 
| 338 | 
            -
            * Fixed [issue 20](https://github.com/ | 
| 390 | 
            +
            * Fixed [issue 20](https://github.com/ClosureTree/closure_tree/issues/20), which affected
         | 
| 339 391 | 
             
              deterministic ordering when siblings where different STI classes. Thanks, [edwinramirez](https://github.com/edwinramirez)!
         | 
| 340 392 |  | 
| 341 393 | 
             
            ### 3.6.0
         | 
| @@ -345,16 +397,16 @@ Added support for: | |
| 345 397 | 
             
            * ActiveRecord::Base.table_name_prefix
         | 
| 346 398 | 
             
            * ActiveRecord::Base.table_name_suffix
         | 
| 347 399 |  | 
| 348 | 
            -
            This addresses [issue 21](https://github.com/ | 
| 400 | 
            +
            This addresses [issue 21](https://github.com/ClosureTree/closure_tree/issues/21). Thanks, [Judd Blair](https://github.com/juddblair)!
         | 
| 349 401 |  | 
| 350 402 | 
             
            ### 3.5.2
         | 
| 351 403 |  | 
| 352 404 | 
             
            * Added ```find_all_by_generation```
         | 
| 353 | 
            -
              for [feature request 17](https://github.com/ | 
| 405 | 
            +
              for [feature request 17](https://github.com/ClosureTree/closure_tree/issues/17).
         | 
| 354 406 |  | 
| 355 407 | 
             
            ### 3.4.2
         | 
| 356 408 |  | 
| 357 | 
            -
            * Fixed [issue 18](https://github.com/ | 
| 409 | 
            +
            * Fixed [issue 18](https://github.com/ClosureTree/closure_tree/issues/18), which affected
         | 
| 358 410 | 
             
              append_node/prepend_node ordering when the first node didn't have an explicit order_by value
         | 
| 359 411 |  | 
| 360 412 | 
             
            ### 3.4.1
         | 
| @@ -363,7 +415,7 @@ This addresses [issue 21](https://github.com/mceachen/closure_tree/issues/21). T | |
| 363 415 |  | 
| 364 416 | 
             
            ### 3.4.0
         | 
| 365 417 |  | 
| 366 | 
            -
            Fixed [issue 15](https://github.com/ | 
| 418 | 
            +
            Fixed [issue 15](https://github.com/ClosureTree/closure_tree/issues/15):
         | 
| 367 419 | 
             
            * "parent" is now attr_accessible, which adds support for constructor-provided parents.
         | 
| 368 420 | 
             
            * updated readme accordingly
         | 
| 369 421 |  | 
| @@ -373,7 +425,7 @@ Fixed [issue 15](https://github.com/mceachen/closure_tree/issues/15): | |
| 373 425 |  | 
| 374 426 | 
             
            ### 3.3.1
         | 
| 375 427 |  | 
| 376 | 
            -
            * Added support for partially-unsaved hierarchies [issue 13](https://github.com/ | 
| 428 | 
            +
            * Added support for partially-unsaved hierarchies [issue 13](https://github.com/ClosureTree/closure_tree/issues/13):
         | 
| 377 429 | 
             
            ```
         | 
| 378 430 | 
             
            a = Tag.new(name: "a")
         | 
| 379 431 | 
             
            b = Tag.new(name: "b")
         | 
| @@ -388,7 +440,7 @@ a.save | |
| 388 440 | 
             
            ### 3.2.1
         | 
| 389 441 |  | 
| 390 442 | 
             
            * Added ```ancestor_ids```, ```descendant_ids```, and ```sibling_ids```
         | 
| 391 | 
            -
            * Added example spec to solve [issue 9](https://github.com/ | 
| 443 | 
            +
            * Added example spec to solve [issue 9](https://github.com/ClosureTree/closure_tree/issues/9)
         | 
| 392 444 |  | 
| 393 445 | 
             
            ### 3.2.0
         | 
| 394 446 |  | 
| @@ -400,7 +452,7 @@ a.save | |
| 400 452 |  | 
| 401 453 | 
             
            ### 3.0.4
         | 
| 402 454 |  | 
| 403 | 
            -
            * Merged [pull request](https://github.com/ | 
| 455 | 
            +
            * Merged [pull request](https://github.com/ClosureTree/closure_tree/pull/8) to fix ```.siblings``` and ```.self_and_siblings```
         | 
| 404 456 | 
             
              (Thanks, [eljojo](https://github.com/eljojo)!)
         | 
| 405 457 |  | 
| 406 458 | 
             
            ### 3.0.3
         | 
| @@ -415,7 +467,7 @@ a.save | |
| 415 467 |  | 
| 416 468 | 
             
            ### 3.0.1
         | 
| 417 469 |  | 
| 418 | 
            -
            * Support 3.2.0's fickle deprecation of InstanceMethods (Thanks, [jheiss](https://github.com/ | 
| 470 | 
            +
            * Support 3.2.0's fickle deprecation of InstanceMethods (Thanks, [jheiss](https://github.com/ClosureTree/closure_tree/pull/5))!
         | 
| 419 471 |  | 
| 420 472 | 
             
            ### 3.0.0
         | 
| 421 473 |  |