Module: LemurTokenize
- Defined in:
- lib/tokenize.rb
Overview
LemurTokenizer
Quick Dirty Token generation
by Nick Merwin 11.29.2009
Defined Under Namespace
Classes: IncompatibleTokenColumn
Constant Summary collapse
- VERSION =
"1.0"
Instance Method Summary collapse
-
#tokenize(column = :token, opts = {}) ⇒ Object
Usage: class Foo < ActiveRecord::Base tokenize :api_key, :size => 32 tokenize :public_token, :size => 5, :type => :base64 end.
Instance Method Details
#tokenize(column = :token, opts = {}) ⇒ Object
Usage:
class Foo < ActiveRecord::Base
tokenize :api_key, :size => 32
tokenize :public_token, :size => 5, :type => :base64
end
Options:
-
column
The column that will store the token. default - :token
-
size
The length of the token string default - 32
-
when
Callback default - :before_create
-
type
The type of random generator - :hex or :base64 default - :hex
-
url_safe
Parses out W characters (for URL shorteners,etc) default - true
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/tokenize.rb', line 41 def tokenize(column=:token, opts={}) generate_method = "generate_#{column}".to_sym define_method generate_method do opts = {:column => column, :type => :hex}.merge(opts) while true proposed_token = ActiveSupport::SecureRandom.send(opts[:type],32) proposed_token.gsub!(/\W/,'') unless opts[:url_safe] == false #TODO: fill in gaps left by url safety proposed_token = proposed_token.to_s[0..(opts[:size] || 32)] break unless self.class.exists?(opts[:column] => proposed_token) end send "#{opts[:column]}=", proposed_token raise IncompatibleTokenColumn unless send(opts[:column]) == proposed_token end before_create generate_method end |