From e2d7ac9abb62785b51ca3b7a1ee0e2289cbb51f8 Mon Sep 17 00:00:00 2001 From: "Garen J. Torikian" Date: Mon, 8 Jan 2024 15:10:48 -0500 Subject: [PATCH 1/2] Allow pipeline to run without `node_filter` --- lib/html_pipeline.rb | 52 ++++++++++++------- .../convert_filter/markdown_filter_test.rb | 7 +++ 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/lib/html_pipeline.rb b/lib/html_pipeline.rb index 8f2afe1f..015ae610 100644 --- a/lib/html_pipeline.rb +++ b/lib/html_pipeline.rb @@ -114,10 +114,10 @@ class << self def initialize(text_filters: [], convert_filter: nil, sanitization_config: SanitizationFilter::DEFAULT_CONFIG, node_filters: [], default_context: {}, result_class: Hash) raise ArgumentError, "default_context cannot be nil" if default_context.nil? - @text_filters = text_filters.flatten.freeze + @text_filters = text_filters.flatten.freeze || [] validate_filters(@text_filters, HTMLPipeline::TextFilter) - @node_filters = node_filters.flatten.freeze + @node_filters = node_filters.flatten.freeze || [] validate_filters(@node_filters, HTMLPipeline::NodeFilter) @convert_filter = convert_filter @@ -151,33 +151,46 @@ def call(text, context: {}, result: {}) context = context.freeze result ||= {} - payload = default_payload({ - text_filters: @text_filters.map(&:name), - context: context, - result: result, - }) - instrument("call_text_filters.html_pipeline", payload) do - result[:output] = - @text_filters.inject(text) do |doc, filter| - perform_filter(filter, doc, context: context, result: result) - end + if @text_filters.any? + payload = default_payload({ + text_filters: @text_filters.map(&:name), + context: context, + result: result, + }) + instrument("call_text_filters.html_pipeline", payload) do + result[:output] = + @text_filters.inject(text) do |doc, filter| + perform_filter(filter, doc, context: context, result: result) + end + end end - text = result[:output] + text = result[:output] || text - html = @convert_filter.call(text) unless @convert_filter.nil? + html = if @convert_filter.nil? + text + else + instrument("call_convert_filter.html_pipeline", payload) do + html = @convert_filter.call(text) + end + end unless @node_filters.empty? - payload = default_payload({ - node_filters: @node_filters.map { |f| f.class.name }, - context: context, - result: result, - }) instrument("call_node_filters.html_pipeline", payload) do result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html) + html = result[:output] + payload = default_payload({ + node_filters: @node_filters.map { |f| f.class.name }, + context: context, + result: result, + }) end end + instrument("html_pipeline.sanitization", payload) do + result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html) + end + result = result.merge(@node_filters.collect(&:result).reduce({}, :merge)) @node_filters.each(&:reset!) @@ -195,6 +208,7 @@ def perform_filter(filter, doc, context: {}, result: {}) context: context, result: result, }) + instrument("call_filter.html_pipeline", payload) do filter.call(doc, context: context, result: result) end diff --git a/test/html_pipeline/convert_filter/markdown_filter_test.rb b/test/html_pipeline/convert_filter/markdown_filter_test.rb index e4809e97..49126f5a 100644 --- a/test/html_pipeline/convert_filter/markdown_filter_test.rb +++ b/test/html_pipeline/convert_filter/markdown_filter_test.rb @@ -162,4 +162,11 @@ def test_not_convert_newlines_in_lists @gfm.call("* foo\n* bar", context: { markdown: options }), ) end + + def test_works_without_node_filters + markdown = "1. Foo\n2. Bar" + result = HTMLPipeline.new(convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new).call(markdown)[:output] + + assert_equal("
    \n
  1. Foo
  2. \n
  3. Bar
  4. \n
", result) + end end From 64c896f4c44ec24a76ea661cfaf708ba6b8a8988 Mon Sep 17 00:00:00 2001 From: "Garen J. Torikian" Date: Mon, 8 Jan 2024 15:10:58 -0500 Subject: [PATCH 2/2] :gem: 3.0.2 --- lib/html_pipeline/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/html_pipeline/version.rb b/lib/html_pipeline/version.rb index 3d2f1699..21f3f56b 100644 --- a/lib/html_pipeline/version.rb +++ b/lib/html_pipeline/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true class HTMLPipeline - VERSION = "3.0.1" + VERSION = "3.0.2" end