gitlab 4.1.0 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/lib/gitlab/client.rb +4 -0
  4. data/lib/gitlab/client/award_emojis.rb +135 -0
  5. data/lib/gitlab/client/boards.rb +88 -0
  6. data/lib/gitlab/client/branches.rb +12 -7
  7. data/lib/gitlab/client/commits.rb +6 -6
  8. data/lib/gitlab/client/environments.rb +87 -0
  9. data/lib/gitlab/client/labels.rb +33 -4
  10. data/lib/gitlab/client/merge_requests.rb +0 -59
  11. data/lib/gitlab/client/notes.rb +106 -0
  12. data/lib/gitlab/client/projects.rb +48 -44
  13. data/lib/gitlab/client/repository_files.rb +32 -26
  14. data/lib/gitlab/client/system_hooks.rb +5 -2
  15. data/lib/gitlab/client/todos.rb +44 -0
  16. data/lib/gitlab/version.rb +1 -1
  17. data/spec/fixtures/board_list.json +1 -0
  18. data/spec/fixtures/board_lists.json +1 -0
  19. data/spec/fixtures/boards.json +1 -0
  20. data/spec/fixtures/environment.json +6 -0
  21. data/spec/fixtures/environments.json +14 -0
  22. data/spec/fixtures/issue_award_emoji.json +16 -0
  23. data/spec/fixtures/issue_award_emojis.json +34 -0
  24. data/spec/fixtures/label.json +1 -1
  25. data/spec/fixtures/label_unsubscribe.json +1 -0
  26. data/spec/fixtures/merge_request_award_emoji.json +16 -0
  27. data/spec/fixtures/merge_request_award_emojis.json +34 -0
  28. data/spec/fixtures/note_award_emoji.json +16 -0
  29. data/spec/fixtures/note_award_emojis.json +18 -0
  30. data/spec/fixtures/snippet_award_emoji.json +16 -0
  31. data/spec/fixtures/snippet_award_emojis.json +34 -0
  32. data/spec/fixtures/todo.json +73 -0
  33. data/spec/fixtures/todos.json +148 -0
  34. data/spec/gitlab/client/award_emojis_spec.rb +391 -0
  35. data/spec/gitlab/client/boards_spec.rb +94 -0
  36. data/spec/gitlab/client/branches_spec.rb +22 -5
  37. data/spec/gitlab/client/commits_spec.rb +2 -2
  38. data/spec/gitlab/client/environments_spec.rb +132 -0
  39. data/spec/gitlab/client/groups_spec.rb +10 -12
  40. data/spec/gitlab/client/labels_spec.rb +32 -0
  41. data/spec/gitlab/client/notes_spec.rb +128 -0
  42. data/spec/gitlab/client/projects_spec.rb +20 -10
  43. data/spec/gitlab/client/repository_files_spec.rb +30 -12
  44. data/spec/gitlab/client/system_hooks_spec.rb +2 -2
  45. data/spec/gitlab/client/todos_spec.rb +45 -0
  46. metadata +46 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 495b1042cb1c31a952e20736b66c03ff91503e55
4
- data.tar.gz: b1d768d0e57f2687e947d10e9401742d15815b18
3
+ metadata.gz: 2fd8bd1d12fdceba122d4fd99e3df259c399e629
4
+ data.tar.gz: dd195a082fc9a572a22ff4074306891ccc9553a1
5
5
  SHA512:
6
- metadata.gz: 9478123ca2e7e8bbb1a2ea4cc7a0bcea6675f3dcf54c40033e7d30512eb29b3ed2af07a8e92d940c2f7295b8c319dd70fe2a0e7ef2d344f1e566303704653e42
7
- data.tar.gz: 976085a5f7b15f55ea2f2fe6a6ffc67c63d1b0c6d2417320b74e17bdad310f3401e6fe82efb8f3b06f52010d9fc561e92e3e4d3295ce5ee5f004eca836f7fef1
6
+ metadata.gz: 0edc2245a554decf8c18723979c256e6e7926d67521fa9ffeef11508b3bad1501e31ea3fe7ba91c1e9a5efe98a66149e6be3f2adcb25199c3118e5e6bde9b847
7
+ data.tar.gz: 12aa581f975cd5bbc7cebe3fb75eef20d1fb87eab9119af485c3a2158779a673cd0c1da74ee4a0d91f05adfe582a35f906e7679f2fd4650f65b5c04167926c28
@@ -2,6 +2,23 @@
2
2
 
