module DirtySeed::Assigners::FakerHelper

Helps with faker values

Constants

MAX_RETRIES

Public Instance Methods

faker_value(generator:, method:, options: nil) click to toggle source

Returns a rabdom value matching the requirements @param generator [Symbol] faker generator @param method [Symbol] faker method @param options [Hash] options used by faker @return [Object] @example

faker_value(generator: :Internet, method: :email, options: { domain: 'example' })
  #=> "alice@example.name"

@note Faker raises a RetryLimitExceeded if it reaches MAX_RETRIES (with a unique generator)

In this case return nil since it appears not to be possible to return a new unique value
# File lib/dirty_seed/assigners/helpers/faker_helper.rb, line 20
def faker_value(generator:, method:, options: nil)
  params = options ? [method, options] : [method]
  faker_generator(generator).public_send(*params)
rescue Faker::UniqueGenerator::RetryLimitExceeded
  nil
end

Private Instance Methods

faker_generator(generator) click to toggle source

Returns a faker generator @param generator [Symbol] fake generator @return [Class, Faker::UniqueGenerator] a faker class or a faker unique generator @example

Faker::Lorem
Faker::UniqueGenerator.new(Faker::Lorem)
# File lib/dirty_seed/assigners/helpers/faker_helper.rb, line 35
def faker_generator(generator)
  @faker_generator ||=
    if unique?
      Faker::UniqueGenerator.new("::Faker::#{generator}".constantize, MAX_RETRIES)
    else
      "::Faker::#{generator}".constantize
    end
end
unique?() click to toggle source

Should the value be unique? @return [Boolean]

# File lib/dirty_seed/assigners/helpers/faker_helper.rb, line 46
def unique?
  @unique ||=
    validators&.any? do |validator|
      validator.is_a? ActiveRecord::Validations::UniquenessValidator
    end
end