Class: Aireview::JiraClient

Inherits:
Object
  • Object
show all
Defined in:
lib/aireview/jira_client.rb

Constant Summary collapse

ISSUE_KEY =
/\b([A-Z][A-Z0-9]+-\d+)\b/
OPEN_TIMEOUT =
10
READ_TIMEOUT =
30

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, login:, password:, logger: Logger.new($stderr)) ⇒ JiraClient

Returns a new instance of JiraClient.

Raises:



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/aireview/jira_client.rb', line 17

def initialize(base_url:, login:, password:, logger: Logger.new($stderr))
  require 'faraday'

  raise ConfigError, 'Jira base URL is required' if Aireview::Utils.blank?(base_url)
  raise ConfigError, 'Jira login is required' if Aireview::Utils.blank?()
  raise ConfigError, 'Jira password is required' if Aireview::Utils.blank?(password)

  @logger = logger
  @connection = Faraday.new(url: base_url) do |builder|
    builder.request :json
    builder.options.open_timeout = OPEN_TIMEOUT
    builder.options.timeout = READ_TIMEOUT
    builder.adapter Faraday.default_adapter
  end
  @authorization = "Basic #{Base64.strict_encode64("#{login}:#{password}")}"
end

Class Method Details

.extract_issue_key(text) ⇒ Object



12
13
14
15
# File 'lib/aireview/jira_client.rb', line 12

def self.extract_issue_key(text)
  match = ISSUE_KEY.match(text.to_s)
  match && match[1]
end

Instance Method Details

#fetch_issue(key) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/aireview/jira_client.rb', line 34

def fetch_issue(key)
  payload = get_json("/rest/api/2/issue/#{key}", fields: 'summary,description,comment')

  {
    'key' => payload['key'],
    'summary' => payload.dig('fields', 'summary'),
    'description' => plain_text(payload.dig('fields', 'description')),
    'comments' => extract_comments(payload.dig('fields', 'comment', 'comments'))
  }
end