variables.rb 3.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
module API
  # Projects variables API
  class Variables < Grape::API
    before { authenticate! }
    before { authorize_admin_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 specifica bariable of a project
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   variable_id (required) - The ID OR `key` of variable to show; if variable_id contains only digits it's treated
      #                            as ID other ways it's treated as `key`
27
      # Example Request:
28 29 30 31 32 33 34 35 36 37 38
      #   GET /projects/:id/variables/:variable_id
      get ':id/variables/:variable_id' do
        variable_id = params[:variable_id]
        variables = user_project.variables
        variables =
          if variable_id.match(/^\d+$/)
            variables.where(id: variable_id.to_i)
          else
            variables.where(key: variable_id)
          end

39 40
        return not_found!('Variable') if variables.empty?

41 42
        present variables.first, with: Entities::Variable
      end
43

44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
      # Create a new variable in project
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   key (required) - The key of variable being created
      #   value (required) - The value of variable being created
      # 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])
        return render_validation_error!(variable) unless variable.valid?
        variable.save!

        present variable, with: Entities::Variable
      end

62 63 64 65 66 67 68 69 70 71 72 73
      # Update existing variable of a project
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   variable_id (required) - The ID of a variable
      #   key (optional) - new value for `key` field of variable
      #   value (optional) - new value for `value` field of variable
      # Example Request:
      #   PUT /projects/:id/variables/:variable_id
      put ':id/variables/:variable_id' do
        variable = user_project.variables.where(id: params[:variable_id].to_i).first

74 75
        return not_found!('Variable') unless variable

76 77 78 79 80 81
        variable.key = params[:key]
        variable.value = params[:value]
        variable.save!

        present variable, with: Entities::Variable
      end
82 83 84 85 86 87 88 89 90 91

      # Delete existing variable of a project
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   variable_id (required) - The ID of a variable
      # Exanoke Reqyest:
      #   DELETE /projects/:id/variables/:variable_id
      delete ':id/variables/:variable_id' do
        variable = user_project.variables.where(id: params[:variable_id].to_i).first
92 93 94

        return not_found!('Variable') unless variable

95
        variable.destroy
96 97

        present variable, with: Entities::Variable
98
      end
99 100 101
    end
  end
end