Class: Html2rss::RequestService::Budget

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/request_service/budget.rb

Overview

Tracks how many outbound requests a single feed build may still perform.

Instance Method Summary collapse

Constructor Details

#initialize(max_requests:) ⇒ Budget

Returns a new instance of Budget.

Parameters:

  • max_requests (Integer)

    the maximum number of requests allowed



10
11
12
13
14
15
16
17
# File 'lib/html2rss/request_service/budget.rb', line 10

def initialize(max_requests:)
  unless max_requests.is_a?(Integer) && max_requests.positive?
    raise ArgumentError, 'max_requests must be positive'
  end

  @remaining = max_requests
  @mutex = Mutex.new
end

Instance Method Details

#consume!Integer

Consumes one request from the budget.

Returns:

  • (Integer)

    remaining request count after consumption

Raises:



24
25
26
27
28
29
30
# File 'lib/html2rss/request_service/budget.rb', line 24

def consume!
  @mutex.synchronize do
    raise RequestBudgetExceeded, 'Request budget exhausted' if @remaining.zero?

    @remaining -= 1
  end
end

#remainingInteger

Returns requests still available.

Returns:

  • (Integer)

    requests still available



34
35
36
# File 'lib/html2rss/request_service/budget.rb', line 34

def remaining
  @mutex.synchronize { @remaining }
end