Avoid namespacing routes inside engines

Since #11544, invoking the controller generator, any generated route is
namespaced according to the class_path method. Since a mountable plugin
is namespaced, creating a controller inside would generate a namespaced
route based on the engine's name.

The controller generator now relies on regular_class_path which does not
contain the class hierarchy but the given path.

Fixes #14079.
move PostgreSQL UUID tests from `datatype_test.rb` to `uuid_test.rb`.
extract common code in `uuid_test.rb`.
[ci skip] Move association class method notes

Make explanation of association class methods clearer by moving notes to beginning of each example section.
Merge pull request #14211 from loganhasson/master

[ci skip] Move association class method notes
Merge branch 'master' into adequaterecord

* master: (55 commits)
  [ci skip] Move association class method notes
  extract common code in `uuid_test.rb`.
  move PostgreSQL UUID tests from `datatype_test.rb` to `uuid_test.rb`.
  [ci skip] remove guide section on models in migrations
  test case for custom PostgreSQL enum type.
  Remove inclusion of rubysl gem for rbx on generated Gemfile
  let `insert_record` actuall save the object.
  [skip ci] Fix test name typo in app generator tests.
  travis s/2.1.0/2.1.1
  Bump version of bcrypt gem
  Skip test_migrate_revert_add_index_with_name if databases do not allow to create duplicate indexes on the same columns
  Optimize getting started guide images, and use png instead of jpg
  :scissors: [ci skip]
  Point master changelogs to 4-1-stable branch
  Add missing parantheses in index_exists?
  `ActionDispatch::Head` was replaced by `Rack::Head`. Closes #14191.
  [skip ci] Standardized punctuation.
  [skip ci] Fix typo in link_to :method option description
  refactor, with_locale is not needed because I18n is mocked.
  Fix ActionView label translation for more than 10 nested elements
  ...
Fix controller test not resetting @_url_options

Commit 4f2cd3e9 introduced a bug by reordering the call to
`@controller.recycle!` above the call to `build_request_uri`. The
impact of this was that the `@_url_options` cache ends up not being
reset between building a request URI (occurring within the test
controller) and the firing of the actual request.

We encountered this bug because we had the following setup:

  class MinimumReproducibleController < ActionController::Base
    before_filter { @param = 'param' }

    def index
      render text: url_for(params)
    end

    def default_url_options
      { custom_opt: @param }
    end
  end

  def test_index
    get :index # builds url, then fires actual request
  end

The first step in  `get :index` in the test suite would populate the
@_url_options cache. The subsequent call to `url_for` inside of the
controller action would then utilize the uncleared cache, thus never
calling the now-updated default_url_options.

This commit fixes this bug calling recycle! twice, and removes a call
to set response_body, which should no longer be needed since we're
recycling the request object explicitly.
[ci skip] Update list of files extensions in rake notes guide
Merge pull request #14215 from robertomiranda/docs-rake-notes

[ci skip] Update list of files extensions in rake notes guide
pass the class name to `tableize`

We should not rely on to_s to return the name of the class
speed up `underscore` in cases that don't need to do anything

Benchmark:

Benchmark.ips do |x|
  x.report("home")       { "home".underscore }
  x.report("Home")       { "Home".underscore }
  x.report("homeBase")   { "homeBase".underscore }
  x.report("home::base") { "home::base".underscore }
end

Before:

Calculating -------------------------------------
                home      2598 i/100ms
                Home      2463 i/100ms
            homeBase      2300 i/100ms
          home::base      2086 i/100ms
-------------------------------------------------
                home    28522.3 (±14.7%) i/s -     140292 in   5.065102s
                Home    29165.8 (±14.9%) i/s -     140391 in   5.000475s
            homeBase    26218.5 (±7.1%) i/s -     131100 in   5.030485s
          home::base    27712.3 (±5.9%) i/s -     139762 in   5.064077s

After:

Calculating -------------------------------------
                home     23163 i/100ms
                Home      2432 i/100ms
            homeBase      2160 i/100ms
          home::base      2265 i/100ms
-------------------------------------------------
                home  1501614.8 (±10.2%) i/s -    7412160 in   5.009540s
                Home    28754.0 (±8.5%) i/s -     143488 in   5.033886s
            homeBase    25331.1 (±5.6%) i/s -     127440 in   5.047940s
          home::base    27089.9 (±5.5%) i/s -     135900 in   5.033516s
pass strings to the underscore method
Merge pull request #14105 from twooster/fix-controller-tests

Fix controller test not resetting @_url_options
Pass strings to demodulize method

Goes along with fea1cdcff4d50d302d8e8532432c3ab107ff816d and
59ec4562a2e70df455b2e44a67c340fa5254e26e.
Fix some validators when used on model instance

Now that Validator #setup is called from the initializer, we need a
reference to the model's class to be passed in to allow the validators
to continue functioning when used at the instance level.

Closes #14134.
Fixes docs typo in nested resource path helpers [skip ci]
Fix concerning module reference [ci skip]
Merge pull request #14216 from garethson/routes-docs-typo

[skip ci] Fixes docs typo in nested resource path helpers
Return a hash rather than array from fetch_multi

The current implementation of `fetch_multi` returns an array and has no
means to easily backtrack which names yielded which results. By changing
the return value to a Hash we retain the name information. Hash#values
can be used on the response if only the values are needed.
Merge pull request #11481 from sorentwo/fetch-multi-hash

Cache#fetch_multi returns a Hash instead of an Array