BigW Consortium Gitlab

group_variables.rb 2.83 KB
Newer Older
Shinya Maeda committed
1 2 3 4 5 6 7 8 9 10 11
module API
  class GroupVariables < Grape::API
    include PaginationParams

    before { authenticate! }
    before { authorize! :admin_build, user_group }

    params do
      requires :id, type: String, desc: 'The ID of a group'
    end

12
    resource :groups, requirements: API::PROJECT_ENDPOINT_REQUIREMENTS do
Shinya Maeda committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
      desc 'Get group-level variables' do
        success Entities::Variable
      end
      params do
        use :pagination
      end
      get ':id/variables' do
        variables = user_group.variables
        present paginate(variables), with: Entities::Variable
      end

      desc 'Get a specific variable from a group' do
        success Entities::Variable
      end
      params do
        requires :key, type: String, desc: 'The key of the variable'
      end
      get ':id/variables/:key' do
        key = params[:key]
        variable = user_group.variables.find_by(key: key)

        return not_found!('GroupVariable') unless variable

        present variable, with: Entities::Variable
      end

      desc 'Create a new variable in a group' do
        success Entities::Variable
      end
      params do
        requires :key, type: String, desc: 'The key of the variable'
        requires :value, type: String, desc: 'The value of the variable'
        optional :protected, type: String, desc: 'Whether the variable is protected'
      end
      post ':id/variables' do
        variable_params = declared_params(include_missing: false)

        variable = user_group.variables.create(variable_params)

        if variable.valid?
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
      end

      desc 'Update an existing variable from a group' do
        success Entities::Variable
      end
      params do
        optional :key, type: String, desc: 'The key of the variable'
        optional :value, type: String, desc: 'The value of the variable'
        optional :protected, type: String, desc: 'Whether the variable is protected'
      end
      put ':id/variables/:key' do
        variable = user_group.variables.find_by(key: params[:key])

        return not_found!('GroupVariable') unless variable

        variable_params = declared_params(include_missing: false).except(:key)

        if variable.update(variable_params)
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
      end

      desc 'Delete an existing variable from a group' do
        success Entities::Variable
      end
      params do
        requires :key, type: String, desc: 'The key of the variable'
      end
      delete ':id/variables/:key' do
        variable = user_group.variables.find_by(key: params[:key])
        not_found!('GroupVariable') unless variable

91
        destroy_conditionally!(variable)
Shinya Maeda committed
92 93 94 95
      end
    end
  end
end