From c8b36e07325abec4e9d5b1dff489eca391575206 Mon Sep 17 00:00:00 2001 From: Alexander Korsak Date: Sat, 28 Apr 2012 12:57:00 +0300 Subject: [PATCH 1/4] Include uniquify module to active record if defined --- lib/uniquify.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/uniquify.rb b/lib/uniquify.rb index d4da9cf..84b99f6 100644 --- a/lib/uniquify.rb +++ b/lib/uniquify.rb @@ -30,6 +30,8 @@ def uniquify(*args, &block) end end -class ActiveRecord::Base - include Uniquify +if defined?(ActiveRecord) + class ActiveRecord::Base + include Uniquify + end end From f0d35a1b06dced83b7c6eb30299076ad7ff45ff9 Mon Sep 17 00:00:00 2001 From: Alexander Korsak Date: Sat, 28 Apr 2012 18:31:56 +0300 Subject: [PATCH 2/4] Move search condition by uniquify field to the scoped --- lib/uniquify.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/uniquify.rb b/lib/uniquify.rb index 84b99f6..5d57618 100644 --- a/lib/uniquify.rb +++ b/lib/uniquify.rb @@ -6,7 +6,7 @@ def self.included(base) def ensure_unique(name) begin self[name] = yield - end while self.class.exists?(name => self[name]) + end while self.class.scoped(:conditions => { name => self[name] }).exists? end module ClassMethods From 6cd15d0f796327bdd74df20e3955c18f6afaaaf5 Mon Sep 17 00:00:00 2001 From: Alexandr Korsak Date: Sun, 1 Jul 2012 18:35:25 +0300 Subject: [PATCH 3/4] Add support for datamapper objects --- lib/uniquify.rb | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/uniquify.rb b/lib/uniquify.rb index 5d57618..fcafae6 100644 --- a/lib/uniquify.rb +++ b/lib/uniquify.rb @@ -6,7 +6,11 @@ def self.included(base) def ensure_unique(name) begin self[name] = yield - end while self.class.scoped(:conditions => { name => self[name] }).exists? + end while uniquify_exists?(name) + end + + def uniquify_exists?(name) + self.class.scoped(:conditions => { name => self[name] }).exists? end module ClassMethods @@ -15,7 +19,7 @@ def uniquify(*args, &block) options = { :length => 8, :chars => ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a } options.merge!(args.pop) if args.last.kind_of? Hash args.each do |name| - before_validation :on => :create do |record| + before_validation :on => :create do |record| if block record.ensure_unique(name, &block) else @@ -35,3 +39,21 @@ class ActiveRecord::Base include Uniquify end end + +if defined?(DataMapper) + module Uniquify + def uniquify_exists?(name) + not self.class.all(name => self[name]).empty? + end + + module ClassMethods + def before_validation options = {}, &block + self.class_eval do + before :valid? do + block.call(self) + end + end + end + end + end +end From 5e5a91e2137ced5d0bfbe8a3b9dcaff606e1dd39 Mon Sep 17 00:00:00 2001 From: Alexandr Korsak Date: Wed, 18 Jul 2012 19:27:59 +0300 Subject: [PATCH 4/4] Generate unique key for datamapper on create --- lib/uniquify.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/uniquify.rb b/lib/uniquify.rb index fcafae6..88b323b 100644 --- a/lib/uniquify.rb +++ b/lib/uniquify.rb @@ -49,7 +49,7 @@ def uniquify_exists?(name) module ClassMethods def before_validation options = {}, &block self.class_eval do - before :valid? do + before :create do block.call(self) end end