Class: Gitlab::Zentao::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/zentao/client.rb

Constant Summary collapse

Error =
Class.new(StandardError)
ConfigError =
Class.new(Error)
RequestError =
Class.new(Error)
CACHE_MAX_SET_SIZE =
5_000
CACHE_TTL =
1.month.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(integration) ⇒ Client

Returns a new instance of Client.

Raises:



15
16
17
18
19
# File 'lib/gitlab/zentao/client.rb', line 15

def initialize(integration)
  raise ConfigError, 'Please check your integration configuration.' unless integration

  @integration = integration
end

Instance Attribute Details

#integrationObject (readonly)

Returns the value of attribute integration.



13
14
15
# File 'lib/gitlab/zentao/client.rb', line 13

def integration
  @integration
end

Instance Method Details

#fetch_issue(issue_id) ⇒ Object

Raises:



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/gitlab/zentao/client.rb', line 45

def fetch_issue(issue_id)
  raise Error, 'invalid issue id' unless issue_id_pattern.match(issue_id)

  # Only return issues that are associated with the product configured in
  # the integration. Due to a lack of available data in the ZenTao APIs, we
  # can only determine if an issue belongs to a product if the issue was
  # previously returned in the `#fetch_issues` call.
  #
  # See https://gitlab.com/gitlab-org/gitlab/-/issues/360372#note_1016963713
  raise RequestError unless issue_seen_in_product?(issue_id)

  get("issues/#{issue_id}")
end

#fetch_issues(params = {}) ⇒ Object



39
40
41
42
43
# File 'lib/gitlab/zentao/client.rb', line 39

def fetch_issues(params = {})
  get("products/#{zentao_product_xid}/issues", params).tap do |response|
    mark_issues_as_seen_in_product(response['issues'])
  end
end

#fetch_product(product_id) ⇒ Object



35
36
37
# File 'lib/gitlab/zentao/client.rb', line 35

def fetch_product(product_id)
  get("products/#{product_id}")
end

#pingObject



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/gitlab/zentao/client.rb', line 21

def ping
  response = begin
    fetch_product(zentao_product_xid)
  rescue StandardError
    {}
  end
  active = response['deleted'] == '0'
  if active
    { success: true }
  else
    { success: false, message: 'Not Found' }
  end
end