-
-
Notifications
You must be signed in to change notification settings - Fork 122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MIME::Types#type_for doesn't find an extension added with MIME::Type#add_extensions #84
Comments
I need to think about how to do this, but it is a bug. |
I see in the History.rdoc that this deprecation happened in 2013, but I don't see the reasoning behind the API change. Any insight on why it was deprecated? |
@mehulkar it’s something that should not be worried about by the consumer of the library. I just need to figure out how to hook this in. I don’t think I can fix this until 3.x when a feature introduced in an upcoming release becomes default behaviour. |
I see, thanks for the response @halostatue. I use |
What I’m saying is that MIME::Types["application/octet-stream"].first.add_extensions("mo")
MIME::Types.index_extensions
MIME::Types.of('filename.mo').first.to_s # => returns "application/octet-stream" should be: MIME::Types["application/octet-stream"].first.add_extensions("mo")
MIME::Types.of('filename.mo').first.to_s # => returns "application/octet-stream" That it isn’t is a bug. Right now, MIME::Types don’t known anything about the container(s) that they belong to. With the columnar store implementation we are creating is that knowledge, but I’m not hooking this particular behaviour in place quite yet (because extensions are loaded first). I prefer not leaving this bug in place, but I don’t have a good way to do this that doesn’t potentially result in cyclical dependencies or use a potentially unsafe weak reference or add an external dependency. I will figure it out for 3.0. |
Didn’t mean to close this one with the release. |
Do you think we can add a new public method to class MIME::Types
def add_type_extensions(type_id, *extensions)
type = self[type_id]
type.add_extensions(*extensions)
index_extensions!(type)
end
end I'd be happy to write the tests and submit a PR. |
We could also possibly make a |
We could also have a |
Just throwing out these ideas here. :-) BTW, thanks for all your work on this gem! |
I don’t see it happening in the 2.x release, and that API isn’t what I would want for this. Basically, that has the problem that Basically, there will be one of two ways that this works:
Those are the main methods I’m considering, but they are all bigger changes than I am comfortable with for 2.x. One of the nice things that I will have is that I’m probably going to drop Ruby 1.9 support with mime-types 3. |
- Require Ruby 2.0 or later. Resolves #97. - Remove deprecated methods. - Update known registries when a MIME type extension changes. Resolves #84. - Relicensed mime-types 3.0 as MIT only. Resolves #95. - Extracted data from this gem to mime-types-data; removed deprecated data. - Rewrote tests to better understand what is being tested—some of the tests were almost ten years old and didn’t make a lot of sense with this version. I have switched to minitest/spec with assertions. - Columnar data is now the default registry store.
- Require Ruby 2.0 or later. Resolves #97. - Remove deprecated methods. - Update known registries when a MIME type extension changes. Resolves #84. - Relicensed mime-types 3.0 as MIT only. Resolves #95. - Extracted data from this gem to mime-types-data; removed deprecated data. - Rewrote tests to better understand what is being tested—some of the tests were almost ten years old and didn’t make a lot of sense with this version. I have switched to minitest/spec with assertions. - Columnar data is now the default registry store. Because JSON is not required by default, this change resolves #85. - MIME::Types containers are now implemented with Set instead of Array to prevent data duplication. Resolves #79.
- Require Ruby 2.0 or later. Resolves #97. - Remove deprecated methods. - Update known registries when a MIME type extension changes. Resolves #84. - Relicensed mime-types 3.0 as MIT only. Resolves #95. - Extracted data from this gem to mime-types-data; removed deprecated data. - Rewrote tests to better understand what is being tested—some of the tests were almost ten years old and didn’t make a lot of sense with this version. I have switched to minitest/spec with assertions. - Columnar data is now the default registry store. Because JSON is not required by default, this change resolves #85. - MIME::Types containers are now implemented with Set instead of Array to prevent data duplication. Resolves #79.
== 3.0 / 2015-11-21 * 2 governance changes * This project and the related mime-types-data project are now exclusively MIT licensed. Resolves {#95}[mime-types/ruby-mime-types#95]. * All projects under the mime-types organization now have a standard code of conduct adapted from the {Contributor Covenant}[http://contributor-covenant.org]. This text can be found in the {Code-of-Conduct.rdoc}[Code-of-Conduct_rdoc.html] file. * 3 major changes * All methods deprecated in mime-types 2.x have been removed. * mime-types now requires Ruby 2.0 compatibility or later. Resolves {#97}[mime-types/ruby-mime-types#97]. * The registry data has been removed from mime-types and put into mime-types-data, maintained and released separately. It can be found at {mime-types-data}[https://github.com/mime-types/mime-types-data]. * 17 minor changes: * MIME::Type changes: * Changed the way that simplified types representations are creatd to reflect the fact that +x-+ prefixes are no longer considered special according to IANA. A simplified MIME type is case-folded to lowercase. A new keyword parameter, +remove_x_prefix+, can be provided to remove +x-+ prefixes. * Improved initialization with an Array works so that extensions do not need to be wrapped in another array. This means that <tt>%w(text/yaml yaml yml)</tt> works in the same way that <tt>['text/yaml', %w(yaml yml)]</tt> did (and still does). * Changed +priority_compare+ to conform with attributes that no longer exist. * Changed the internal implementation of extensions to use a frozen Set. * When extensions are set or modified with +add_extensions+, the primary registry will be informed of a need to reindex extensions. Resolves {#84}[mime-types/ruby-mime-types#84]. * The preferred extension can be set explicitly. If not set, it will be the first extension. If the preferred extension is not in the extension list, it will be added. * Improved how xref URLs are generated. * Converted +obsolete+, +registered+ and +signature+ to attr_accessors. * MIME::Types changes: * Modified MIME::Types.new to track instances of MIME::Types so that they can be told to reindex the extensions as necessary. * Removed +data_version+ attribute. * Changed #[] so that the +complete+ and +registered+ flags are keywords instead of a generic options parameter. * Extracted the class methods to a separate file. * Changed the container implementation to use a Set instead of an Array to prevent data duplication. Resolves {#79}[mime-types/ruby-mime-types#79]. * MIME::Types::Cache changes: * Caching is now based on the data gem version instead of the mime-types version. * Caching is compatible with columnar registry stores. * MIME::Types::Loader changes: * MIME::Types::Loader::PATH has been removed and replaced with MIME::Types::Data::PATH from the mime-types-data gem. The environment variable RUBY_MIME_TYPES_DATA is still used. * Support for the long-deprecated mime-types v1 format has been removed. * The registry is default loaded from the columnar store by default. The internal format of the columnar store has changed; many of the boolean flags are now loaded from a single file. Resolves {#85}[https://github.com/mime-types/ruby-mime-types/85].
I need to add an extension to the existing mime type application/octet-stream.
I tried doing this:
When looking at the code, it seems that the variable
@extension_index
is not refreshed.I also tried calling
index_extensions
after adding the new extension: it works, but is deprecated.The text was updated successfully, but these errors were encountered: