Class: HustleAndFlow::IssueTrackers::Github::PullRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/hustle_and_flow/issue_trackers/github/pull_request.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracker:, data:) ⇒ PullRequest

Returns a new instance of PullRequest.



11
12
13
14
15
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 11

def initialize(tracker:, data:)
  self.tracker = tracker
  self.data    = data
  self.issue   = Issue.new(tracker: tracker, data: client.issue(tracker.repo_name, number))
end

Instance Attribute Details

#dataObject

Returns the value of attribute data.



7
8
9
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 7

def data
  @data
end

#issueObject

Returns the value of attribute issue.



7
8
9
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 7

def issue
  @issue
end

#trackerObject

Returns the value of attribute tracker.



7
8
9
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 7

def tracker
  @tracker
end

Class Method Details

.find(tracker:, **args) ⇒ Object



65
66
67
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 65

def self.find(tracker:, **args)
  new(tracker: tracker).find(**args)
end

Instance Method Details

#being_reviewed?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 35

def being_reviewed?
  has_label?(%w{in-review})
end

#bodyObject



53
54
55
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 53

def body
  data[:body]
end

#branchObject



92
93
94
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 92

def branch
  data[:head][:label]
end

#closed?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 45

def closed?
  status == 'closed'
end

#find(me: tracker.me, **filters) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 57

def find(me: tracker.me, **filters)
  client.
  pull_requests(
    repo.base_name,
    pull_request_data,
  )
end

#has_label?(other = []) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 96

def has_label?(other = [])
  issue.has_label?(other)
end

#in_development?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 27

def in_development?
  !has_label?(%w{needs-review in-review})
end

#labelsObject



88
89
90
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 88

def labels
  issue.send(:labels)
end

#match?(labels: nil, **args) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
77
78
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 69

def match?(labels: nil, **args)
  result     = true
  conditions = args

  conditions.each do |key, value|
    result &&= public_send(key) == value
  end

  result &&= labels ? has_label?(labels) : true
end

#merged?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 23

def merged?
  client.pull_request_merged?(tracker.repo_name, number)
end

#numberObject



84
85
86
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 84

def number
  data[:number]
end

#ready_for_reviewObject



39
40
41
42
43
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 39

def ready_for_review
  reviewed_labels = labels.dup.push('needs-review')

  client.update_issue(tracker.repo_name, number, title, body, labels: reviewed_labels)
end

#ready_for_review?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 31

def ready_for_review?
  has_label?(%w{needs-review})
end

#reopenObject



17
18
19
20
21
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 17

def reopen
  reopened_issue_data = client.update_pull_request(tracker.repo_name, number, state: 'open')

  closed? ? PullRequest.new(tracker: tracker, data: reopened_issue_data) : self
end

#statusObject



49
50
51
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 49

def status
  data[:state]
end

#titleObject



80
81
82
# File 'lib/hustle_and_flow/issue_trackers/github/pull_request.rb', line 80

def title
  data[:title]
end