variables.rb 4,3 КБ
Newer Older
gfyoung's avatar
gfyoung включено в состав коммита
1
2
# frozen_string_literal: true

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
3
4
module API
  class Variables < Grape::API
Semyon Pupkov's avatar
Semyon Pupkov включено в состав коммита
5
6
    include PaginationParams

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
7
    before { authenticate! }
Kamil Trzcinski's avatar
Kamil Trzcinski включено в состав коммита
8
    before { authorize! :admin_build, user_project }
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
9

Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
10
11
12
13
14
15
16
17
    helpers do
      def filter_variable_parameters(params)
        # This method exists so that EE can more easily filter out certain
        # parameters, without having to modify the source code directly.
        params
      end
    end

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
18
19
20
21
    params do
      requires :id, type: String, desc: 'The ID of a project'
    end

Rémy Coutable's avatar
Rémy Coutable включено в состав коммита
22
    resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
23
24
25
26
      desc 'Get project variables' do
        success Entities::Variable
      end
      params do
Semyon Pupkov's avatar
Semyon Pupkov включено в состав коммита
27
        use :pagination
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
28
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
29
30
31
32
33
      get ':id/variables' do
        variables = user_project.variables
        present paginate(variables), with: Entities::Variable
      end

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
34
35
36
37
38
39
      desc 'Get a specific variable from a project' do
        success Entities::Variable
      end
      params do
        requires :key, type: String, desc: 'The key of the variable'
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
40
      # rubocop: disable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
41
42
      get ':id/variables/:key' do
        key = params[:key]
Robert Schilling's avatar
Robert Schilling включено в состав коммита
43
        variable = user_project.variables.find_by(key: key)
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
44

🙈  jacopo beschi 🙉's avatar
🙈 jacopo beschi 🙉 включено в состав коммита
45
        break not_found!('Variable') unless variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
46

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
47
        present variable, with: Entities::Variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
48
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
49
      # rubocop: enable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
50

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
51
52
53
54
55
56
      desc 'Create a new variable in a project' 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'
Thong Kuah's avatar
Thong Kuah включено в состав коммита
57
        optional :protected, type: Boolean, desc: 'Whether the variable is protected'
Thong Kuah's avatar
Thong Kuah включено в состав коммита
58
        optional :masked, type: Boolean, desc: 'Whether the variable is masked'
Krasimir Angelov's avatar
Krasimir Angelov включено в состав коммита
59
        optional :variable_type, type: String, values: Ci::Variable.variable_types.keys, desc: 'The type of variable, must be one of env_var or file. Defaults to env_var'
Hordur Freyr Yngvason's avatar
Hordur Freyr Yngvason включено в состав коммита
60
        optional :environment_scope, type: String, desc: 'The environment_scope of the variable'
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
61
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
62
      post ':id/variables' do
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
63
        variable_params = declared_params(include_missing: false)
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
64
        variable_params = filter_variable_parameters(variable_params)
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
65
66

        variable = user_project.variables.create(variable_params)
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
67

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
68
69
70
71
72
        if variable.valid?
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
73
74
      end

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
75
76
77
78
79
80
      desc 'Update an existing variable from a project' 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'
Thong Kuah's avatar
Thong Kuah включено в состав коммита
81
        optional :protected, type: Boolean, desc: 'Whether the variable is protected'
Thong Kuah's avatar
Thong Kuah включено в состав коммита
82
        optional :masked, type: Boolean, desc: 'Whether the variable is masked'
Krasimir Angelov's avatar
Krasimir Angelov включено в состав коммита
83
        optional :variable_type, type: String, values: Ci::Variable.variable_types.keys, desc: 'The type of variable, must be one of env_var or file'
Hordur Freyr Yngvason's avatar
Hordur Freyr Yngvason включено в состав коммита
84
        optional :environment_scope, type: String, desc: 'The environment_scope of the variable'
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
85
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
86
      # rubocop: disable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
87
      put ':id/variables/:key' do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
88
        variable = user_project.variables.find_by(key: params[:key])
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
89

🙈  jacopo beschi 🙉's avatar
🙈 jacopo beschi 🙉 включено в состав коммита
90
        break not_found!('Variable') unless variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
91

Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
92
        variable_params = declared_params(include_missing: false).except(:key)
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
93
        variable_params = filter_variable_parameters(variable_params)
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
94
95

        if variable.update(variable_params)
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
96
97
98
99
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
100
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
101
      # rubocop: enable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
102

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
103
104
105
106
107
108
      desc 'Delete an existing variable from a project' do
        success Entities::Variable
      end
      params do
        requires :key, type: String, desc: 'The key of the variable'
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
109
      # rubocop: disable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
110
      delete ':id/variables/:key' do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
111
        variable = user_project.variables.find_by(key: params[:key])
Robert Schilling's avatar
Robert Schilling включено в состав коммита
112
        not_found!('Variable') unless variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
113

Robert Schilling's avatar
Robert Schilling включено в состав коммита
114
        # Variables don't have any timestamp. Therfore, destroy unconditionally.
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets включено в состав коммита
115
        status 204
Robert Schilling's avatar
Robert Schilling включено в состав коммита
116
        variable.destroy
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
117
      end
Yorick Peterse's avatar
Yorick Peterse включено в состав коммита
118
      # rubocop: enable CodeReuse/ActiveRecord
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
119
120
121
    end
  end
end