3
3
  ### Unreleased
4
4
 
5
+ ### 4.2.0 (13/07/2017)
6
+ - Use `url_encode` in all `Commit` resources (@grodowski)
7
+ - Fix `project_search` path for APIv4 (@edaubert)
8
+ - Add options to `Labels#create_label` (@hlidotbe)
9
+ - Add `Board` API support (@hlidotbe)
10
+ - `Award Emoji` API (@akkee)
11
+ - Subscribe and unsubscribe actions for labels (@akkee)
12
+ - Add `options` hash to `add_hook` method (@mltsy)
13
+ - Update repository files endpoint APIv4 (@mltsy)
14
+ - Update `Branch` docs and add `options` param to `protect_branch` (@mltsy)
15
+ - Fix and clarify `edit_project` option docs (@mltsy)
16
+ - Add `TODO` API (@akkee)
17
+ - Use `body` parameter to send POST data (@sr189)
18
+ - Add `Environments` module (@mltsy)
19
+ - Edit and Delete methods for `Notes` API (@akkee)
20
+ - Rename `branch_name` parameter to `branch` in `create_branch` & `create_commit` methods (@sr189)
21
+
5
22
  ### 4.1.0 (26/05/2017)
6
23
  - Add appropriate Content-Type header (@mltsy)
7
24
  - Add `Jobs` endpoint methods (@hjanuschka)
@@ -3,10 +3,13 @@ module Gitlab
3
3
  class Client < API
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
5
5
 
6
+ include AwardEmojis
7
+ include Boards
6
8
  include Branches
7
9
  include Builds
8
10
  include BuildVariables
9
11
  include Commits
12
+ include Environments
10
13
  include Groups
11
14
  include Issues
12
15
  include Keys
@@ -25,6 +28,7 @@ module Gitlab
25
28
  include Snippets
26
29
  include SystemHooks
27
30
  include Tags
31
+ include Todos
28
32
  include Users
29
33
  include Jobs
30
34
 
