Class: GitlabApi

Inherits:
Rubiclifier::BaseApi
  • Object
show all
Defined in:
lib/gitlab_api.rb

Constant Summary collapse

HTTP =
GraphQL::Client::HTTP.new(StoredValues.base_api_url) do
  def headers(context)
    { "Authorization": "Bearer #{StoredValues.api_token}" }
  end
end
Schema =
GraphQL::Client.load_schema(HTTP)
Client =
GraphQL::Client.new(schema: Schema, execute: HTTP)
OpenMrCommentQuery =
Client.parse "query {\n  group(fullPath: \"\#{StoredValues.team_name}\") {\n    groupMembers {\n      nodes {\n        user {\n          name\n          username\n          openMRs: assignedMergeRequests(state: opened) {\n            nodes {\n              createdAt\n              headPipeline {\n                updatedAt\n                status\n              }\n              participants {\n                nodes {\n                  username\n                }\n              }\n              approved\n              title\n              project {\n                group {\n                  path\n                }\n                name\n              }\n              id\n              webUrl\n              discussions {\n                nodes {\n                  notes {\n                    nodes {\n                      body\n                      system\n                      createdAt\n                      id\n                      author {\n                        username\n                        name\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
MergedMrCommentQuery =
Client.parse "query($mergedAfter: Time) {\n  group(fullPath: \"\#{StoredValues.team_name}\") {\n    groupMembers {\n      nodes {\n        user {\n          name\n          username\n          mergedMRs: assignedMergeRequests(state: merged, mergedAfter: $mergedAfter) {\n            nodes {\n              createdAt\n              headPipeline {\n                updatedAt\n                status\n              }\n              participants {\n                nodes {\n                  username\n                }\n              }\n              approved\n              title\n              project {\n                group {\n                  path\n                }\n                name\n              }\n              id\n              webUrl\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"

Class Method Summary collapse

Class Method Details

.all_code_changesObject



142
143
144
145
146
147
148
149
150
# File 'lib/gitlab_api.rb', line 142

def self.all_code_changes
  open_mr_query = Client.query(OpenMrCommentQuery)
  open_mrs = open_mr_query.data.group.group_members.nodes.flat_map { |n| n.user.open_m_rs.nodes.map { |n2| {user: n.user.name, username: n.user.username, mr: n2 } } }
  merged_mr_query = Client.query(MergedMrCommentQuery, variables: {mergedAfter: Time.now - 61})
  merged_mrs = merged_mr_query.data.group.group_members.nodes.flat_map { |n| n.user.merged_m_rs.nodes.map { |n2| {user: n.user.name, username: n.user.username, mr: n2 } } }
  merged_mrs = merged_mrs.map { |mr| code_change_from_graphql(mr[:mr], mr[:user], mr[:username], true) }
  open_mrs = open_mrs.map { |mr| code_change_from_graphql(mr[:mr], mr[:user], mr[:username], false) }
  open_mrs.concat(merged_mrs)
end

.code_change_activity_from_json(code_change, message) ⇒ Object



169
170
171
# File 'lib/gitlab_api.rb', line 169

def self.code_change_activity_from_json(code_change, message)
  GitlabCodeChangeActivity.new(message.id, message.author.name, message.author.username == StoredValues.username, message.body, Time.parse(message.created_at), code_change)
end

.code_change_from_graphql(data, name, username, is_merged) ⇒ Object



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/gitlab_api.rb', line 152

def self.code_change_from_graphql(data, name, username, is_merged)
  includes_self = data.participants.nodes.map { |p| p.username }.include?(StoredValues.username)
  code_change = CodeChange.new(data.id, name, "#{data.project.group&.path}/#{data.project.name}", data.title, data.web_url, data.head_pipeline&.updated_at && Time.parse(data.head_pipeline&.updated_at), data.head_pipeline&.status, data.approved, is_merged, username == StoredValues.username, includes_self)
  if is_merged
    code_change.code_change_activity = [
      GitlabCodeChangeActivity.new("#{data.id}-merged-placeholder", name, true, "placeholder", Time.now() - 10000, code_change),
      GitlabCodeChangeActivity.new("#{data.id}-merged", name, false, "merged", Time.now(), code_change)
    ]
  else
    messages = data.discussions.nodes.flat_map { |n| n.notes.nodes }
    code_change.code_change_activity = messages.map { |m| code_change_activity_from_json(code_change, m) }
    code_change.generate_additional_activity
  end
  code_change.persist
  code_change
end

.code_change_url(code_change) ⇒ Object



177
178
179
# File 'lib/gitlab_api.rb', line 177

def self.code_change_url(code_change)
  code_change.web_url
end

.faviconObject



173
174
175
# File 'lib/gitlab_api.rb', line 173

def self.favicon
  "https://about.gitlab.com/images/press/logo/png/gitlab-icon-rgb.png"
end

.invalid_credentials_errorObject



133
134
135
136
137
138
139
140
# File 'lib/gitlab_api.rb', line 133

def self.invalid_credentials_error
  Rubiclifier::Notification.new(
    "Incorrect Credentials",
    "Trying running `code_review_notifier --setup` again."
  ).send
  sleep(120)
  exit
end