49 lines
1.4 KiB
Ruby
49 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module GithubImport
|
|
module Representation
|
|
class PullRequestReview
|
|
include ToHash
|
|
include ExposeAttribute
|
|
|
|
attr_reader :attributes
|
|
|
|
expose_attribute :author, :note, :review_type, :submitted_at, :github_id, :merge_request_id
|
|
|
|
def self.from_api_response(review)
|
|
user = Representation::User.from_api_response(review.user) if review.user
|
|
|
|
new(
|
|
merge_request_id: review.merge_request_id,
|
|
author: user,
|
|
note: review.body,
|
|
review_type: review.state,
|
|
submitted_at: review.submitted_at,
|
|
github_id: review.id
|
|
)
|
|
end
|
|
|
|
# Builds a new note using a Hash that was built from a JSON payload.
|
|
def self.from_json_hash(raw_hash)
|
|
hash = Representation.symbolize_hash(raw_hash)
|
|
|
|
hash[:author] &&= Representation::User.from_json_hash(hash[:author])
|
|
hash[:submitted_at] = Time.parse(hash[:submitted_at]).in_time_zone
|
|
|
|
new(hash)
|
|
end
|
|
|
|
# attributes - A Hash containing the raw note details. The keys of this
|
|
# Hash must be Symbols.
|
|
def initialize(attributes)
|
|
@attributes = attributes
|
|
end
|
|
|
|
def approval?
|
|
review_type == 'APPROVED'
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|