Simple yet customizable token generator for Rails 3
Ruby HTML
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
rails
spec
.gitignore
.rspec
.rvmrc
Gemfile
Guardfile
MIT-LICENSE
README.md
Rakefile
has_token_on.gemspec
init.rb

README.md

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 => 3
  • Multiple tokens, same configuration

    has_token_on [:slug, :permalink], :length => 3
  • Multiple 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]

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