Skip to content

Commit d3f3137

Browse files
authored
Merge pull request #392 from gjtorikian/no-node
Allow pipeline to run without node filters
2 parents 52498c3 + 64c896f commit d3f3137

File tree

3 files changed

+41
-20
lines changed

3 files changed

+41
-20
lines changed

lib/html_pipeline.rb

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ class << self
114114
def initialize(text_filters: [], convert_filter: nil, sanitization_config: SanitizationFilter::DEFAULT_CONFIG, node_filters: [], default_context: {}, result_class: Hash)
115115
raise ArgumentError, "default_context cannot be nil" if default_context.nil?
116116

117-
@text_filters = text_filters.flatten.freeze
117+
@text_filters = text_filters.flatten.freeze || []
118118
validate_filters(@text_filters, HTMLPipeline::TextFilter)
119119

120-
@node_filters = node_filters.flatten.freeze
120+
@node_filters = node_filters.flatten.freeze || []
121121
validate_filters(@node_filters, HTMLPipeline::NodeFilter)
122122

123123
@convert_filter = convert_filter
@@ -151,33 +151,46 @@ def call(text, context: {}, result: {})
151151
context = context.freeze
152152
result ||= {}
153153

154-
payload = default_payload({
155-
text_filters: @text_filters.map(&:name),
156-
context: context,
157-
result: result,
158-
})
159-
instrument("call_text_filters.html_pipeline", payload) do
160-
result[:output] =
161-
@text_filters.inject(text) do |doc, filter|
162-
perform_filter(filter, doc, context: context, result: result)
163-
end
154+
if @text_filters.any?
155+
payload = default_payload({
156+
text_filters: @text_filters.map(&:name),
157+
context: context,
158+
result: result,
159+
})
160+
instrument("call_text_filters.html_pipeline", payload) do
161+
result[:output] =
162+
@text_filters.inject(text) do |doc, filter|
163+
perform_filter(filter, doc, context: context, result: result)
164+
end
165+
end
164166
end
165167

166-
text = result[:output]
168+
text = result[:output] || text
167169

168-
html = @convert_filter.call(text) unless @convert_filter.nil?
170+
html = if @convert_filter.nil?
171+
text
172+
else
173+
instrument("call_convert_filter.html_pipeline", payload) do
174+
html = @convert_filter.call(text)
175+
end
176+
end
169177

170178
unless @node_filters.empty?
171-
payload = default_payload({
172-
node_filters: @node_filters.map { |f| f.class.name },
173-
context: context,
174-
result: result,
175-
})
176179
instrument("call_node_filters.html_pipeline", payload) do
177180
result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
181+
html = result[:output]
182+
payload = default_payload({
183+
node_filters: @node_filters.map { |f| f.class.name },
184+
context: context,
185+
result: result,
186+
})
178187
end
179188
end
180189

190+
instrument("html_pipeline.sanitization", payload) do
191+
result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
192+
end
193+
181194
result = result.merge(@node_filters.collect(&:result).reduce({}, :merge))
182195
@node_filters.each(&:reset!)
183196

@@ -195,6 +208,7 @@ def perform_filter(filter, doc, context: {}, result: {})
195208
context: context,
196209
result: result,
197210
})
211+
198212
instrument("call_filter.html_pipeline", payload) do
199213
filter.call(doc, context: context, result: result)
200214
end

lib/html_pipeline/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
class HTMLPipeline
4-
VERSION = "3.0.1"
4+
VERSION = "3.0.2"
55
end

test/html_pipeline/convert_filter/markdown_filter_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,11 @@ def test_not_convert_newlines_in_lists
162162
@gfm.call("* foo\n* bar", context: { markdown: options }),
163163
)
164164
end
165+
166+
def test_works_without_node_filters
167+
markdown = "1. Foo\n2. Bar"
168+
result = HTMLPipeline.new(convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new).call(markdown)[:output]
169+
170+
assert_equal("<ol>\n<li>Foo</li>\n<li>Bar</li>\n</ol>", result)
171+
end
165172
end

0 commit comments

Comments
 (0)