Class: Jira::Auto::Tool::RateLimitedJiraClient

Inherits:
JIRA::Client
  • Object
show all
Defined in:
lib/jira/auto/tool/rate_limited_jira_client.rb,
lib/jira/auto/tool/rate_limited_jira_client/redis_based.rb,
lib/jira/auto/tool/rate_limited_jira_client/in_process_based.rb

Direct Known Subclasses

InProcessBased, RedisBased

Defined Under Namespace

Classes: InProcessBased, RedisBased

Constant Summary collapse

NO_RATE_LIMIT_PER_INTERVAL =
0
NO_RATE_INTERVAL_IN_SECONDS =
0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options, rate_interval_in_seconds: 1, rate_limit_per_interval: 1) ⇒ RateLimitedJiraClient



28
29
30
31
32
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 28

def initialize(options, rate_interval_in_seconds: 1, rate_limit_per_interval: 1)
  super(options)
  @rate_interval_in_seconds = rate_interval_in_seconds
  @rate_limit_per_interval = rate_limit_per_interval
end

Instance Attribute Details

#rate_interval_in_secondsObject (readonly)

Returns the value of attribute rate_interval_in_seconds.



26
27
28
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 26

def rate_interval_in_seconds
  @rate_interval_in_seconds
end

#rate_limit_per_intervalObject (readonly)

Returns the value of attribute rate_limit_per_interval.



26
27
28
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 26

def rate_limit_per_interval
  @rate_limit_per_interval
end

Class Method Details

.implementation_class_for(tool) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 10

def self.implementation_class_for(tool)
  requested_implementation = tool.jat_rate_limit_implementation_when_defined_else nil

  case requested_implementation
  when "in_process", "", nil
    InProcessBased
  when "redis"
    RedisBased
  else
    raise %(#{requested_implementation.inspect}: unexpected rate limiting implementation specified!")
  end
end

Instance Method Details

#original_requestObject



34
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 34

alias original_request request

#rate_limitObject



44
45
46
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 44

def rate_limit(&)
  raise "rate_limit must be implemented by a subclass"
end

#request(*args) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/jira/auto/tool/rate_limited_jira_client.rb', line 36

def request(*args)
  if rate_limit_per_interval == NO_RATE_LIMIT_PER_INTERVAL
    original_request(*args)
  else
    rate_limit { original_request(*args) }
  end
end