Class: Gitlab::GithubImport::Representation::PullRequest
- Inherits:
-
Object
- Object
- Gitlab::GithubImport::Representation::PullRequest
- Includes:
- Representable
- Defined in:
- lib/gitlab/github_import/representation/pull_request.rb
Class Method Summary collapse
-
.from_api_response(pr, additional_data = {}) ⇒ Object
Builds a PR from a GitHub API response.
-
.from_json_hash(raw_hash) ⇒ Object
Builds a new PR using a Hash that was built from a JSON payload.
Instance Method Summary collapse
- #cross_project? ⇒ Boolean
-
#formatted_source_branch ⇒ Object
Returns a formatted source branch.
- #github_identifiers ⇒ Object
-
#initialize(attributes) ⇒ PullRequest
constructor
attributes - A Hash containing the raw PR details.
- #issuable_type ⇒ Object
- #state ⇒ Object
- #truncated_title ⇒ Object
Constructor Details
#initialize(attributes) ⇒ PullRequest
attributes - A Hash containing the raw PR details. The keys of this
Hash (and any nested hashes) must be symbols.
64 65 66 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 64 def initialize(attributes) @attributes = attributes end |
Class Method Details
.from_api_response(pr, additional_data = {}) ⇒ Object
Builds a PR from a GitHub API response.
issue - An instance of Hash containing the PR details.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 18 def self.from_api_response(pr, additional_data = {}) assignee = Representation::User.from_api_response(pr[:assignee]) if pr[:assignee] user = Representation::User.from_api_response(pr[:user]) if pr[:user] merged_by = Representation::User.from_api_response(pr[:merged_by]) if pr[:merged_by] hash = { iid: pr[:number], title: pr[:title], description: pr[:body], source_branch: pr.dig(:head, :ref), target_branch: pr.dig(:base, :ref), source_branch_sha: pr.dig(:head, :sha), target_branch_sha: pr.dig(:base, :sha), source_repository_id: pr.dig(:head, :repo, :id), target_repository_id: pr.dig(:base, :repo, :id), source_repository_owner: pr.dig(:head, :user, :login), state: pr[:state] == 'open' ? :opened : :closed, milestone_number: pr.dig(:milestone, :number), author: user, assignee: assignee, created_at: pr[:created_at], updated_at: pr[:updated_at], merged_at: pr[:merged_at], merged_by: merged_by } new(hash) end |
.from_json_hash(raw_hash) ⇒ Object
Builds a new PR using a Hash that was built from a JSON payload.
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 48 def self.from_json_hash(raw_hash) hash = Representation.symbolize_hash(raw_hash) hash[:state] = hash[:state].to_sym hash[:author] &&= Representation::User.from_json_hash(hash[:author]) # Assignees are optional so we only convert it from a Hash if one was # set. hash[:assignee] &&= Representation::User.from_json_hash(hash[:assignee]) hash[:merged_by] &&= Representation::User.from_json_hash(hash[:merged_by]) new(hash) end |
Instance Method Details
#cross_project? ⇒ Boolean
98 99 100 101 102 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 98 def cross_project? return true unless source_repository_id source_repository_id != target_repository_id end |
#formatted_source_branch ⇒ Object
Returns a formatted source branch.
For cross-project pull requests the branch name will be in the format github/fork/owner-name/branch-name.
76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 76 def formatted_source_branch if cross_project? && source_repository_owner "github/fork/#{source_repository_owner}/#{source_branch}" elsif source_branch == target_branch # Sometimes the source and target branch are the same, but GitLab # doesn't support this. This can happen when both the user and # source repository have been deleted, and the PR was submitted from # the fork's master branch. "#{source_branch}-#{iid}" else source_branch end end |
#github_identifiers ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 108 def github_identifiers { iid: iid, issuable_type: issuable_type, title: title } end |
#issuable_type ⇒ Object
104 105 106 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 104 def issuable_type 'MergeRequest' end |
#state ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 90 def state if merged_at :merged else attributes[:state] end end |
#truncated_title ⇒ Object
68 69 70 |
# File 'lib/gitlab/github_import/representation/pull_request.rb', line 68 def truncated_title title.truncate(255) end |