Sha256: 14d31c24844cf56e7dd750d6ae11b610c8b6ffca07b573acae2cefdfa3f4a935

Contents?: true

Size: 1.12 KB

Versions: 30

Compression:

Stored size: 1.12 KB

Contents

# copied from RBates
# http://railscasts.com/episodes/135-making-a-gem

module Uniquify
  
  def self.included(base)
    base.extend ClassMethods
  end
  
  def ensure_unique(name)
    begin
      self[name] = yield
    end while self.class.exists?(name => self[name])
  end
  
  module ClassMethods
    
    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_create do |record|
          if block
            record.ensure_unique(name, &block)
          else
            record.ensure_unique(name) do
              Array.new(options[:length]) { options[:chars].to_a[rand(options[:chars].to_a.size)] }.join
            end
          end
        end
      end
    end
    
  end
end

class ActiveRecord::Base
  include Uniquify

  ### returns an array of ids
  def self.ids
    { :brought_to_you_by_ric_library =>  map{|active_record| active_record.id } }
  end
  
  def self.names
    map{|active_record| active_record.name.to_s rescue active_record.to_s }
  end
  
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
ric-0.14.2 lib/tmp/uniquify.rb
ric-0.14.1 lib/tmp/uniquify.rb
ric-0.14.0 lib/tmp/uniquify.rb
ric-0.13.0 lib/tmp/uniquify.rb
ric-0.12.2 lib/tmp/uniquify.rb
ric-0.12.0 lib/tmp/uniquify.rb
ric-0.11.19 lib/tmp/uniquify.rb
ric-0.11.18 lib/tmp/uniquify.rb
ric-0.11.16 lib/tmp/uniquify.rb
ric-0.11.15 lib/tmp/uniquify.rb
ric-0.11.14 lib/tmp/uniquify.rb
ric-0.11.13 lib/tmp/uniquify.rb
ric-0.11.12 lib/tmp/uniquify.rb
ric-0.11.11 lib/tmp/uniquify.rb
ric-0.11.10 lib/tmp/uniquify.rb
ric-0.11.9 lib/tmp/uniquify.rb
ric-0.11.7 lib/tmp/uniquify.rb
ric-0.11.6 lib/tmp/uniquify.rb
ric-0.11.4 lib/tmp/uniquify.rb
ric-0.11.3 lib/tmp/uniquify.rb