Redcarpet Markdown gem:仅实例化Markdown对象一次&在解析之间重用它

时间:2013-08-14 19:14:52

标签: ruby-on-rails-3.2 markdown redcarpet

我正在阅读Redcarpet的documentation,并发现了这句话:

The Markdown object is encouraged to be instantiated once with the required settings, and reused between parses.

Rails应用中执行此操作的最佳方法是什么?

我在Redcarpet上观看了Ryan Bates的railscast,他在application_helper.rb中有一个帮助方法,其中每个方法调用实例化一个新的Redcarpet对象,如下所示:

def markdown(text)
  options = [:hard_wrap, :filter_html, :autolink, :no_intraemphasis, :fenced_code, :gh_blockcode]
  Redcarpet.new(text, *options).to_html.html_safe
end

这不是最好的方法吗?谢谢你的任何建议。

1 个答案:

答案 0 :(得分:1)

不确定这是否是 rails 做事的方式,但看起来不错,并且不违反POLA等,所以希望它能满足您的需求。

markdown.rb文件夹中创建config/initializers/文件,并使用以下代码段的某些变体形式:

class MultiRenderer < Redcarpet::Render::HTML
  include Redcarpet::Render::SmartyPants
end

module Paradox
  Markdown = Redcarpet::Markdown.new(MultiRenderer)
end

Paradox替换为您的应用程序名称。您可以向渲染器或降价实例添加各种选项,如readme中所述。我创建的渲染器(MultiRenderer)内置了smartypants,因此您可以使用引号括起来等等

要使用Markdown,只需拨打YourApp::Markdown.render(text),即可获得html。您可能需要在其上运行html_safe。