module Mongoid::Token::Generator

Constants

REPLACE_PATTERN

Public Class Methods

generate(pattern) click to toggle source
# File lib/mongoid/token/generator.rb, line 17
def self.generate(pattern)
  pattern.gsub REPLACE_PATTERN do |match|
    match_data = $~
    type = match_data[:character]
    length = [match_data[:length].to_i, 1].max

    case type
    when 'c'
      down_character(length)
    when 'C'
      up_character(length)
    when 'd'
      digits(length)
    when 'D'
      integer(length)
    when 'h'
      digits(length, 16)
    when 'H'
      integer(length, 16)
    when 's'
      alphanumeric(length)
    when 'w'
      alpha(length)
    when 'p'
      "-"
    end
  end
end

Private Class Methods

alpha(length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 67
def self.alpha(length = 1)
  self.rand_string_from_chars (('A'..'Z').to_a + ('a'..'z').to_a), length
end
alphanumeric(length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 71
def self.alphanumeric(length = 1)
  (1..length).collect { (i = Kernel.rand(62); i += ((i < 10) ? 48 : ((i < 36) ? 55 : 61 ))).chr }.join
end
digits(length = 1, base = 10) click to toggle source
# File lib/mongoid/token/generator.rb, line 63
def self.digits(length = 1, base = 10)
  rand(base**length).to_s(base).rjust(length, "0")
end
down_character(length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 51
def self.down_character(length = 1)
  self.rand_string_from_chars ('a'..'z').to_a, length
end
integer(length = 1, base = 10) click to toggle source
# File lib/mongoid/token/generator.rb, line 59
def self.integer(length = 1, base = 10)
  (rand(base**length - base**(length-1)) + base**(length-1)).to_s(base)
end
punctuation(length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 75
def self.punctuation(length = 1)
  self.rand_string_from_chars ['.','-','_','=','+','$'], length
end
rand_string_from_chars(chars, length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 47
def self.rand_string_from_chars(chars, length = 1)
  Array.new(length).map{ chars.sample }.join
end
up_character(length = 1) click to toggle source
# File lib/mongoid/token/generator.rb, line 55
def self.up_character(length = 1)
  self.rand_string_from_chars ('A'..'Z').to_a, length
end