diff options
author | Robert Speicher <robert@gitlab.com> | 2018-09-06 03:05:20 +0300 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2018-09-06 03:05:20 +0300 |
commit | ab22dae917cc38d6d9573fca472d09950fac8d08 (patch) | |
tree | f5380f2e973dc1ec179bfc33d6110b7d26f33a0a /app | |
parent | e7cb8a4195ce0b22dc7173aff0e56b9e322a8882 (diff) | |
parent | d65e31ab72b09c539fac4bac391d1f6ff3152c58 (diff) |
Merge branch 'ce-5306-more-custom-templates' into 'master'
CE backport of changes that introduce custom instance-level templates to EE
See merge request gitlab-org/gitlab-ce!21530
Diffstat (limited to 'app')
-rw-r--r-- | app/finders/template_finder.rb | 37 | ||||
-rw-r--r-- | app/helpers/blob_helper.rb | 29 |
2 files changed, 53 insertions, 13 deletions
diff --git a/app/finders/template_finder.rb b/app/finders/template_finder.rb new file mode 100644 index 00000000000..ea0251bffb6 --- /dev/null +++ b/app/finders/template_finder.rb @@ -0,0 +1,37 @@ +class TemplateFinder + VENDORED_TEMPLATES = { + dockerfiles: ::Gitlab::Template::DockerfileTemplate, + gitignores: ::Gitlab::Template::GitignoreTemplate, + gitlab_ci_ymls: ::Gitlab::Template::GitlabCiYmlTemplate + }.freeze + + class << self + def build(type, params = {}) + if type == :licenses + LicenseTemplateFinder.new(params) + else + new(type, params) + end + end + end + + attr_reader :type, :params + + attr_reader :vendored_templates + private :vendored_templates + + def initialize(type, params = {}) + @type = type + @params = params + + @vendored_templates = VENDORED_TEMPLATES.fetch(type) + end + + def execute + if params[:name] + vendored_templates.find(params[:name]) + else + vendored_templates.all + end + end +end diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb index 00ebafd177b..96f7415ae98 100644 --- a/app/helpers/blob_helper.rb +++ b/app/helpers/blob_helper.rb @@ -158,32 +158,35 @@ module BlobHelper end def licenses_for_select - return @licenses_for_select if defined?(@licenses_for_select) - - grouped_licenses = LicenseTemplateFinder.new.execute.group_by(&:category) - categories = grouped_licenses.keys - - @licenses_for_select = categories.each_with_object({}) do |category, hash| - hash[category] = grouped_licenses[category].map do |license| - { name: license.name, id: license.id } - end - end + @licenses_for_select ||= template_dropdown_names(TemplateFinder.build(:licenses).execute) end def ref_project @ref_project ||= @target_project || @project end + def template_dropdown_names(items) + grouped = items.group_by(&:category) + categories = grouped.keys + + categories.each_with_object({}) do |category, hash| + hash[category] = grouped[category].map do |item| + { name: item.name, id: item.id } + end + end + end + private :template_dropdown_names + def gitignore_names - @gitignore_names ||= Gitlab::Template::GitignoreTemplate.dropdown_names + @gitignore_names ||= template_dropdown_names(TemplateFinder.build(:gitignores).execute) end def gitlab_ci_ymls - @gitlab_ci_ymls ||= Gitlab::Template::GitlabCiYmlTemplate.dropdown_names(params[:context]) + @gitlab_ci_ymls ||= template_dropdown_names(TemplateFinder.build(:gitlab_ci_ymls).execute) end def dockerfile_names - @dockerfile_names ||= Gitlab::Template::DockerfileTemplate.dropdown_names + @dockerfile_names ||= template_dropdown_names(TemplateFinder.build(:dockerfiles).execute) end def blob_editor_paths |