Class: Danger::DangerfileGitLabPlugin
- Defined in:
- lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb
Overview
Handles interacting with GitLab inside a Dangerfile. Provides a few functions which wrap ‘mr_json` and also through a few standard functions to simplify your code.
MR Metadata collapse
-
#mr_author ⇒ String
The username of the author of the Merge Request.
-
#mr_body ⇒ String
The body text of the Merge Request.
-
#mr_labels ⇒ String
The labels assigned to the Merge Request.
-
#mr_title ⇒ String
The title of the Merge Request.
MR Content collapse
-
#mr_diff ⇒ String
The unified diff produced by GitLab for this MR see [Unified diff](en.wikipedia.org/wiki/Diff_utility#Unified_format).
MR Changes collapse
-
#mr_changes ⇒ Array<Gitlab::ObjectifiedHash>
The array of changes.
MR Closes issues collapse
-
#mr_closes_issues ⇒ Array<Gitlab::ObjectifiedHash>
The array of issues that this MR closes.
MR Commit Metadata collapse
-
#base_commit ⇒ String
The base commit to which the MR is going to be merged as a parent.
-
#branch_for_base ⇒ String
The branch to which the MR is going to be merged into.
-
#branch_for_head ⇒ String
The branch to which the MR is going to be merged from.
-
#branch_for_merge ⇒ String
deprecated
Deprecated.
Please use #branch_for_base instead
-
#head_commit ⇒ String
The head commit to which the MR is requesting to be merged from.
GitLab Misc collapse
-
#api ⇒ GitLab::Client
Provides access to the GitLab API client used inside Danger.
-
#html_link(paths, full_path: true) ⇒ String
Returns a list of HTML anchors for a file, or files in the head repository.
-
#mr_json ⇒ Hash
The hash that represents the MR’s JSON.
-
#repository_web_url ⇒ String
Returns the web_url of the source project.
Gitlab Misc collapse
-
#dismiss_out_of_range_messages(dismiss = true) ⇒ void
Use to ignore inline messages which lay outside a diff’s range, thereby not posting the comment.
Class Method Summary collapse
-
.instance_name ⇒ String
The instance name used in the Dangerfile.
-
.new(dangerfile) ⇒ Object
So that this init can fail.
Instance Method Summary collapse
-
#initialize(dangerfile) ⇒ DangerfileGitLabPlugin
constructor
A new instance of DangerfileGitLabPlugin.
Methods inherited from Plugin
all_plugins, clear_external_plugins, inherited, #method_missing
Constructor Details
#initialize(dangerfile) ⇒ DangerfileGitLabPlugin
Returns a new instance of DangerfileGitLabPlugin.
88 89 90 91 92 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 88 def initialize(dangerfile) super(dangerfile) @gitlab = dangerfile.env.request_source end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Danger::Plugin
Class Method Details
.instance_name ⇒ String
The instance name used in the Dangerfile
84 85 86 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 84 def self.instance_name "gitlab" end |
.new(dangerfile) ⇒ Object
So that this init can fail.
75 76 77 78 79 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 75 def self.new(dangerfile) return nil if dangerfile.env.request_source.class != Danger::RequestSources::GitLab super end |
Instance Method Details
#api ⇒ GitLab::Client
Provides access to the GitLab API client used inside Danger. Making it easy to use the GitLab API inside a Dangerfile. See the gitlab gem’s [documentation](www.rubydoc.info/gems/gitlab/Gitlab/Client) for accessible methods.
208 209 210 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 208 def api @gitlab.client end |
#base_commit ⇒ String
The base commit to which the MR is going to be merged as a parent
180 181 182 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 180 def base_commit @gitlab.mr_json.diff_refs.base_sha end |
#branch_for_base ⇒ String
The branch to which the MR is going to be merged into.
164 165 166 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 164 def branch_for_base @gitlab.mr_json.target_branch end |
#branch_for_head ⇒ String
The branch to which the MR is going to be merged from.
172 173 174 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 172 def branch_for_head @gitlab.mr_json.source_branch end |
#branch_for_merge ⇒ String
Please use #branch_for_base instead
The branch to which the MR is going to be merged into
156 157 158 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 156 def branch_for_merge branch_for_base end |
#dismiss_out_of_range_messages(dismiss = true) ⇒ void
This method returns an undefined value.
Use to ignore inline messages which lay outside a diff’s range, thereby not posting the comment. You can set hash to change behavior per each kinds. (ex. ‘true, error: false`)
255 256 257 258 259 260 261 262 263 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 255 def (dismiss = true) if dismiss.kind_of?(Hash) @gitlab. = dismiss elsif dismiss.kind_of?(TrueClass) @gitlab. = true elsif dismiss.kind_of?(FalseClass) @gitlab. = false end end |
#head_commit ⇒ String
The head commit to which the MR is requesting to be merged from
188 189 190 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 188 def head_commit @gitlab.mr_json.diff_refs.head_sha end |
#html_link(paths, full_path: true) ⇒ String
Returns a list of HTML anchors for a file, or files in the head repository. An example would be: ‘<a href=’gitlab.com/artsy/eigen/blob/561827e46167077b5e53515b4b7349b8ae04610b/file.txt’>file.txt</a>‘. It returns a string of multiple anchors if passed an array.
233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 233 def html_link(paths, full_path: true) paths = [paths] unless paths.kind_of?(Array) commit = head_commit paths = paths.map do |path| url_path = path.start_with?("/") ? path : "/#{path}" text = full_path ? path : File.basename(path) create_link("#{repository_web_url}/blob/#{commit}#{url_path}", text) end return paths.first if paths.count < 2 paths.first(paths.count - 1).join(", ") + " & " + paths.last end |
#mr_author ⇒ String
The username of the author of the Merge Request
114 115 116 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 114 def @gitlab.mr_json..username.to_s end |
#mr_body ⇒ String
The body text of the Merge Request
106 107 108 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 106 def mr_body @gitlab.mr_json.description.to_s end |
#mr_changes ⇒ Array<Gitlab::ObjectifiedHash>
The array of changes
139 140 141 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 139 def mr_changes @gitlab.mr_changes.changes end |
#mr_closes_issues ⇒ Array<Gitlab::ObjectifiedHash>
The array of issues that this MR closes
147 148 149 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 147 def mr_closes_issues @gitlab.mr_closes_issues end |
#mr_diff ⇒ String
The unified diff produced by GitLab for this MR see [Unified diff](en.wikipedia.org/wiki/Diff_utility#Unified_format)
131 132 133 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 131 def mr_diff @gitlab.mr_diff end |
#mr_json ⇒ Hash
The hash that represents the MR’s JSON. See documentation for the structure [here](docs.gitlab.com/ce/api/merge_requests.html#get-single-mr)
197 198 199 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 197 def mr_json @gitlab.mr_json.to_hash end |
#mr_labels ⇒ String
The labels assigned to the Merge Request
122 123 124 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 122 def mr_labels @gitlab.mr_json.labels end |
#mr_title ⇒ String
The title of the Merge Request
98 99 100 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 98 def mr_title @gitlab.mr_json.title.to_s end |
#repository_web_url ⇒ String
Returns the web_url of the source project.
216 217 218 219 220 221 |
# File 'lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb', line 216 def repository_web_url @repository_web_url ||= begin project = api.project(mr_json["source_project_id"]) project.web_url end end |