Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZJ van de Weg <zegerjan@gitlab.com>2016-05-27 12:00:56 +0300
committerAlfredo Sumaran <alfredo@gitlab.com>2016-06-20 22:48:28 +0300
commit27bf7ae59eb95bff0254b8ad3c001ea2397ec544 (patch)
tree111f9defe358890bf97926378d32ca5c2ed9f630 /lib/gitlab/template
parent74f8f260982a9b9e1941ad803d53d229cc27c85f (diff)
Refactor Gitlab::Gitignores
Diffstat (limited to 'lib/gitlab/template')
-rw-r--r--lib/gitlab/template/base_template.rb54
-rw-r--r--lib/gitlab/template/gitignore.rb23
2 files changed, 77 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
diff --git a/lib/gitlab/template/gitignore.rb b/lib/gitlab/template/gitignore.rb
new file mode 100644
index 00000000000..73fb3b18c4d
--- /dev/null
+++ b/lib/gitlab/template/gitignore.rb
@@ -0,0 +1,23 @@
+module Gitlab
+ module Template
+ class Gitignore < BaseTemplate
+
+ class << self
+ def extension
+ '.gitignore'
+ end
+
+ def categories
+ {
+ Languages: '',
+ Global: 'Global'
+ }
+ end
+
+ def base_dir
+ Rails.root.join('vendor/gitignore')
+ end
+ end
+ end
+ end
+end