module Uniqueness

Constants

VERSION

Public Class Methods

generate(opts = {}) click to toggle source
# File lib/uniqueness/generator.rb, line 5
def generate(opts = {})
  options ||= {}
  options = uniqueness_default_options.merge(opts)
  dict = uniqueness_dictionary - options[:blacklist]
  dict -= [*(:A..:Z)].map(&:to_s) unless options[:case_sensitive]
  dict -= uniqueness_ambigious_dictionary if options[:type].to_sym == :human
  dict = uniqueness_numbers_dictionary if options[:type].to_sym == :numbers
  code = Array.new(options[:length]).map { dict[SecureRandom.random_number(dict.length)] }.join
  "#{options[:prefix]}#{code}#{options[:suffix]}"
end
uniqueness_ambigious_dictionary() click to toggle source
# File lib/uniqueness/generator.rb, line 21
def uniqueness_ambigious_dictionary
  [:b, :B, :o, :O, :q, :i, :I, :l, :L, :s, :S, :u, :U, :z, :Z, :g, 1, 2, 9, 5].map(&:to_s)
end
uniqueness_default_options() click to toggle source

Default sorting options

# File lib/uniqueness/generator.rb, line 30
def uniqueness_default_options
  {
    length: 32,
    type: :auto,
    blacklist: [],
    scope: [],
    suffix: '',
    prefix: '',
    trigger_on: :before_validation
  }
end
uniqueness_dictionary() click to toggle source

Dictionary used for uniqueness generation

# File lib/uniqueness/generator.rb, line 17
def uniqueness_dictionary
  [*(:A..:Z), *(:a..:z), *(0..9)].map(&:to_s)
end
uniqueness_numbers_dictionary() click to toggle source
# File lib/uniqueness/generator.rb, line 25
def uniqueness_numbers_dictionary
  [*(0..9)].map(&:to_s)
end