Class: Marlens::JiraApi::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/marlens/jira_api/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, email:, api_token:) ⇒ Client

Returns a new instance of Client.



12
13
14
15
16
# File 'lib/marlens/jira_api/client.rb', line 12

def initialize(base_url:, email:, api_token:)
  @base_url = base_url.to_s.delete_suffix("/")
  @email = email
  @api_token = api_token
end

Instance Method Details

#create_comment(issue_key:, document:) ⇒ Object Also known as: post_comment



33
34
35
36
37
38
39
# File 'lib/marlens/jira_api/client.rb', line 33

def create_comment(issue_key:, document:)
  uri = api_uri("/issue/#{issue_key}/comment")
  request = Net::HTTP::Post.new(uri)
  request.body = JSON.dump({ "body" => document })

  json_request(request, uri)
end

#create_markdown_comment(issue_key:, markdown:, allowed_image_hosts: [], strict_images: false, image_upload_failures: nil) ⇒ Object Also known as: post_markdown_comment



57
58
59
60
61
62
63
64
65
66
# File 'lib/marlens/jira_api/client.rb', line 57

def create_markdown_comment(issue_key:, markdown:, allowed_image_hosts: [], strict_images: false, image_upload_failures: nil)
  document = markdown_document(
    issue_key: issue_key,
    markdown: markdown,
    allowed_image_hosts: allowed_image_hosts,
    strict_images: strict_images,
    image_upload_failures: image_upload_failures
  )
  create_comment(issue_key: issue_key, document: document)
end

#delete_comment(issue_key:, comment_id:) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/marlens/jira_api/client.rb', line 49

def delete_comment(issue_key:, comment_id:)
  uri = api_uri("/issue/#{issue_key}/comment/#{comment_id}")
  response = authenticated_request(Net::HTTP::Delete.new(uri), uri)
  return true if response.code.to_i == 204

  raise "Failed to delete Jira comment #{comment_id} for #{issue_key}: #{response.code} #{response.body}"
end

#get_comment(issue_key:, comment_id:) ⇒ Object



28
29
30
31
# File 'lib/marlens/jira_api/client.rb', line 28

def get_comment(issue_key:, comment_id:)
  uri = api_uri("/issue/#{issue_key}/comment/#{comment_id}")
  json_request(Net::HTTP::Get.new(uri), uri)
end

#list_comments(issue_key:, start_at: nil, max_results: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/marlens/jira_api/client.rb', line 18

def list_comments(issue_key:, start_at: nil, max_results: nil)
  uri = api_uri("/issue/#{issue_key}/comment")
  query = {}
  query["startAt"] = start_at unless start_at.nil?
  query["maxResults"] = max_results unless max_results.nil?
  uri.query = URI.encode_www_form(query) unless query.empty?

  json_request(Net::HTTP::Get.new(uri), uri)
end

#update_comment(issue_key:, comment_id:, document:) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/marlens/jira_api/client.rb', line 41

def update_comment(issue_key:, comment_id:, document:)
  uri = api_uri("/issue/#{issue_key}/comment/#{comment_id}")
  request = Net::HTTP::Put.new(uri)
  request.body = JSON.dump({ "body" => document })

  json_request(request, uri)
end

#update_markdown_comment(issue_key:, comment_id:, markdown:, allowed_image_hosts: [], strict_images: false, image_upload_failures: nil) ⇒ Object



68
69
70
71
72
73
74
75
76
77
# File 'lib/marlens/jira_api/client.rb', line 68

def update_markdown_comment(issue_key:, comment_id:, markdown:, allowed_image_hosts: [], strict_images: false, image_upload_failures: nil)
  document = markdown_document(
    issue_key: issue_key,
    markdown: markdown,
    allowed_image_hosts: allowed_image_hosts,
    strict_images: strict_images,
    image_upload_failures: image_upload_failures
  )
  update_comment(issue_key: issue_key, comment_id: comment_id, document: document)
end

#upload_attachment(issue_key:, io:, filename:, content_type:) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/marlens/jira_api/client.rb', line 82

def upload_attachment(issue_key:, io:, filename:, content_type:)
  uri = api_uri("/issue/#{issue_key}/attachments")
  request = Net::HTTP::Post::Multipart.new(
    uri.request_uri,
    "file" => UploadIO.new(io, content_type, filename)
  )
  request.basic_auth(@email, @api_token)
  request["X-Atlassian-Token"] = "no-check"

  response = http_request(uri, request)
  unless response.code.to_i.between?(200, 299)
    raise "Failed to upload Jira attachment for #{issue_key}: #{response.code} #{response.body}"
  end

  JSON.parse(response.body).first
end