Mime::Mimes#symbols should return a always up to date reference:
- Original issue was reported in https://github.com/rails/rails/issues/38094 and a fix attempted in https://github.com/rails/rails/pull/38126 but it's not the proper fix I think. TL;DR Is that `ActionView::Base.default_formats` holds a copy of mime symbols at the time ActionView::Base is loaded. So if you try to register mime types after ActionView Base is loaded then it won't work. ```ruby ActionView::Base.default_formats ||= Mime::SET.symbols # Note that this is automatically done when ActionView get loaded https://github.com/rails/rails/blob/22483b86a6c779743b30e2f23bb46accfbf96b28/actionpack/lib/action_dispatch.rb#L117 Mime::Type.register_alias "application/xhtml+xml", :foobar puts ActionView::base.defaults_formats.include?(:foobar) # => false ``` Same issue if you try to unregister a mime after ActionView is loaded. That's what was happening in the flaky test: ``` Mime::Type.register_alias "application/xhtml+xml", :foobar ActionView::Base.default_formats ||= Mime::SET.symbols puts ActionView::base.defaults_formats.include?(:foobar) # => true Mime::Type.unregister(:foobar) puts ActionView::base.defaults_formats.include?(:foobar) # => true ``` ### Solution Return a refence to `@symbols` which is updated each time a new mime is registered/unregistered.
Showing
想要评论请 注册 或 登录