summaryrefslogtreecommitdiff
path: root/lib/gitlab/template/base_template.rb
diff options
context:
space:
mode:
authorZJ van de Weg <zegerjan@gitlab.com>2016-05-27 11:00:56 +0200
committerAlfredo Sumaran <alfredo@gitlab.com>2016-06-20 14:48:28 -0500
commit27bf7ae59eb95bff0254b8ad3c001ea2397ec544 (patch)
tree111f9defe358890bf97926378d32ca5c2ed9f630 /lib/gitlab/template/base_template.rb
parent74f8f260982a9b9e1941ad803d53d229cc27c85f (diff)
downloadgitlab-ce-27bf7ae59eb95bff0254b8ad3c001ea2397ec544.tar.gz
Refactor Gitlab::Gitignores
Diffstat (limited to 'lib/gitlab/template/base_template.rb')
-rw-r--r--lib/gitlab/template/base_template.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/gitlab/template/base_template.rb b/lib/gitlab/template/base_template.rb
new file mode 100644
index 00000000000..e1cdfc8f5f6
--- /dev/null
+++ b/lib/gitlab/template/base_template.rb
@@ -0,0 +1,54 @@
+module Gitlab
+ module Template
+ class BaseTemplate
+ def initialize(path)
+ @path = path
+ end
+
+ def name
+ File.basename(@path, self.class.extension)
+ end
+
+ def content
+ File.read(@path)
+ end
+
+ class << self
+ def all
+ self.category_directories.flat_map do |dir|
+ templates_for_folder(dir)
+ end
+ end
+
+ def find(key)
+ file_name = "#{key}#{self.extension}"
+
+ directory = select_directory(file_name)
+ directory ? new(File.join(directory, file_name)) : nil
+ end
+
+ def by_category(category)
+ templates_for_folder(categories[category])
+ end
+
+ def category_directories
+ self.categories.values.map { |subdir| File.join(base_dir, subdir)}
+ end
+
+ private
+
+ def select_directory(file_name)
+ category_directories.find { |dir| File.exist?(File.join(dir, file_name)) }
+ end
+
+ def templates_for_folder(dir)
+ Dir.glob("#{dir.to_s}/*#{self.extension}").select { |f| f =~ filter_regex }.map { |f| new(f) }
+ end
+
+ def filter_regex
+ /#{Regexp.escape(extension)}\z/
+ end
+ end
+ end
+ end
+end