diff --git a/app/helpers/perron/markdown_helper.rb b/app/helpers/perron/markdown_helper.rb index 23e74ed..242491f 100644 --- a/app/helpers/perron/markdown_helper.rb +++ b/app/helpers/perron/markdown_helper.rb @@ -4,10 +4,11 @@ module Perron module MarkdownHelper - def markdownify(content = nil, process: [], resource: nil, &block) + def markdownify(content = nil, process: nil, resource: nil, &block) text = block_given? ? capture(&block).strip_heredoc : content + processors = (process.nil? || process.empty?) ? Perron.configuration.default_processors : process - Perron::Markdown.render(text, processors: process, resource: resource || @resource) + Perron::Markdown.render(text, processors: processors, resource: resource || @resource) end end end diff --git a/lib/perron/configuration.rb b/lib/perron/configuration.rb index 26efe6b..cb3a006 100644 --- a/lib/perron/configuration.rb +++ b/lib/perron/configuration.rb @@ -35,6 +35,8 @@ def initialize @config.markdown_options = {} + @config.default_processors = [] + @config.search_scope = [] @config.sitemap = ActiveSupport::OrderedOptions.new diff --git a/test/helpers/markdown_helper_test.rb b/test/helpers/markdown_helper_test.rb index 8b30fed..cf9b3c2 100644 --- a/test/helpers/markdown_helper_test.rb +++ b/test/helpers/markdown_helper_test.rb @@ -5,6 +5,16 @@ class MarkdownHelperTest < ActionView::TestCase include Perron::MarkdownHelper + setup do + @original_default_processors = Perron.configuration.default_processors + end + + teardown do + Perron.configure do |config| + config.default_processors = @original_default_processors + end + end + test "passes content, processors, and resource correctly through the chain" do @resource = Content::Post.find!("sample-post") html = markdownify("

Some text.

", process: ["dummy_processor"]) @@ -26,4 +36,43 @@ class MarkdownHelperTest < ActionView::TestCase assert_dom_equal "## Hello", html.strip end + + test "uses default_processors from config when none passed" do + Perron.configure do |config| + config.default_processors = %w[dummy_processor] + end + + @resource = Content::Post.find!("sample-post") + html = markdownify("

Some text.

") + + expected_class = @resource.metadata.dig("processor_class") || "processed-by-dummy" + assert_dom_equal %(

Some text.

), html.strip + end + + test "uses default_processors from config when empty array passed" do + Perron.configure do |config| + config.default_processors = %w[dummy_processor] + end + + @resource = Content::Post.find!("sample-post") + html = markdownify("

Some text.

", process: []) + + expected_class = @resource.metadata.dig("processor_class") || "processed-by-dummy" + assert_dom_equal %(

Some text.

), html.strip + end + + test "explicit process argument overrides default_processors" do + Perron.configure do |config| + config.default_processors = %w[target_blank] + end + + html = markdownify('Link', process: ["lazy_load_images"]) + + assert_includes html, 'loading="lazy"' + refute_includes html, 'target="_blank"' + end + + test "default_processors defaults to empty array" do + assert_equal [], Perron.configuration.default_processors + end end