Class: RateLimitedJira::Client

Inherits:
JIRA::Client
  • Object
show all
Defined in:
lib/rate_limited_jira/client.rb,
lib/rate_limited_jira/client/redis_based.rb,
lib/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: 0, rate_limit_per_interval: 0) ⇒ Client

Returns a new instance of Client.



31
32
33
34
35
# File 'lib/rate_limited_jira/client.rb', line 31

def initialize(options, rate_interval_in_seconds: 0, rate_limit_per_interval: 0)
  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.



29
30
31
# File 'lib/rate_limited_jira/client.rb', line 29

def rate_interval_in_seconds
  @rate_interval_in_seconds
end

#rate_limit_per_intervalObject (readonly)

Returns the value of attribute rate_limit_per_interval.



29
30
31
# File 'lib/rate_limited_jira/client.rb', line 29

def rate_limit_per_interval
  @rate_limit_per_interval
end

Class Method Details

.build(jira_options, rate_limit_per_interval: 0, rate_interval_in_seconds: 0, implementation: :in_process) ⇒ Object



10
11
12
13
14
15
# File 'lib/rate_limited_jira/client.rb', line 10

def self.build(jira_options, rate_limit_per_interval: 0, rate_interval_in_seconds: 0, implementation: :in_process)
  implementation_class_for(implementation)
    .new(jira_options,
         rate_limit_per_interval: rate_limit_per_interval,
         rate_interval_in_seconds: rate_interval_in_seconds)
end

Instance Method Details

#original_requestObject



37
# File 'lib/rate_limited_jira/client.rb', line 37

alias original_request request

#rate_limitObject

Raises:

  • (NotImplementedError)


47
48
49
# File 'lib/rate_limited_jira/client.rb', line 47

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

#requestObject



39
40
41
42
43
44
45
# File 'lib/rate_limited_jira/client.rb', line 39

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