Use NameError#name to assert raised error.

This makes the test compatible with other Ruby implementations, which
may implement error messages differently.
Upgraded rack
As Rack has some non backwards compatible changes added required
modifications to keep behaviour in rails close to same as before.

Also modified generators to include rack/rack for not yet released
version of rack
Since upgrading rack we can remove unnecessary string encodings
https://github.com/rack/rack/commit/5a5aee36
If a counter_cache exists, use it for #empty?
Fixed a regression introduced in 84cf156

84cf156 (PR #15694) introduced a subtle regression. There are actually three
distinct entry points to creating an AR object – via .new (i.e. #initialize),
via #init_with (e.g. from YAML or database queries) and via .allocate.

With the patch in 84cf156, attribute methods and respond_to? will not work
correctly when objects are allocated directly, without going through either

The reason this test case didn't catch the regression was that the `Topic`
class is shared between test cases, so by the time this test case is ran the
attribute methods are very likely to be defined.

Switching to use a fresh anonymous class in the test to ensure we surface this
problem in the future.
Dont swallow errors when bad alias_method
remove Set.new from DetailsKey::get, impacts rendering overhead performance

Using ruby-prof, I noticed that Set#add had the largest 'self time'
percentage (5% of the overall time spent rendering) when
benchmarking the rendering of a small cached ERB template that was 3
lines long. It turns out it was from this line. I don't believe the
Set is necessary, either. Removing this line increases the rendering
ips using Benchmark::ips accordingly.
[ci skip] Add return values to examples
[ci skip] Consolidate docs for `first`

Add docs for `first` when provided a numerical argument. 

Since `first!` behaves exactly the same way but can raise an argument we can consolidate it in the `first` section.
[ci skip] Consolidate docs for `find_by`

Since `find_by!` behaves exactly the same way but can raise an argument we can consolidate it in the `find_by` section.
[ci skip] Consolidate docs for `take`

Add docs on what happens when a numerical argument is provided to take.

Since `take!` behaves exactly the same way but can raise an argument we can consolidate it in the `take` section.
[ci skip] Consolidate docs for `last`

Add docs on what happens when a numerical argument is provided to last.

Since `last!` behaves exactly the same way but can raise an argument we can consolidate it in the `last` section.
[ci skip] Consolidate docs for `find`

Put all options for overloading `find` in one section
[ci skip] Doc ability to chain in `find_each`

Also use appropriate mailer syntax in the `find_each` block.
[ci skip] Fix doc for except

The example showed is `except`, however the method "documented" is `unstop`. Fix to align the docs to the example.
[ci skip] remove invalid code from docs
Remove PG's definition of `type_cast`

All cases except for `nil` in an array have been removed. `nil` in an
array is handled by the Array type object.
Don't rely on the sql type to quote XML columns in PG
Prefer find_by over where.first for record
Reduce number of subscriptions created.