Class: Smith::Agent::ProviderCandidateSequence

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/smith/agent/provider_candidate_sequence.rb

Instance Method Summary collapse

Constructor Details

#initialize(references) ⇒ ProviderCandidateSequence

Returns a new instance of ProviderCandidateSequence.



8
9
10
11
12
13
14
15
# File 'lib/smith/agent/provider_candidate_sequence.rb', line 8

def initialize(references)
  @references = references.freeze
  @remaining_by_provider = references.each_with_object(Hash.new(0)) do |reference, counts|
    counts[reference.provider] += 1
  end
  @unavailable_providers = {}
  @available_count = references.length
end

Instance Method Details

#eachObject

Returns self so an exhausted sequence can never be mistaken for an attempt result by a caller that forgets to fail closed.



19
20
21
22
23
24
25
26
27
# File 'lib/smith/agent/provider_candidate_sequence.rb', line 19

def each
  return enum_for(:each) unless block_given?

  references.each_with_index do |reference, index|
    consume(reference)
    yield reference, index unless unavailable?(reference.provider)
  end
  self
end

#fallback_available?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/smith/agent/provider_candidate_sequence.rb', line 37

def fallback_available?
  @available_count.positive?
end

#suppress(provider) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/smith/agent/provider_candidate_sequence.rb', line 29

def suppress(provider)
  return unless provider
  return if unavailable?(provider)

  unavailable_providers[provider] = true
  @available_count -= remaining_by_provider.fetch(provider, 0)
end