class FFaker::UniqueUtils

Constants

RetryLimitExceeded

Public Class Methods

add_instance(generator, max_retries) click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 10
def add_instance(generator, max_retries)
  instances[generator] ||= FFaker::UniqueUtils.new(generator, max_retries)
end
clear() click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 18
def clear
  instances.each_value(&:clear)
  instances.clear
end
instances() click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 14
def instances
  Thread.current[:ffaker_unique_utils] ||= {}
end
new(generator, max_retries) click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 24
def initialize(generator, max_retries)
  @generator = generator
  @max_retries = max_retries
end

Public Instance Methods

clear() click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 29
def clear
  previous_results.clear
end

Private Instance Methods

method_missing(name, *args, **kwargs) click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 35
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
previous_results() click to toggle source
# File lib/ffaker/utils/unique_utils.rb, line 52
def previous_results
  @previous_results ||= Hash.new { |hash, key| hash[key] = Set.new }
end
respond_to_missing?(name, *args) click to toggle source
Calls superclass method
# File lib/ffaker/utils/unique_utils.rb, line 48
def respond_to_missing?(name, *args)
  @generator.respond_to?(name, *args) || super
end