diff options
author | James Tucker <jftucker@gmail.com> | 2012-06-18 16:49:03 -0700 |
---|---|---|
committer | James Tucker <jftucker@gmail.com> | 2012-06-18 16:49:03 -0700 |
commit | 0b4e8c8d84fe4f66e85cf7cfeebe604e0f2849db (patch) | |
tree | 87bec311722d7dbdb436c5b15d152e6385e275c8 /actionmailer/MIT-LICENSE | |
parent | 7fe0f27e2b97a2f175b31b97d14f92473688f66a (diff) | |
download | rails-0b4e8c8d84fe4f66e85cf7cfeebe604e0f2849db.tar.gz rails-0b4e8c8d84fe4f66e85cf7cfeebe604e0f2849db.tar.bz2 rails-0b4e8c8d84fe4f66e85cf7cfeebe604e0f2849db.zip |
Ensure that cache-control headers are merged
There are several aspects to this commit, that don't well fit into broken down
commits, so they are detailed here:
* When a user uses response.headers['Cache-Control'] = some_value, then the
documented convention in ConditionalGet is not adhered to, in this case,
response.cache_control is ignored due to `return if
self[CACHE_CONTROL].present?`
* When a middleware sets cache-control headers that would clobber, they're
converted to symbols directly, without underscores. This would lead to bugs.
* Items that would live in :extras if set through expires_in, are placed
directly in the @cache_control hash, and not respected in many cases
(somewhat adhering to the aforementioned documentation).
* Although quite useless, any directive named 'extras' would be ignored.
The general convention applied is that expires_* take precedence, but no longer
overwrite everything and expires_* are ALWAYS applied, even if the header is
set.
I am still unhappy about the contents of this commit, and the code in general.
Ideally it should be refactored to no longer use :extras. I'd likely recommend
expanding @cache_control into a class, and giving it the power to handle the
merge in a more efficient fashion. Such a commit would be a larger change that
could have additional semantic changes for other libraries unless they utilize
expires_in in very standard ways.
Diffstat (limited to 'actionmailer/MIT-LICENSE')
0 files changed, 0 insertions, 0 deletions