module Tekido::Methods::ClassMethods

Constants

EXAMPLE_DOMAINS
LOWER_CHARS
NUMBER_CHARS
UPPER_CHARS

Public Instance Methods

birthday(arg = nil) click to toggle source
# File lib/tekido/methods/date.rb, line 23
def birthday(arg = nil)
  if arg.nil?
    min = (Date.today << 12 * 101) + 1
    date(min..Date.today)
  elsif arg.is_a?(Integer)
    min = (Date.today << 12 * (arg + 1)) + 1
    max = Date.today << 12 * arg
    date(min..max)
  elsif arg.is_a?(Range) && arg.min.is_a?(Integer)
    min = (Date.today << 12 * (arg.max + 1)) + 1
    max = Date.today << 12 * arg.min
    date(min..max)
  end
end
date(arg = nil) click to toggle source
# File lib/tekido/methods/date.rb, line 7
def date(arg = nil)
  min, max = nil, nil
  if arg.nil?
    min, max = Date.new(1, 1, 1), Date.new(9999, 12, 31)
  elsif arg.is_a?(Integer)
    min, max = Date.new(arg, 1, 1), Date.new(arg, 12, 31)
  elsif arg.is_a?(Range)
    if arg.min.is_a?(Integer)
      min, max = Date.new(arg.min, 1, 1), Date.new(arg.max, 12, 31)
    elsif arg.min.is_a?(Date)
      min, max = arg.min, arg.max
    end
  end
  min ? min + integer((max - min).to_i) : nil
end
email(*bases) click to toggle source
# File lib/tekido/methods/string.rb, line 23
def email(*bases)
  local = string(size: 3..32, components: [:lower, :number])
  domains = bases.empty? ? EXAMPLE_DOMAINS : bases.map { |b| b.index("@") ? b[b.index('@').to_i+1..b.size] : b }
  "#{local}@#{domains.sample}"
end
float(arg = nil) click to toggle source
# File lib/tekido/methods/numeric.rb, line 14
def float(arg = nil)
  if arg.nil?
    rand
  elsif arg.is_a?(Range)
    rand(arg.min.to_f..arg.max.to_f)
  else
    rand * arg.to_f
  end
end
integer(arg = nil) click to toggle source
# File lib/tekido/methods/numeric.rb, line 5
def integer(arg = nil)
  if arg.nil?
    max = 2 ** 30 - 1
    rand(0..max)
  else
    rand(arg).to_i
  end
end
list(size, value_defs) click to toggle source
# File lib/tekido/methods/array.rb, line 5
def list(size, value_defs)
  range_and_values = range_and_values_from(value_defs)

  Array.new(size) do |i|
    per = percent_as(:float)
    match = range_and_values.find { |item| item.first.include?(per) }
    match ? match.last : nil
  end
end
percent() click to toggle source
# File lib/tekido/methods/percentage.rb, line 5
def percent
  percent_as(:integer)
end
percent_as(type) click to toggle source
# File lib/tekido/methods/percentage.rb, line 9
def percent_as(type)
  per = rand(0.0..100.0)
  case type
  when :float
    per
  when :integer
    per.to_i
  when :mo5
    per.to_i / 5 * 5
  when :deca, :mo10
    per.to_i / 10 * 10
  end
end
string(options = {}) click to toggle source
# File lib/tekido/methods/string.rb, line 12
def string(options = {})
  size = size_from(options[:size])
  chars = chars_from(options[:chars], *options[:components])

  "".tap do |str|
    size.times do
      str << chars.sample
    end
  end
end
yes?(percent = 50) click to toggle source
# File lib/tekido/methods/boolean.rb, line 5
def yes?(percent = 50)
  percent_as(:float) <= (percent.is_a?(Numeric) ? percent : 50)
end

Private Instance Methods

chars_from(chars, *components) click to toggle source
# File lib/tekido/methods/string.rb, line 42
def chars_from(chars, *components)
  return chars if chars.is_a?(Array) && !chars.empty?

  base_chars = UPPER_CHARS + LOWER_CHARS + NUMBER_CHARS
  return base_chars if components.nil? || components.empty?

  chars = []
  if components.include?(:upper)
    chars += UPPER_CHARS
  end
  if components.include?(:lower)
    chars += LOWER_CHARS
  end
  if components.include?(:number)
    chars += NUMBER_CHARS
  end
  chars.empty? ? base_chars : chars
end
range_and_values_from(value_defs) click to toggle source
# File lib/tekido/methods/array.rb, line 16
def range_and_values_from(value_defs)
  if value_defs.is_a?(Array)
    range_and_values_from_array(value_defs)
  elsif value_defs.is_a?(Hash)
    range_and_values_from_value_ratios(value_defs)
  else
    []
  end
end
range_and_values_from_array(values) click to toggle source
# File lib/tekido/methods/array.rb, line 25
def range_and_values_from_array(values)
  [].tap do |array|
    values.each do |value|
      min = array.empty? ? 0.0 : array.last.first.max
      max = min + (100.0 / values.size)
      array << [(min..max), value]
    end
  end
end
range_and_values_from_value_ratios(value_ratios) click to toggle source
# File lib/tekido/methods/array.rb, line 35
def range_and_values_from_value_ratios(value_ratios)
  [].tap do |array|
    value_ratios.each do |value, ratio|
      min = array.empty? ? 0.0 : array.last.first.max
      max = min + ratio.to_f
      array << [(min..max), value]
    end
  end
end
size_from(option) click to toggle source
# File lib/tekido/methods/string.rb, line 30
def size_from(option)
  base_size = integer(1..255)
  if option.nil?
    base_size
  elsif option.is_a?(Integer)
    option > 0 ? option : base
  elsif option.is_a?(Range)
    new_size = integer(option)
    new_size > 0 ? new_size : base
  end
end