summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2016-03-01 15:54:35 -0500
committerRobert Speicher <rspeicher@gmail.com>2016-03-01 15:54:35 -0500
commitc9b11322172c97320f6bbddbf6c14b235ab9d7c3 (patch)
tree80c6997cf3c3910c505f60a10f600116cac6d98f
parent6aa50165b0acc355925e271f07ef8e87291e0232 (diff)
downloadgitlab-ce-rs-filter-array.tar.gz
Add FilterArray class to Banzairs-filter-array
-rw-r--r--lib/banzai/filter_array.rb27
-rw-r--r--lib/banzai/pipeline/base_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/broadcast_message_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/combined_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/gfm_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/plain_markdown_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/post_process_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/reference_extraction_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/single_line_pipeline.rb2
-rw-r--r--lib/banzai/pipeline/wiki_pipeline.rb7
-rw-r--r--spec/lib/banzai/filter_array_spec.rb39
11 files changed, 76 insertions, 13 deletions
diff --git a/lib/banzai/filter_array.rb b/lib/banzai/filter_array.rb
new file mode 100644
index 00000000000..77835a14027
--- /dev/null
+++ b/lib/banzai/filter_array.rb
@@ -0,0 +1,27 @@
+module Banzai
+ class FilterArray < Array
+ # Insert a value immediately after another value
+ #
+ # If the preceding value does not exist, the new value is added to the end
+ # of the Array.
+ def insert_after(after_value, value)
+ i = index(after_value) || length - 1
+
+ insert(i + 1, value)
+ end
+
+ # Insert a value immediately before another value
+ #
+ # If the succeeding value does not exist, the new value is added to the
+ # beginning of the Array.
+ def insert_before(before_value, value)
+ i = index(before_value) || -1
+
+ if i < 0
+ unshift(value)
+ else
+ insert(i, value)
+ end
+ end
+ end
+end
diff --git a/lib/banzai/pipeline/base_pipeline.rb b/lib/banzai/pipeline/base_pipeline.rb
index db5177db7b3..f60966c3c0f 100644
--- a/lib/banzai/pipeline/base_pipeline.rb
+++ b/lib/banzai/pipeline/base_pipeline.rb
@@ -4,7 +4,7 @@ module Banzai
module Pipeline
class BasePipeline
def self.filters
- []
+ FilterArray[]
end
def self.transform_context(context)
diff --git a/lib/banzai/pipeline/broadcast_message_pipeline.rb b/lib/banzai/pipeline/broadcast_message_pipeline.rb
index 4bb85e24c38..adc09c8afbd 100644
--- a/lib/banzai/pipeline/broadcast_message_pipeline.rb
+++ b/lib/banzai/pipeline/broadcast_message_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class BroadcastMessagePipeline < DescriptionPipeline
def self.filters
- @filters ||= [
+ @filters ||= FilterArray[
Filter::MarkdownFilter,
Filter::SanitizationFilter,
diff --git a/lib/banzai/pipeline/combined_pipeline.rb b/lib/banzai/pipeline/combined_pipeline.rb
index 9485199132e..60190f8d9dd 100644
--- a/lib/banzai/pipeline/combined_pipeline.rb
+++ b/lib/banzai/pipeline/combined_pipeline.rb
@@ -10,7 +10,7 @@ module Banzai
end
def self.filters
- pipelines.flat_map(&:filters)
+ FilterArray.new(pipelines.flat_map(&:filters))
end
def self.transform_context(context)
diff --git a/lib/banzai/pipeline/gfm_pipeline.rb b/lib/banzai/pipeline/gfm_pipeline.rb
index b7a38ea8427..8cd4b50e65a 100644
--- a/lib/banzai/pipeline/gfm_pipeline.rb
+++ b/lib/banzai/pipeline/gfm_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class GfmPipeline < BasePipeline
def self.filters
- @filters ||= [
+ @filters ||= FilterArray[
Filter::SyntaxHighlightFilter,
Filter::SanitizationFilter,
diff --git a/lib/banzai/pipeline/plain_markdown_pipeline.rb b/lib/banzai/pipeline/plain_markdown_pipeline.rb
index 3fbc681457b..3f45db21869 100644
--- a/lib/banzai/pipeline/plain_markdown_pipeline.rb
+++ b/lib/banzai/pipeline/plain_markdown_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class PlainMarkdownPipeline < BasePipeline
def self.filters
- [
+ FilterArray[
Filter::MarkdownFilter
]
end
diff --git a/lib/banzai/pipeline/post_process_pipeline.rb b/lib/banzai/pipeline/post_process_pipeline.rb
index bd338c045f3..ecff094b1e5 100644
--- a/lib/banzai/pipeline/post_process_pipeline.rb
+++ b/lib/banzai/pipeline/post_process_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class PostProcessPipeline < BasePipeline
def self.filters
- [
+ FilterArray[
Filter::RelativeLinkFilter,
Filter::RedactorFilter
]
diff --git a/lib/banzai/pipeline/reference_extraction_pipeline.rb b/lib/banzai/pipeline/reference_extraction_pipeline.rb
index eaddccd30a5..919998380e4 100644
--- a/lib/banzai/pipeline/reference_extraction_pipeline.rb
+++ b/lib/banzai/pipeline/reference_extraction_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class ReferenceExtractionPipeline < BasePipeline
def self.filters
- [
+ FilterArray[
Filter::ReferenceGathererFilter
]
end
diff --git a/lib/banzai/pipeline/single_line_pipeline.rb b/lib/banzai/pipeline/single_line_pipeline.rb
index 8b84ab401df..ba2555df98d 100644
--- a/lib/banzai/pipeline/single_line_pipeline.rb
+++ b/lib/banzai/pipeline/single_line_pipeline.rb
@@ -2,7 +2,7 @@ module Banzai
module Pipeline
class SingleLinePipeline < GfmPipeline
def self.filters
- @filters ||= [
+ @filters ||= FilterArray[
Filter::SanitizationFilter,
Filter::EmojiFilter,
diff --git a/lib/banzai/pipeline/wiki_pipeline.rb b/lib/banzai/pipeline/wiki_pipeline.rb
index bc2bf111971..9b4ff0f0f80 100644
--- a/lib/banzai/pipeline/wiki_pipeline.rb
+++ b/lib/banzai/pipeline/wiki_pipeline.rb
@@ -4,11 +4,8 @@ module Banzai
module Pipeline
class WikiPipeline < FullPipeline
def self.filters
- @filters ||= begin
- filters = super
- toc = filters.index(Filter::TableOfContentsFilter)
- filters.insert(toc + 1, Filter::GollumTagsFilter)
- end
+ @filters ||= super.insert_after(Filter::TableOfContentsFilter,
+ Filter::GollumTagsFilter)
end
end
end
diff --git a/spec/lib/banzai/filter_array_spec.rb b/spec/lib/banzai/filter_array_spec.rb
new file mode 100644
index 00000000000..ea84005e7f8
--- /dev/null
+++ b/spec/lib/banzai/filter_array_spec.rb
@@ -0,0 +1,39 @@
+require 'spec_helper'
+
+describe Banzai::FilterArray do
+ describe '#insert_after' do
+ it 'inserts an element after a provided element' do
+ filters = described_class.new(%w(a b c))
+
+ filters.insert_after('b', '1')
+
+ expect(filters).to eq %w(a b 1 c)
+ end
+
+ it 'inserts an element at the end when the provided element does not exist' do
+ filters = described_class.new(%w(a b c))
+
+ filters.insert_after('d', '1')
+
+ expect(filters).to eq %w(a b c 1)
+ end
+ end
+
+ describe '#insert_before' do
+ it 'inserts an element before a provided element' do
+ filters = described_class.new(%w(a b c))
+
+ filters.insert_before('b', '1')
+
+ expect(filters).to eq %w(a 1 b c)
+ end
+
+ it 'inserts an element at the beginning when the provided element does not exist' do
+ filters = described_class.new(%w(a b c))
+
+ filters.insert_before('d', '1')
+
+ expect(filters).to eq %w(1 a b c)
+ end
+ end
+end