summaryrefslogtreecommitdiff
path: root/lib/gitlab/gfm
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-03-07 13:09:53 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-03-17 07:39:15 +0100
commitfd8394faae25b54c4d9ac485a0ce746cffec3a0f (patch)
treecb6d282e96e97421f365c62ed2ee0928f0586967 /lib/gitlab/gfm
parentcd0f19450843b5b9245ae82302d3f9d9003cb899 (diff)
downloadgitlab-ce-fd8394faae25b54c4d9ac485a0ce746cffec3a0f.tar.gz
Move reference unfolder for GFM to separate class
Diffstat (limited to 'lib/gitlab/gfm')
-rw-r--r--lib/gitlab/gfm/reference_unfolder.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/gitlab/gfm/reference_unfolder.rb b/lib/gitlab/gfm/reference_unfolder.rb
new file mode 100644
index 00000000000..4969e8ebe85
--- /dev/null
+++ b/lib/gitlab/gfm/reference_unfolder.rb
@@ -0,0 +1,31 @@
+module Gitlab
+ module Gfm
+ ##
+ # Class than unfolds local references in text.
+ #
+ #
+ class ReferenceUnfolder
+ def initialize(text, project)
+ @text = text
+ @project = project
+ end
+
+ def unfold(from_project)
+ referables.each_with_object(@text.dup) do |referable, text|
+ next unless referable.respond_to?(:to_reference)
+
+ pattern = /#{Regexp.escape(referable.to_reference)}/
+ text.gsub!(pattern, referable.to_reference(from_project))
+ end
+ end
+
+ private
+
+ def referables
+ extractor = Gitlab::ReferenceExtractor.new(@project)
+ extractor.analyze(@text)
+ extractor.all
+ end
+ end
+ end
+end