@@ -0,0 +1,135 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to Award Emojis.
3
+ # @see https://docs.gitlab.com/ce/api/award_emoji.html
4
+ module AwardEmojis
5
+ # Gets a list of all award emoji for an awardable(issue, merge request or snippet)
6
+ #
7
+ # @example
8
+ # Gitlab.award_emojis(1, 80, 'issue')
9
+ # Gitlab.award_emojis(1, 60, 'merge_request')
10
+ # Gitlab.award_emojis(1, 40, 'snippet')
11
+ #
12
+ # @param [Integer] project The ID of a project.
13
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
14
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
15
+ # @return [Array<Gitlab::ObjectifiedHash>]
16
+ def award_emojis(project, awardable_id, awardable_type)
17
+ get("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/award_emoji")
18
+ end
19
+
20
+ # Gets a list of all award emoji for a single note on an awardable(issue, merge request or snippet)
21
+ #
22
+ # @example
23
+ # Gitlab.note_award_emojis(1, 80, 'issue', 1)
24
+ # Gitlab.note_award_emojis(1, 60, 'merge_request', 1)
25
+ # Gitlab.note_award_emojis(1, 40, 'snippet', 1)
26
+ #
27
+ # @param [Integer] project The ID of a project.
28
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
29
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
30
+ # @param [Integer] note_id The ID of a note.
31
+ # @return [Array<Gitlab::ObjectifiedHash>]
32
+ def note_award_emojis(project, awardable_id, awardable_type, note_id)
33
+ get("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/notes/#{note_id}/award_emoji")
34
+ end
35
+
36
+ # Gets a single award emoji for an awardable(issue, merge request or snippet)
37
+ #
38
+ # @example
39
+ # Gitlab.award_emoji(1, 80, 'issue', 4)
40
+ # Gitlab.award_emoji(1, 60, 'merge_request', 4)
41
+ # Gitlab.award_emoji(1, 40, 'snippet', 4)
42
+ #
43
+ # @param [Integer] project The ID of a project.
44
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
45
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
46
+ # @param [Integer] award_id The ID of an award emoji.
47
+ # @return [Gitlab::ObjectifiedHash]
48
+ def award_emoji(project, awardable_id, awardable_type, award_id)
49
+ get("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/award_emoji/#{award_id}")
50
+ end
51
+
52
+ # Gets a single award emoji from a single note on an awardable(issue, merge request or snippet)
53
+ #
54
+ # @example
55
+ # Gitlab.note_award_emoji(1, 80, 'issue', 1, 4)
56
+ # Gitlab.note_award_emoji(1, 60, 'merge_request', 1, 4)
57
+ # Gitlab.note_award_emoji(1, 40, 'snippet', 1, 4)
58
+ #
59
+ # @param [Integer] project The ID of a project.
60
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
61
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
62
+ # @param [Integer] note_id The ID of a note.
63
+ # @param [Integer] award_id The ID of an award emoji.
64
+ # @return [Gitlab::ObjectifiedHash]
65
+ def note_award_emoji(project, awardable_id, awardable_type, note_id, award_id)
66
+ get("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/notes/#{note_id}/award_emoji/#{award_id}")
67
+ end
68
+
69
+ # Awards a new emoji to an awardable(issue, merge request or snippet)
70
+ #
71
+ # @example
72
+ # Gitlab.create_award_emoji(1, 80, 'issue', 'blowfish')
73
+ # Gitlab.create_award_emoji(1, 80, 'merge_request', 'blowfish')
74
+ # Gitlab.create_award_emoji(1, 80, 'snippet', 'blowfish')
75
+ #
76
+ # @param [Integer] project The ID of a project.
77
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
78
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
79
+ # @param [String] emoji_name The name of the emoji, without colons.
80
+ # @return [Gitlab::ObjectifiedHash]
81
+ def create_award_emoji(project, awardable_id, awardable_type, emoji_name)
82
+ post("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/award_emoji", body: {name: emoji_name})
83
+ end
84
+
85
+ # Awards a new emoji to a note on an awardable(issue, merge request or snippet)
86
+ #
87
+ # @example
88
+ # Gitlab.create_note_award_emoji(1, 80, 'issue', 1, 'blowfish')
89
+ # Gitlab.create_note_award_emoji(1, 80, 'merge_request', 1, 'blowfish')
90
+ # Gitlab.create_note_award_emoji(1, 80, 'snippet', 1, 'blowfish')
91
+ #
92
+ # @param [Integer] project The ID of a project.
93
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
94
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
95
+ # @param [Integer] note_id The ID of a note.
96
+ # @param [String] emoji_name The name of the emoji, without colons.
97
+ # @return [Gitlab::ObjectifiedHash]
98
+ def create_note_award_emoji(project, awardable_id, awardable_type, note_id, emoji_name)
99
+ post("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/notes/#{note_id}/award_emoji", body: {name: emoji_name})
100
+ end
101
+
102
+ # Deletes a single award emoji from an awardable(issue, merge request or snippet)
103
+ #
104
+ # @example
105
+ # Gitlab.delete_award_emoji(1, 80, 'issue', 4)
106
+ # Gitlab.delete_award_emoji(1, 60, 'merge_request', 4)
107
+ # Gitlab.delete_award_emoji(1, 40, 'snippet', 4)
108
+ #
109
+ # @param [Integer] project The ID of a project.
110
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
111
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
112
+ # @param [Integer] award_id The ID of an award emoji.
113
+ # @return [void] This API call returns an empty response body.
114
+ def delete_award_emoji(project, awardable_id, awardable_type, award_id)
115
+ delete("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/award_emoji/#{award_id}")
116
+ end
117
+
118
+ # Deletes a single award emoji from a single note on an awardable(issue, merge request or snippet)
119
+ #
120
+ # @example
121
+ # Gitlab.delete_note_award_emoji(1, 80, 'issue', 1, 4)
122
+ # Gitlab.delete_note_award_emoji(1, 60, 'merge_request', 1, 4)
123
+ # Gitlab.delete_note_award_emoji(1, 40, 'snippet', 1, 4)
124
+ #
125
+ # @param [Integer] project The ID of a project.
126
+ # @param [Integer] awardable_id The ID of an awardable(issue, merge request or snippet).
127
+ # @param [String] awardable_type The type of the awardable(can be 'issue', 'merge_request' or 'snippet')
128
+ # @param [Integer] note_id The ID of a note.
129
+ # @param [Integer] award_id The ID of an award emoji.
130
+ # @return [void] This API call returns an empty response body.
131
+ def delete_note_award_emoji(project, awardable_id, awardable_type, note_id, award_id)
132
+ delete("/projects/#{url_encode project}/#{awardable_type}s/#{awardable_id}/notes/#{note_id}/award_emoji/#{award_id}")
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,88 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to issue boards.
3
+ # @see https://docs.gitlab.com/ce/api/boards.html
4
+ module Boards
5
+ # Gets a list of project's boards.
6
+ #
7
+ # @example
8
+ # Gitlab.boards(5)
9
+ # Gitlab.boards({ per_page: 40 })
10
+ #
11
+ # @param [Integer, String] project The ID or name of a project.
12
+ # @param [Hash] options A customizable set of options.
13
+ # @option options [Integer] :page The page number.
14
+ # @option options [Integer] :per_page The number of results per page.
15
+ # @return [Array<Gitlab::ObjectifiedHash>]
16
+ def boards(project, options={})
17
+ get("/projects/#{url_encode project}/boards", query: options)
18
+ end
19
+
20
+ # Gets a board lists
21
+ #
22
+ # @example
23
+ # Gitlab.board_lists(5, 42)
24
+ #
25
+ # @param [Integer, String] project The ID or name of a project.
26
+ # @param [Integer] id The ID of a board.
27
+ # @return [Gitlab::ObjectifiedHash]
28
+ def board_lists(project, id)
29
+ get("/projects/#{url_encode project}/boards/#{id}/lists")
30
+ end
31
+ #
32
+ # Gets a single board list
33
+ #
34
+ # @example
35
+ # Gitlab.board_list(5, 42, 25)
36
+ #
37
+ # @param [Integer, String] project The ID or name of a project.
38
+ # @param [Integer] board_id The ID of a board.
39
+ # @param [Integer] id The ID of a list.
40
+ # @return [Gitlab::ObjectifiedHash]
41
+ def board_list(project, board_id, id)
42
+ get("/projects/#{url_encode project}/boards/#{board_id}/lists/#{id}")
43
+ end
44
+
45
+ # Creates a new board list.
46
+ # Only for admins and project owners
47
+ #
48
+ # @example
49
+ # Gitlab.create_board_list(5, 42, 25)
50
+ #
51
+ # @param [Integer, String] project The ID or name of a project.
52
+ # @param [Integer] id The ID of a board.
53
+ # @param [Integer] label_id The ID of a label.
54
+ # @return [Gitlab::ObjectifiedHash] Information about created list.
55
+ def create_board_list(project, board_id, label_id)
56
+ post("/projects/#{url_encode project}/boards/#{board_id}/lists", body: {label_id: label_id})
57
+ end
58
+
59
+ # Updates a board list.
60
+ # Only for admins and project owners
61
+ #
62
+ # @example
63
+ # Gitlab.edit_board_list(6, 1, 12, 5)
64
+ #
65
+ # @param [Integer, String] project The ID or name of a project.
66
+ # @param [Integer] board_id The ID of a board.
67
+ # @param [Integer] id The ID of a list.
68
+ # @return [Gitlab::ObjectifiedHash] Information about updated board list.
69
+ def edit_board_list(project, board_id, id, position)
70
+ put("/projects/#{url_encode project}/boards/#{board_id}/lists/#{id}", body: {position: position})
71
+ end
72
+
73
+ # Deletes a board list.
74
+ # Only for admins and project owners
75
+ #
76
+ # @example
77
+ # Gitlab.delete_board_list(3, 42, 32)
78
+ #
79
+ # @param [Integer, String] project The ID or name of a project.
80
+ # @param [Integer] board_id The ID of a board.
81
+ # @param [Integer] id The ID of a list.
82
+ # @return [Gitlab::ObjectifiedHash] Information about deleted board list.
83
+ def delete_board_list(project, board_id, id)
84
+ delete("/projects/#{url_encode project}/boards/#{board_id}/lists/#{id}")
85
+ end
86
+ end
87
+ end
88
+
@@ -36,12 +36,18 @@ class Gitlab::Client
36
36
  # @example
