是否有任何提供冻结HTML内容类型字符串的Rails模块或类?

时间:2017-04-08 22:47:56

标签: ruby-on-rails ruby string memory

我已经在source搜索了一段时间,在我看来,没有给定的Rails工具来检索各种HTML内容类型的String表示。我也发现这是一个非常难以搜索的概念。

我想要的是这样的:

Mime::Mimes::CONTENT_TYPE_JSON = 'application/json'.freeze

或,Mime::Mimes::CONTENT_TYPES[:json]

...因为我想做很多事情,比如some_value == 'application/json'some_value = 'application/json'等。

我想经常使用表达式“application / json”,我不想为Web应用程序开发领域内的某些东西创建新的String实例。我曾想过创建自己的应用程序或变量,所以我不必多次分配HTML内容类型字符串,但也觉得这应该只适用于任何Web应用程序框架(至少,那些用每种字符串编写的语言)是一个新的内存分配)。

Rails 5源代码中是否有更好的工具或资源可以轻松检索内容类型字符串?我必须得到一个宝石/创造我自己的吗?

注意:我可能会看到这种“优化”有多重。然后让我们从一个务实的组织风格的位置接受这个查询,一个项目需要消除任何特定于域的字符串文字的重复,并保持它们符号化或作为一些冻结的const。让我们假装它是一个个人项目,以实验这种风格的纯粹快乐!

1 个答案:

答案 0 :(得分:0)

使用ActionPack Mime::Type系统创建一个新模块以便于简单存储和检索,其工作原理如下:

# Build hash of type name to value, e.g., { xml: "application/xml" }
CONTENT_TYPES = {}.tap do |simple_content_types_hash|
  # Get each registered Mime Type
  Mime::EXTENSION_LOOKUP.each do |mime|
    simple_content_type_hash[mime.first.to_sym] = mime.last.instance_variable_get("@string").freeze
  end
end.freeze

注意:以上是未经测试的,它只是我所寻找的一般化。感谢@ Fire-Dragon-DoL提示。

这可以通过初始化程序添加,修补到现有模块或新助手模块中。