Class: Danger::DangerGithubExt

Inherits:
DangerfileGitHubPlugin
  • Object
show all
Defined in:
lib/github_ext/plugin.rb

Overview

This is Danger Plugin for GitHub extension. When installing this plugin, you can additional methods on github instance

Examples:

Determine if pull request is mergeable and mergeable status is clean


github.mergeable?

List labels for the pull request


github.labels

Add labels to the pull request


github.add_labels 'build ok'

Remove labels from the pull request


github.remove_labels 'build failed'

List current statuses for the head commit


github.statuses

See Also:

  • duck8823/danger-github_ext

Instance Method Summary collapse

Constructor Details

#initialize(dangerfile) ⇒ DangerGithubExt

Returns a new instance of DangerGithubExt.



30
31
32
33
34
# File 'lib/github_ext/plugin.rb', line 30

def initialize(dangerfile)
  super(dangerfile)

  self.api.auto_paginate = true
end

Instance Method Details

#add_labels(labels) ⇒ void

This method returns an undefined value.

add labels to pull request

Parameters:

  • labels ([String])


58
59
60
61
62
# File 'lib/github_ext/plugin.rb', line 58

def add_labels(labels)
  @repo ||= self.pr_json.base.repo.full_name
  @number ||= self.pr_json.number
  self.api.add_labels_to_an_issue(@repo, @number, Array(labels))
end

#labels[String]

Get labels

Returns:

  • ([String])


46
47
48
49
50
51
52
# File 'lib/github_ext/plugin.rb', line 46

def labels
  @repo ||= self.pr_json.base.repo.full_name
  @number ||= self.pr_json.number
  self.api.labels_for_issue(@repo, @number).map { |issue|
    issue.name
  }
end

#mergeable?boolean

Whether mergeable and mergeable status is clean

Returns:

  • (boolean)


39
40
41
# File 'lib/github_ext/plugin.rb', line 39

def mergeable?
  self.pr_json.attrs[:mergeable_state] == 'clean' && github.pr_json.attrs[:mergeable]
end

#remove_labels(labels) ⇒ void

This method returns an undefined value.

remove labels from pull request

Parameters:

  • labels ([String])


68
69
70
71
72
73
74
# File 'lib/github_ext/plugin.rb', line 68

def remove_labels(labels)
  @repo ||= self.pr_json.base.repo.full_name
  @number ||= self.pr_json.number
  Array(labels).each do |label|
    self.api.remove_label(@repo, @number, label)
  end
end

#statuses[Hash]

get current commit statuses

Returns:

  • ([Hash])


79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/github_ext/plugin.rb', line 79

def statuses
  @repo ||= self.pr_json.base.repo.full_name
  @sha  ||= self.head_commit
  statuses = {}
  self.api.statuses(@repo, @sha).each do |status|
    statuses[status.context] ||= []
    statuses[status.context].push({
                                      context: status.context,
                                      state: status.state,
                                      date: status.updated_at
                                  })
  end
  statuses.map {|_, val|
    val.sort{|a, b| b[:date] <=> a[:date] }[0]
  }
end