• J
    Ensure that cache-control headers are merged · 0b4e8c8d
    James Tucker 提交于
    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.
    0b4e8c8d
cache.rb 4.6 KB