2017-04-11 21:34:59 -04:00
|
|
|
module Github
|
|
|
|
module Representation
|
2017-04-19 18:17:42 -04:00
|
|
|
class PullRequest < Representation::Issuable
|
2017-10-05 04:57:34 -04:00
|
|
|
delegate :sha, to: :source_branch, prefix: true
|
|
|
|
delegate :sha, to: :target_branch, prefix: true
|
2017-04-11 21:34:59 -04:00
|
|
|
|
|
|
|
def source_project
|
|
|
|
project
|
|
|
|
end
|
|
|
|
|
|
|
|
def source_branch_name
|
2017-09-22 11:43:20 -04:00
|
|
|
# Mimic the "user:branch" displayed in the MR widget,
|
|
|
|
# i.e. "Request to merge rymai:add-external-mounts into master"
|
2017-10-05 04:57:34 -04:00
|
|
|
cross_project? ? "#{source_branch.user}:#{source_branch.ref}" : source_branch.ref
|
2017-06-20 20:39:51 -04:00
|
|
|
end
|
|
|
|
|
2017-04-11 21:34:59 -04:00
|
|
|
def target_project
|
|
|
|
project
|
|
|
|
end
|
|
|
|
|
|
|
|
def target_branch_name
|
2017-10-05 04:57:34 -04:00
|
|
|
target_branch.ref
|
2017-06-20 20:39:51 -04:00
|
|
|
end
|
|
|
|
|
2017-04-11 21:34:59 -04:00
|
|
|
def state
|
|
|
|
return 'merged' if raw['state'] == 'closed' && raw['merged_at'].present?
|
|
|
|
return 'closed' if raw['state'] == 'closed'
|
|
|
|
|
|
|
|
'opened'
|
|
|
|
end
|
|
|
|
|
|
|
|
def opened?
|
|
|
|
state == 'opened'
|
|
|
|
end
|
|
|
|
|
|
|
|
def valid?
|
|
|
|
source_branch.valid? && target_branch.valid?
|
|
|
|
end
|
|
|
|
|
2017-10-05 04:43:18 -04:00
|
|
|
def assigned?
|
|
|
|
raw['assignee'].present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def assignee
|
|
|
|
return unless assigned?
|
|
|
|
|
|
|
|
@assignee ||= Github::Representation::User.new(raw['assignee'], options)
|
|
|
|
end
|
|
|
|
|
2017-04-11 21:34:59 -04:00
|
|
|
private
|
|
|
|
|
2017-04-24 20:13:51 -04:00
|
|
|
def project
|
|
|
|
@project ||= options.fetch(:project)
|
|
|
|
end
|
|
|
|
|
2017-04-11 21:34:59 -04:00
|
|
|
def source_branch
|
2017-04-24 20:13:51 -04:00
|
|
|
@source_branch ||= Representation::Branch.new(raw['head'], repository: project.repository)
|
2017-04-11 21:34:59 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def target_branch
|
2017-04-24 20:13:51 -04:00
|
|
|
@target_branch ||= Representation::Branch.new(raw['base'], repository: project.repository)
|
2017-04-11 21:34:59 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def cross_project?
|
2017-10-05 04:57:34 -04:00
|
|
|
return true unless source_branch.repo?
|
2017-04-11 21:34:59 -04:00
|
|
|
|
2017-10-05 04:57:34 -04:00
|
|
|
source_branch.repo.id != target_branch.repo.id
|
2017-04-11 21:34:59 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|