37
37
  # Gitlab.protect_branch(3, 'api')
38
38
  # Gitlab.repo_protect_branch(5, 'master')
39
+ # Gitlab.protect_branch(5, 'api', developers_can_push: true)
40
+ #
41
+ # To update options, call `protect_branch` again with new options (i.e. `developers_can_push: false`)
39
42
  #
40
43
  # @param [Integer, String] project The ID or name of a project.
41
44
  # @param [String] branch The name of the branch.
42
- # @return [Gitlab::ObjectifiedHash]
43
- def protect_branch(project, branch)
44
- put("/projects/#{url_encode project}/repository/branches/#{branch}/protect")
45
+ # @param [Hash] options A customizable set of options.
46
+ # @option options [Boolean] :developers_can_push True to allow developers to push to the branch (default = false)
47
+ # @option options [Boolean] :developers_can_merge True to allow developers to merge into the branch (default = false)
48
+ # @return [Gitlab::ObjectifiedHash] Details about the branch
49
+ def protect_branch(project, branch, options = {})
50
+ put("/projects/#{url_encode project}/repository/branches/#{branch}/protect", body: options)
45
51
  end
46
52
  alias_method :repo_protect_branch, :protect_branch
47
53
 
@@ -53,7 +59,7 @@ class Gitlab::Client
53
59
  #
