variables.rb 2,7 КБ
Newer Older
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
1
2
module API
  class Variables < Grape::API
Semyon Pupkov's avatar
Semyon Pupkov включено в состав коммита
3
4
    include PaginationParams

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

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

Rémy Coutable's avatar
Rémy Coutable включено в состав коммита
12
    resource :projects, requirements: { id: %r{[^/]+} } do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
13
14
15
16
      desc 'Get project variables' do
        success Entities::Variable
      end
      params do
Semyon Pupkov's avatar
Semyon Pupkov включено в состав коммита
17
        use :pagination
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
18
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
19
20
21
22
23
      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 включено в состав коммита
24
25
26
27
28
29
      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
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
30
31
      get ':id/variables/:key' do
        key = params[:key]
Robert Schilling's avatar
Robert Schilling включено в состав коммита
32
        variable = user_project.variables.find_by(key: key)
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
33

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
34
        return not_found!('Variable') unless variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
35

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
36
        present variable, with: Entities::Variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
37
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
38

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
39
40
41
42
43
44
      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'
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
45
        optional :protected, type: String, desc: 'Whether the variable is protected'
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
46
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
47
      post ':id/variables' do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
48
        variable = user_project.variables.create(declared(params, include_parent_namespaces: false).to_h)
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
49

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
50
51
52
53
54
        if variable.valid?
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
55
56
      end

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
57
58
59
60
61
62
      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'
Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
63
        optional :protected, type: String, desc: 'Whether the variable is protected'
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
64
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
65
      put ':id/variables/:key' do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
66
        variable = user_project.variables.find_by(key: params[:key])
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
67

Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
68
69
        return not_found!('Variable') unless variable

Lin Jen-Shin's avatar
Lin Jen-Shin включено в состав коммита
70
        if variable.update(declared_params(include_missing: false).except(:key))
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
71
72
73
74
          present variable, with: Entities::Variable
        else
          render_validation_error!(variable)
        end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
75
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
76

Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
77
78
79
80
81
82
      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
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
83
      delete ':id/variables/:key' do
Z.J. van de Weg's avatar
Z.J. van de Weg включено в состав коммита
84
        variable = user_project.variables.find_by(key: params[:key])
Robert Schilling's avatar
Robert Schilling включено в состав коммита
85
        not_found!('Variable') unless variable
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
86

Robert Schilling's avatar
Robert Schilling включено в состав коммита
87
        variable.destroy
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
88
      end
Tomasz Maczukin's avatar
Tomasz Maczukin включено в состав коммита
89
90
91
    end
  end
end