Class: Smith::Agent::ProviderCandidateSequence
- Inherits:
-
Object
- Object
- Smith::Agent::ProviderCandidateSequence
- Includes:
- Enumerable
- Defined in:
- lib/smith/agent/provider_candidate_sequence.rb
Instance Method Summary collapse
-
#each ⇒ Object
Returns self so an exhausted sequence can never be mistaken for an attempt result by a caller that forgets to fail closed.
- #fallback_available? ⇒ Boolean
-
#initialize(references) ⇒ ProviderCandidateSequence
constructor
A new instance of ProviderCandidateSequence.
- #suppress(provider) ⇒ Object
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
#each ⇒ Object
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
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 |