dc8e1676cd
Main feature was the deprication of the Hashie stuff, so the access by calling keys as method is gone now.
122 lines
4.6 KiB
Ruby
122 lines
4.6 KiB
Ruby
module API
|
|
module V3
|
|
class Templates < Grape::API
|
|
GLOBAL_TEMPLATE_TYPES = {
|
|
gitignores: {
|
|
klass: Gitlab::Template::GitignoreTemplate,
|
|
gitlab_version: 8.8
|
|
},
|
|
gitlab_ci_ymls: {
|
|
klass: Gitlab::Template::GitlabCiYmlTemplate,
|
|
gitlab_version: 8.9
|
|
},
|
|
dockerfiles: {
|
|
klass: Gitlab::Template::DockerfileTemplate,
|
|
gitlab_version: 8.15
|
|
}
|
|
}.freeze
|
|
PROJECT_TEMPLATE_REGEX =
|
|
/[\<\{\[]
|
|
(project|description|
|
|
one\sline\s.+\swhat\sit\sdoes\.) # matching the start and end is enough here
|
|
[\>\}\]]/xi.freeze
|
|
YEAR_TEMPLATE_REGEX = /[<{\[](year|yyyy)[>}\]]/i.freeze
|
|
FULLNAME_TEMPLATE_REGEX =
|
|
/[\<\{\[]
|
|
(fullname|name\sof\s(author|copyright\sowner))
|
|
[\>\}\]]/xi.freeze
|
|
DEPRECATION_MESSAGE = ' This endpoint is deprecated and has been removed in V4.'.freeze
|
|
|
|
helpers do
|
|
def parsed_license_template
|
|
# We create a fresh Licensee::License object since we'll modify its
|
|
# content in place below.
|
|
template = Licensee::License.new(params[:name])
|
|
|
|
template.content.gsub!(YEAR_TEMPLATE_REGEX, Time.now.year.to_s)
|
|
template.content.gsub!(PROJECT_TEMPLATE_REGEX, params[:project]) if params[:project].present?
|
|
|
|
fullname = params[:fullname].presence || current_user.try(:name)
|
|
template.content.gsub!(FULLNAME_TEMPLATE_REGEX, fullname) if fullname
|
|
template
|
|
end
|
|
|
|
def render_response(template_type, template)
|
|
not_found!(template_type.to_s.singularize) unless template
|
|
present template, with: ::API::Entities::Template
|
|
end
|
|
end
|
|
|
|
{ "licenses" => :deprecated, "templates/licenses" => :ok }.each do |route, status|
|
|
desc 'Get the list of the available license template' do
|
|
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
|
detail detailed_desc
|
|
success ::API::Entities::RepoLicense
|
|
end
|
|
params do
|
|
optional :popular, type: Boolean, desc: 'If passed, returns only popular licenses'
|
|
end
|
|
get route do
|
|
options = {
|
|
featured: declared(params)[:popular].present? ? true : nil
|
|
}
|
|
present Licensee::License.all(options), with: ::API::Entities::RepoLicense
|
|
end
|
|
end
|
|
|
|
{ "licenses/:name" => :deprecated, "templates/licenses/:name" => :ok }.each do |route, status|
|
|
desc 'Get the text for a specific license' do
|
|
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
|
detail detailed_desc
|
|
success ::API::Entities::RepoLicense
|
|
end
|
|
params do
|
|
requires :name, type: String, desc: 'The name of the template'
|
|
end
|
|
get route, requirements: { name: /[\w\.-]+/ } do
|
|
not_found!('License') unless Licensee::License.find(declared(params)[:name])
|
|
|
|
template = parsed_license_template
|
|
|
|
present template, with: ::API::Entities::RepoLicense
|
|
end
|
|
end
|
|
|
|
GLOBAL_TEMPLATE_TYPES.each do |template_type, properties|
|
|
klass = properties[:klass]
|
|
gitlab_version = properties[:gitlab_version]
|
|
|
|
{ template_type => :deprecated, "templates/#{template_type}" => :ok }.each do |route, status|
|
|
desc 'Get the list of the available template' do
|
|
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
|
detail detailed_desc
|
|
success ::API::Entities::TemplatesList
|
|
end
|
|
get route do
|
|
present klass.all, with: ::API::Entities::TemplatesList
|
|
end
|
|
end
|
|
|
|
{ "#{template_type}/:name" => :deprecated, "templates/#{template_type}/:name" => :ok }.each do |route, status|
|
|
desc 'Get the text for a specific template present in local filesystem' do
|
|
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
|
detail detailed_desc
|
|
success ::API::Entities::Template
|
|
end
|
|
params do
|
|
requires :name, type: String, desc: 'The name of the template'
|
|
end
|
|
get route do
|
|
new_template = klass.find(declared(params)[:name])
|
|
|
|
render_response(template_type, new_template)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|