Sha256: cfb4a99ac04802c6c2e831b112abf67aff5d1dd6a1c47b897141d05de24b90bb

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

class Fixnum
  # produce a string of N random vowels
  def random_vowels
    generate_random_string_using VOWELS
  end
  # produce a string of N random consonants
  def random_consonants
    generate_random_string_using CONSONANTS
  end
  # produce a string of N random letters
  #   5.random_letters
  def random_letters
    generate_random_string_using LETTERS
  end
  # produce a string of N random numbers
  #   5.random_numbers
  # optionally specific limits on the numbers
  #   5.random_numbers(:from => 1, :to => 5)
  def random_numbers( opts = {} )
    # Then set some defaults, just in case
    upper = opts[:to] || 9
    lower = opts[:from] || 0
    only = opts[:only] || :both
            
    # And finally calculate the number
    n = []    
    (self - 1).times do
      i = (lower..upper).to_a.sort_by { rand }.first
      n << i.to_s
    end
    # add the last digit according to :only
    n << end_number_choices(only).select {|x| (lower <= x) && (x <= upper) }.sort_by { rand }.first.to_s
    n.join("")
  end
  # produce a string of N random characters
  #   5.random_characters
  def random_characters
    generate_random_string_using CHARACTERS
  end
  
  private

  VOWELS = ['a', 'e', 'i', 'o', 'u']  
  LETTERS = ('a'..'z').to_a
  CONSONANTS = LETTERS - VOWELS
  NUMBERS = ('0'..'9').to_a
  CHARACTERS = LETTERS + NUMBERS
  EVENS = %w(0 2 4 6 8).map {|x| x.to_i }
  ODDS = %w(1 3 5 7 9).map {|x| x.to_i }

  def generate_random_string_using(legal_characters)
    upper_limit = legal_characters.size - 1
    (1..self).collect do |num|
      legal_characters[rand(upper_limit)]
    end.join
  end
  
  def end_number_choices opt
    case opt
    when :even
      EVENS
    when :odd
      ODDS
    else
      EVENS | ODDS
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brightbox-rujitsu-0.1.9 lib/rujitsu/fixnum.rb