lib/uniqueness/model.rb in uniqueness-1.0.0 vs lib/uniqueness/model.rb in uniqueness-1.1.0
- old
+ new
@@ -14,10 +14,11 @@
# 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>
@@ -30,12 +31,23 @@
# calculating the `position` field value.
# defaults to <tt>[]</tt>
def has_unique_field(name, options = {})
self.uniqueness_options ||= {}
self.uniqueness_options[name] = Uniqueness.uniqueness_default_options.merge(options)
- before_validation :uniqueness_generate
+
+ 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_attributes(name => Uniqueness.generate(self.uniqueness_options[name])) }
+ define_method("regenerate_#{name}") { update(name => Uniqueness.generate(self.uniqueness_options[name])) }
end
end
# Generates a new code based on given options
def uniqueness_generate