54
60
  # @param [Integer, String] project The ID or name of a project.
55
61
  # @param [String] branch The name of the branch.
56
- # @return [Gitlab::ObjectifiedHash]
62
+ # @return [Gitlab::ObjectifiedHash] Details about the branch
57
63
  def unprotect_branch(project, branch)
58
64
  put("/projects/#{url_encode project}/repository/branches/#{branch}/unprotect")
59
65
  end
@@ -68,9 +74,9 @@ class Gitlab::Client
68
74
  # @param [Integer, String] project The ID or name of a project.
69
75
  # @param [String] branch The name of the new branch.
70
76
  # @param [String] ref Create branch from commit sha or existing branch
71
- # @return [Gitlab::ObjectifiedHash]
77
+ # @return [Gitlab::ObjectifiedHash] Details about the branch
72
78
  def create_branch(project, branch, ref)
73
- post("/projects/#{url_encode project}/repository/branches", body: { branch_name: branch, ref: ref })
79
+ post("/projects/#{url_encode project}/repository/branches", body: { branch: branch, ref: ref })
74
80
  end
75
81
  alias_method :repo_create_branch, :create_branch
76
82
 
@@ -82,7 +88,6 @@ class Gitlab::Client
82
88
  #
83
89
  # @param [Integer, String] project The ID or name of a project.
84
90
  # @param [String] branch The name of the branch to delete
85
- # @return [Gitlab::ObjectifiedHash]
86
91
  def delete_branch(project, branch)
87
92
  delete("/projects/#{url_encode project}/repository/branches/#{branch}")
88
93
  end
@@ -94,8 +94,8 @@ class Gitlab::Client
94
94
  # @option options [String] :stage Filter by stage
95
95
  # @option options [String] :name Filter by status name, eg. jenkins
96
96
  # @option options [Boolean] :all The flag to return all statuses, not only latest ones
97
- def commit_status(id, sha, options={})
98
- get("/projects/#{id}/repository/commits/#{sha}/statuses", query: options)
97
+ def commit_status(project, sha, options={})
98
+ get("/projects/#{url_encode project}/repository/commits/#{sha}/statuses", query: options)
99
99
  end
100
100
  alias_method :repo_commit_status, :commit_status
101
101
 
@@ -113,8 +113,8 @@ class Gitlab::Client
113
113
  # @option options [String] :ref The ref (branch or tag) to which the status refers
114
114
  # @option options [String] :name Filter by status name, eg. jenkins
115
115
  # @option options [String] :target_url The target URL to associate with this status
116
- def update_commit_status(id, sha, state, options={})
117
- post("/projects/#{id}/statuses/#{sha}", query: options.merge(state: state))
116
+ def update_commit_status(project, sha, state, options={})
117
+ post("/projects/#{url_encode project}/statuses/#{sha}", query: options.merge(state: state))
118
118
  end
119
119
  alias_method :repo_update_commit_status, :update_commit_status
120
120
 
@@ -136,11 +136,11 @@ class Gitlab::Client
136
136
  # @return [Gitlab::ObjectifiedHash] hash of commit related data
