Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Simple yet customizable token generator for Rails 3

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 rails
Octocat-spinner-32 spec
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .rspec
Octocat-spinner-32 .rvmrc
Octocat-spinner-32 Gemfile
Octocat-spinner-32 Guardfile
Octocat-spinner-32 MIT-LICENSE
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 has_token_on.gemspec
Octocat-spinner-32 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

Something went wrong with that request. Please try again.