95 lines
2.8 KiB
Ruby
95 lines
2.8 KiB
Ruby
module API
|
|
# Projects variables API
|
|
class Variables < Grape::API
|
|
before { authenticate! }
|
|
before { authorize! :admin_build, user_project }
|
|
|
|
resource :projects do
|
|
# Get project variables
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# page (optional) - The page number for pagination
|
|
# per_page (optional) - The value of items per page to show
|
|
# Example Request:
|
|
# GET /projects/:id/variables
|
|
get ':id/variables' do
|
|
variables = user_project.variables
|
|
present paginate(variables), with: Entities::Variable
|
|
end
|
|
|
|
# Get specific variable of a project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# key (required) - The `key` of variable
|
|
# Example Request:
|
|
# GET /projects/:id/variables/:key
|
|
get ':id/variables/:key' do
|
|
key = params[:key]
|
|
variable = user_project.variables.find_by(key: key.to_s)
|
|
|
|
return not_found!('Variable') unless variable
|
|
|
|
present variable, with: Entities::Variable
|
|
end
|
|
|
|
# Create a new variable in project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# key (required) - The key of variable
|
|
# value (required) - The value of variable
|
|
# Example Request:
|
|
# POST /projects/:id/variables
|
|
post ':id/variables' do
|
|
required_attributes! [:key, :value]
|
|
|
|
variable = user_project.variables.create(key: params[:key], value: params[:value])
|
|
|
|
if variable.valid?
|
|
present variable, with: Entities::Variable
|
|
else
|
|
render_validation_error!(variable)
|
|
end
|
|
end
|
|
|
|
# Update existing variable of a project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# key (optional) - The `key` of variable
|
|
# value (optional) - New value for `value` field of variable
|
|
# Example Request:
|
|
# PUT /projects/:id/variables/:key
|
|
put ':id/variables/:key' do
|
|
variable = user_project.variables.find_by(key: params[:key].to_s)
|
|
|
|
return not_found!('Variable') unless variable
|
|
|
|
attrs = attributes_for_keys [:value]
|
|
if variable.update(attrs)
|
|
present variable, with: Entities::Variable
|
|
else
|
|
render_validation_error!(variable)
|
|
end
|
|
end
|
|
|
|
# Delete existing variable of a project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# key (required) - The ID of a variable
|
|
# Example Request:
|
|
# DELETE /projects/:id/variables/:key
|
|
delete ':id/variables/:key' do
|
|
variable = user_project.variables.find_by(key: params[:key].to_s)
|
|
|
|
return not_found!('Variable') unless variable
|
|
variable.destroy
|
|
|
|
present variable, with: Entities::Variable
|
|
end
|
|
end
|
|
end
|
|
end
|