Skip to content

saulius/has_token_on

Folders and files

NameName
Last commit message
Last commit date

Latest commit

017d6ce · Mar 5, 2017

History

24 Commits
Mar 5, 2017
May 21, 2011
Jul 18, 2012
Jun 17, 2011
May 21, 2011
May 21, 2011
May 21, 2011
May 21, 2011
May 21, 2011
Jul 9, 2012
Jun 17, 2011
Jun 15, 2016
Nov 3, 2011

Repository files navigation

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