Added missing test case for migrations when using sql structure
Restore test deliveries for ActionMailer.
copy edits [ci skip]
Revert "Convert StrongParameters cache to a hash. This fixes an unbounded"

We cannot cache keys because arrays are mutable. We rather want to cache
the arrays. This behaviour is tailor-made for the usage pattern strongs
params is designed for.

In a forthcoming commit I am going to add a test that covers why we need
to cache by value.

Every strong params instance has a live span of a request, the cache goes
away with the object. Since strong params have such a concrete intention,
it would be interesting to see if there are actually any real-world use
cases that are an actual leak, one that practically may matter.

I am not convinced that the theoretical leak has any practical consequences,
but if it can be shown there are, then I believe we should either get rid of
the cache (which is an optimization), or else wipe it in the mutating API.

This reverts commit e63be2769c039e4e9ada523a8497ce3206cc8a9b.
adds a regression test for the strong params converted arrays cache

This is a regression test for 29844dd.
adds some details to the rationale of converted_arrays [ci skip]
Add array support when time zone aware attributes are enabled
Merge pull request #15556 from sgrif/sg-time-zone-aware-arrays

Add array support when time zone aware attributes are enabled
Don't query the database schema when calling `serialize`

We need to decorate the types lazily. This is extracted to a separate
API, as there are other refactorings that will be able to make use of
it, and to allow unit testing the finer points more granularly.
Rename `property` to `attribute`

For consistency with https://github.com/rails/rails/pull/15557
changelog for #15556 and credit @kuldeepaggarwal [Kuldeep Aggarwal]

This is a follow up to #15556

@kuldeepaggarwal did submit this patch way back (#13624).
Correct Example output in Rails guides [ci skip]
Don't rely on `Time.current` in tests

Millisecond inequality causes failures on Travis
Merge pull request #15557 from sgrif/sg-specify-time-zone

Specify a time zone when testing TZ aware attributes
Ensure time zones don't change after round trip with array columns

The times would be equivalent, even if they were in different time
zones. E.g. 12:00 UTC == 5:00 PDT
Remove duplicated `@raw_attributes.keys`

Reduces the number of things outside of attribute methods that cares
about the details of how we store and type cast attributes
Merge pull request #15563 from sgrif/sg-raw-attributes-access

Remove duplicated `@raw_attributes.keys`
Remove dead branch when restoring ID within a transaction

There is no way to have an instance of an Active Record model where
`has_attribute?(self.class.primary_key)` returns false. The record is
always initialized in such a way that `@raw_attributes` will have an id
key with nil for the value.
Move conditionals about freezing closer to the definition of `freeze`

Reduces the number of places that care about the internals of how we
store and type cast attributes. We do not need to go through the
dup/freeze dance, as you couldn't have saved a frozen new record anyway,
and that is the only time we would end up modifying the frozen hash.
Merge pull request #15565 from sgrif/sg-no-unfreezing

Move conditionals about freezing closer to the definition of `freeze`