The purpose of the lib folder is to have code that doesn't necessary belong in the application but can be shared with other applications. However, we don't have other applications and, if we did, the way to share code between them would be using a gem or even a git submodule. So having both the `app/` and the `lib/` folders is confusing IMHO, and it causes unnecessary problems with autoloading. So we're moving the `lib/` folder to `app/lib/`. Originally, some of these files were in the `app/services/` folder and then they were moved to the `lib/` folder. We're using `app/lib/` instead of `app/services/` so the upgrade is less confusing. There's an exception, though. The `OmniAuth::Strategies::Wordpress` class needs to be available in the Devise initializer. Since this is an initializer and trying to autoload a class here will be problematic when switching to Zeitwerk, we'll keep the `require` clause on top of the Devise initializer in order to load the file and so it will be loaded even if it isn't in the autoload paths anymore.
49 lines
983 B
Ruby
49 lines
983 B
Ruby
class MarkdownConverter
|
|
attr_reader :text, :render_options
|
|
|
|
def initialize(text, **render_options)
|
|
@text = text
|
|
@render_options = render_options
|
|
end
|
|
|
|
def render
|
|
return text if text.blank?
|
|
|
|
AdminLegislationSanitizer.new.sanitize(Redcarpet::Markdown.new(renderer, extensions).render(text))
|
|
end
|
|
|
|
def render_toc
|
|
Redcarpet::Markdown.new(toc_renderer).render(text)
|
|
end
|
|
|
|
private
|
|
|
|
def renderer
|
|
Redcarpet::Render::HTML.new(default_render_options.merge(render_options))
|
|
end
|
|
|
|
def toc_renderer
|
|
Redcarpet::Render::HTML_TOC.new(with_toc_data: true)
|
|
end
|
|
|
|
def default_render_options
|
|
{
|
|
filter_html: false,
|
|
hard_wrap: true,
|
|
link_attributes: {}
|
|
}
|
|
end
|
|
|
|
def extensions
|
|
{
|
|
autolink: true,
|
|
fenced_code_blocks: true,
|
|
lax_spacing: true,
|
|
no_intra_emphasis: true,
|
|
strikethrough: true,
|
|
superscript: true,
|
|
tables: true
|
|
}
|
|
end
|
|
end
|