61 lines
1.3 KiB
Ruby
61 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
module Gitlab
|
||
|
module PhabricatorImport
|
||
|
module Conduit
|
||
|
class Response
|
||
|
def self.parse!(http_response)
|
||
|
unless http_response.success?
|
||
|
raise Gitlab::PhabricatorImport::Conduit::ResponseError,
|
||
|
"Phabricator responded with #{http_response.status}"
|
||
|
end
|
||
|
|
||
|
response = new(JSON.parse(http_response.body))
|
||
|
|
||
|
unless response.success?
|
||
|
raise ResponseError,
|
||
|
"Phabricator Error: #{response.error_code}: #{response.error_info}"
|
||
|
end
|
||
|
|
||
|
response
|
||
|
rescue JSON::JSONError => e
|
||
|
raise ResponseError.new(e)
|
||
|
end
|
||
|
|
||
|
def initialize(json)
|
||
|
@json = json
|
||
|
end
|
||
|
|
||
|
def success?
|
||
|
error_code.nil?
|
||
|
end
|
||
|
|
||
|
def error_code
|
||
|
json['error_code']
|
||
|
end
|
||
|
|
||
|
def error_info
|
||
|
json['error_info']
|
||
|
end
|
||
|
|
||
|
def data
|
||
|
json_result&.fetch('data')
|
||
|
end
|
||
|
|
||
|
def pagination
|
||
|
return unless cursor_info = json_result&.fetch('cursor')
|
||
|
|
||
|
@pagination ||= Pagination.new(cursor_info)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
attr_reader :json
|
||
|
|
||
|
def json_result
|
||
|
json['result']
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|