module Uniqueness::Model::ClassMethods

Public Instance Methods

has_unique_field(name, options = {}) click to toggle source

Adds random field support to Rails models

Examples:

To auto-generate a new random string for field +foo+
has_unique_field :foo

You can customize the generated string by
passing an options hash. The following keys are supported:

+:trigger_on+ when to be generated, can be one of ActiveRecord callbacks (<tt>before_validation</tt>, <tt>before_create</tt>, <tt>before_save</tt>, <tt>after_initialize</tt>), default to <tt>:before_validation</tt>
+:length+ number of characters, defaults to <tt>32</tt>

+:case_sensitive+ defaults to <tt>true</tt>

+:type+ type of string, defaults to <tt>:auto</tt>
        can be one of: <tt>:human</tt>, <tt>:auto</tt>

+:blacklist+ characters to exclude when generating the random
             string, defaults to <tt>[]</tt>

+:scope+ defines the `ActiveRecord` `scope` applied before
         calculating the `position` field value.
         defaults to <tt>[]</tt>
# File lib/uniqueness/model.rb, line 33
def has_unique_field(name, options = {})
  self.uniqueness_options ||= {}
  self.uniqueness_options[name] = Uniqueness.uniqueness_default_options.merge(options)

  case options[:trigger_on]
  when :before_create
    before_create :uniqueness_generate
  when :before_save
    before_save :uniqueness_generate
  when :after_initialize
    after_initialize :uniqueness_generate
  else
    before_validation :uniqueness_generate
  end

  validate :uniqueness_validation
  define_method("regenerate_#{name}") { update(name => Uniqueness.generate(self.uniqueness_options[name])) }
end