Class: Gitlab::GithubImport::Representation::Note

Inherits:
Object
  • Object
show all
Includes:
Representable
Defined in:
lib/gitlab/github_import/representation/note.rb

Constant Summary collapse

NOTEABLE_TYPE_REGEX =
%r{/(?<type>(pull|issues))/(?<iid>\d+)}i

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes) ⇒ Note

attributes - A Hash containing the raw note details. The keys of this

Hash must be Symbols.


59
60
61
# File 'lib/gitlab/github_import/representation/note.rb', line 59

def initialize(attributes)
  @attributes = attributes
end

Class Method Details

.from_api_response(note, additional_data = {}) ⇒ Object

Builds a note from a GitHub API response.

note - An instance of Hash containing the note details.



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
# File 'lib/gitlab/github_import/representation/note.rb', line 17

def self.from_api_response(note, additional_data = {})
  matches = note[:html_url].match(NOTEABLE_TYPE_REGEX)

  if !matches || !matches[:type]
    raise(
      ArgumentError,
      "The note URL #{note[:html_url].inspect} is not supported"
    )
  end

  noteable_type =
    if matches[:type] == 'pull'
      'MergeRequest'
    else
      'Issue'
    end

  user = Representation::User.from_api_response(note[:user]) if note[:user]
  hash = {
    noteable_type: noteable_type,
    noteable_id: matches[:iid].to_i,
    author: user,
    note: note[:body],
    created_at: note[:created_at],
    updated_at: note[:updated_at],
    note_id: note[:id]
  }

  new(hash)
end

.from_json_hash(raw_hash) ⇒ Object

Builds a new note using a Hash that was built from a JSON payload.



49
50
51
52
53
54
55
# File 'lib/gitlab/github_import/representation/note.rb', line 49

def self.from_json_hash(raw_hash)
  hash = Representation.symbolize_hash(raw_hash)

  hash[:author] &&= Representation::User.from_json_hash(hash[:author])

  new(hash)
end

Instance Method Details

#discussion_idObject



63
64
65
66
67
68
69
# File 'lib/gitlab/github_import/representation/note.rb', line 63

def discussion_id
  Discussion.discussion_id(
    Struct
    .new(:noteable_id, :noteable_type)
    .new(noteable_id, noteable_type)
  )
end

#github_identifiersObject



73
74
75
76
77
78
79
# File 'lib/gitlab/github_import/representation/note.rb', line 73

def github_identifiers
  {
    note_id: note_id,
    noteable_iid: noteable_id,
    noteable_type: noteable_type
  }
end