137
137
  def create_commit(project, branch, message, actions, options={})
138
138
  payload = {
139
- branch_name: branch,
139
+ branch: branch,
140
140
  commit_message: message,
141
141
  actions: actions,
142
142
  }.merge(options)
143
- post("/projects/#{url_encode project}/repository/commits", query: payload)
143
+ post("/projects/#{url_encode project}/repository/commits", body: payload)
144
144
  end
145
145
  end
146
146
  end
@@ -0,0 +1,87 @@
1
+ class Gitlab::Client
2
+ # Defines methods related to environments.
3
+ # @see https://docs.gitlab.com/ce/api/environments.html
4
+ module Environments
5
+ # Gets a list of project environments.
6
+ #
7
+ # @example
8
+ # Gitlab.environments(5)
9
+ # Gitlab.environments(5, { per_page: 10, page: 2 })
10
+ #
11
+ # @param [Integer, String] project The ID or name of a project.
12
+ # @param [Hash] options A customizable set of options.
13
+ # @option options [Integer] :page The page number.
14
+ # @option options [Integer] :per_page The number of results per page.
15
+ # @return [Array<Gitlab::ObjectifiedHash>]
16
+ def environments(project, options={})
17
+ get("/projects/#{url_encode project}/environments", query: options)
18
+ end
19
+
20
+ # Gets a single environment.
21
+ #
22
+ # @example
23
+ # Gitlab.environment(5, 36)
24
+ #
25
+ # @param [Integer, String] project The ID or name of a project.
26
+ # @param [Integer] id The ID of an environment.
27
+ # @return [Gitlab::ObjectifiedHash]
28
+ def environment(project, id)
29
+ get("/projects/#{url_encode project}/environments/#{id}")
30
+ end
31
+
32
+ # Create an environment.
33
+ #
34
+ # @examples
35
+ # Gitlab.create_environment(5, 'test-branch')
36
+ # Gitlab.create_environment(5, 'test-branch', external_url: 'https://test-branch.example.host.com')
37
+ #
38
+ # @param [Integer, String] project The ID or name of a project.
39
+ # @param [String] env_name Name for the environment
40
+ # @option options [String] :external_url Optional URL for viewing the deployed project in this environment
41
+ # @return [Gitlab::ObjectifiedHash] The updated environment.
42
+ def create_environment(project, env_name, options = {})
43
+ body = {name: env_name}.merge(options)
44
+ post("/projects/#{url_encode project}/environments", body: body)
45
+ end
46
+
47
+ # Update an environment.
48
+ #
49
+ # @examples
50
+ # Gitlab.edit_environment(5, 36, name: 'test-branch')
51
+ # Gitlab.edit_environment(5, 36, external_url: 'https://test-branch.example.host.com')
52
+ #
53
+ # @param [Integer, String] project The ID or name of a project.
54
+ # @param [Integer] id The ID of an environment.
55
+ # @param [Hash] options A hash of the attribute keys & values to update.
56
+ # @option options [String] env_name Name for the environment
57
+ # @option options [String] external_url Optional URL for viewing the deployed project in this environment
58
+ # @return [Gitlab::ObjectifiedHash] The updated environment.
59
+ def edit_environment(project, id, options={})
60
+ put("/projects/#{url_encode project}/environments/#{id}", body: options)
61
+ end
62
+
63
+ # Deletes an environment.
64
+ #
65
+ # @example
66
+ # Gitlab.delete_environment(5, 36)
67
+ #
68
+ # @param [Integer, String] project The ID or name of a project.
69
+ # @param [Integer] id The ID of an environment.
70
+ # @return [Gitlab::ObjectifiedHash] Information about the deleted environment.
71
+ def delete_environment(project, id)
72
+ delete("/projects/#{url_encode project}/environments/#{id}")
73
+ end
74
+
75
+ # Stop an environment.
76
+ #
77
+ # @example
78
+ # Gitlab.stop_environment(5, 36)
79
+ #
80
+ # @param [Integer, String] project The ID or name of a project.
81
+ # @param [Integer] id The ID of an environment.
82
+ # @return [Array<Gitlab::ObjectifiedHash>] The stopped environment.
83
+ def stop_environment(project, id)
84
+ post("/projects/#{url_encode project}/environments/#{id}/stop")
85
+ end
86
+ end
87
+ end