@@ -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
0 commit comments