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