HasTokenOn
Simple yet customizable token generator for Rails 3.
Features
- Any number of tokens per model
- Customizable length of each token
- Prepending/Appending to token
- Condition checking when setting the token
- Setting token on various callbacks namely initialization, creation, updating
- Customizable seed to generate token from
Examples
Initialization
Single token
has_token_on :slug, :length => 3Multiple tokens, same configuration
has_token_on [:slug, :permalink], :length => 3Multiple tokens with individual configuration
has_token_on :slug, :length => 3 has_token_on :permalink, :length => 5.. or using single hash
has_token_on :slug => { :length => 3 }, :permalink => { :length => 5 }
Options
Options are as follows:
:length - token length. Default - 16.
has_token_on :slug, length => 3:prepend - prepend something to the beginning of the token. Default - none.
has_token_on :slug, :prepend => "private":append - append something to the back of the token. Default - none.
has_token_on :slug, :append => "ending":unique - ensure that tokens is unique (checking is performed in the app logic). Default - false.
has_token_on :slug, :unique => true:if - generate token only if provided condition is met. Default - none.
has_token_on :slug, :if => lambda { |record| record.private? }:on - generates token on certain time: :initialize, :create (default), :update.
has_token_on :slug, :on => :initialize:seed - elements or functions that are used to generate hash. Options:
- :securerandom - uses ActiveSupport::SecureRandom.hex (default)
has_token_on :slug, :seed => :securerandom- :guid - uses simple_uuid gem. You should add it to your Gemfile. 36 characters long GUID. Length param is ignored.
has_token_on :slug, :seed => :guid- ('a'..'z') - a Range. Mixes the range elements up to specified length.
has_token_on :slug, :seed => ('a'..'z')- ['a', 'b', 'c'] - an Array. Mixes the array elements up to specified length.
has_token_on :slug, :seed => ['a', 'b', 'c']- lambda { 2 * 2 } - a Proc. Executes proc. Length param is ignored.
has_token_on :slug, :seed => lambda { 2 * 2 }
Generator
has_token_on comes with a generator that generates a migration for token.
Usage:
rails generate has_token_on:config MODEL NAME []
Options:
[--length=N] # Token length
[--create-on=CREATE_ON] # Create on: initialize, create, update
[--with-index] # Index the token field (default: es)
# Default: true
[--unique] # Is token unique?
# Default: true
Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend] # Run but do not make any changes
-q, [--quiet] # Supress status output
-s, [--skip] # Skip files that already exist
Description:
Generates a migration that adds token field a model. Modifies model code.
Example:
rails g has_token_on:config paste token
Testing
Tested on Mac OS X with Ruby 1.9.2. Should work on Ruby 1.8.7+.
- Enter gem directory
Execute
bundle rake
You may use guard for continuous testing
bundle exec guard
NB it will try to install some OSX specific gems like 'rb-fsevent'.
License
Copyright (c) 2011 Saulius Grigaliunas, released under the MIT license