Remove sqlite specific`supports_autoincrement?` which always defaults to true
fixed a doc bug in the CHANGELOG.md s/does no longer depend on/no longer depends on/
Use ActiveRecord::Base#update! instead of #update_attributes!
Just change ENV and restore it afterwards.

Stubbing ENV[] is not safe outside MRI. At some point after the
stubbing has occurred a backtrace is printed to the ActiveSupport
warning log: there Rubinius accesses ENV['RBX_NOCOLOR'] to determine
if it should print the backtrace with colors or not, causing the
stub to fail. Other implementations might access ENV in a different
way too, we just can't predict it.
The only thing we can do here is to actually set the ENV with what
we want and restore it afterwards.
Assert presence of "frozen" in error message, not the full MRI message.

Related to all the other issues regarding message independent assertions
to make Rails compatible with other Ruby implementations other than MRI.

The best way here would be to have a specific error raised when modifying
frozen objects, like FrozenObjectError or something. But since Ruby
doesn't provide such a thing, we must limit the assertion to the lowest
common denominator, which is word "frozen".
Allow methods arity below -1 in assert_responds.

Every method from MRI's core classes is written in C. This means
Method#arity always returns -1 for methods with a variable number of
arguments. This is not the case with Rubinius, where, for example
Array#slice! is implemented in Ruby and has arity -2, since is
defined as def slice!(start, length = undefined)
Fixes #11773 when using includes combined with select, the select statement was overwritten.
store join parts in a tree
generate the association hash from the top down

This prevents us from walking back up the parent tree once for each
leaf.
do not convert the tree to a list just for the first node
walk the tree rather than generating a hash and walking it
rename the variable to make more sense with a tree
reduce number of comparisons and array allocations

Just inspecting the children nodes will reduce the number of comparisons
we have to do (since it is limited to the child size)
parent is guaranteed to be the same

since we are searching a tree, the current level should be consistent,
so we don't have to inspect the parent class / table
we do not need to to_s the name all the time
we will always detect the same node, so just pass the node in
eliminate function that is only used in one place
names are guaranteed to be symbols
Define the association extensions without need to have a builder
instance
convert JoinBase to a tree and remove the Node class