Sha256: 1551d46dfcb727a6b83c1385269c4c5801f27e2a31360cc7a9d301c16bb5adb0
Contents?: true
Size: 1.21 KB
Versions: 2
Compression:
Stored size: 1.21 KB
Contents
# frozen_string_literal: true require 'set' module FFaker class UniqueUtils RetryLimitExceeded = Class.new(StandardError) class << self def add_instance(generator, max_retries) instances[generator] ||= FFaker::UniqueUtils.new(generator, max_retries) end def instances Thread.current[:ffaker_unique_utils] ||= {} end def clear instances.each_value(&:clear) instances.clear end end def initialize(generator, max_retries) @generator = generator @max_retries = max_retries end def clear previous_results.clear end private def method_missing(name, *args, **kwargs) @max_retries.times do result = @generator.public_send(name, *args, **kwargs) next if previous_results[[name, args, kwargs]].include?(result) previous_results[[name, args, kwargs]] << result return result end raise RetryLimitExceeded, "Retry limit exceeded for #{name}" end def respond_to_missing?(name, *args) @generator.respond_to?(name, *args) || super end def previous_results @previous_results ||= Hash.new { |hash, key| hash[key] = Set.new } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ffaker-2.24.0 | lib/ffaker/utils/unique_utils.rb |
ffaker-2.23.0 | lib/ffaker/utils/unique_utils.rb |