summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-05-30 15:56:05 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-06-02 12:30:18 +0200
commit8a6c3f27e9dfea2c151657045e17fe66ad81b5e5 (patch)
tree4a917182dfc0c800a1aa7ef391f7a76338c1abde
parent2fbfb85492401b2a8ac81f22b319b304afecf6c3 (diff)
downloadgitlab-ce-8a6c3f27e9dfea2c151657045e17fe66ad81b5e5.tar.gz
Added ReferenceFilter#nodes
This method returns an Array of the HTML nodes as yielded by ReferenceFilter#each_node. The method's return value is memoized to allow multiple calls without having to re-query the input document.
-rw-r--r--lib/banzai/filter/reference_filter.rb5
-rw-r--r--spec/lib/banzai/filter/reference_filter_spec.rb9
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/banzai/filter/reference_filter.rb b/lib/banzai/filter/reference_filter.rb
index 5eace574ab4..2d6f34c9cd8 100644
--- a/lib/banzai/filter/reference_filter.rb
+++ b/lib/banzai/filter/reference_filter.rb
@@ -80,6 +80,11 @@ module Banzai
end
end
+ # Returns an Array containing all HTML nodes.
+ def nodes
+ @nodes ||= each_node.to_a
+ end
+
# Yields the link's URL and text whenever the node is a valid <a> tag.
def yield_valid_link(node)
link = CGI.unescape(node.attr('href').to_s)
diff --git a/spec/lib/banzai/filter/reference_filter_spec.rb b/spec/lib/banzai/filter/reference_filter_spec.rb
index d3e7af0671c..55e681f6faf 100644
--- a/spec/lib/banzai/filter/reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/reference_filter_spec.rb
@@ -33,4 +33,13 @@ describe Banzai::Filter::ReferenceFilter, lib: true do
expect { |b| filter.each_node(&b) }.not_to yield_control
end
end
+
+ describe '#nodes' do
+ it 'returns an Array of the HTML nodes' do
+ document = Nokogiri::HTML.fragment('<a href="foo">foo</a>')
+ filter = described_class.new(document, project: project)
+
+ expect(filter.nodes).to eq([document.children[0]])
+ end
+ end
end