summaryrefslogtreecommitdiff
path: root/lib/gitlab/github_import/representation/pull_request_review.rb
blob: 08b3160fc4cc3ae4cdbe11542aadee3059085ba4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
46
47
48
49
# 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 if hash[:submitted_at].present?

          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