--- /dev/null
+require 'digest/md5'
+
+class UniqueTokenGenerator
+ def initialize(length=10)
+ @length = length
+ end
+
+ # this should probably be rewritten as a class method
+ def token
+ token = ""
+ while token.length < @length
+ seed = ""
+ 16.times do
+ seed << ( i = Kernel.rand(62)
+ i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 )) ).chr
+ end
+ token << Digest::MD5.hexdigest( seed )
+ end
+ token.slice( 0..@length )
+ end
+end
+
+# debug code
+# puts UniqueTokenGenerator.new(300).token
+