module Gen

Public Class Methods

generate(generator) click to toggle source
# File lib/gen.rb, line 38
def generate(generator)
  if generator.respond_to?(:generate)
    generator.generate
  elsif generator.respond_to?(:call)
    STDERR.puts "WARN: Objects that implement `call` are no longer automatically generators you must implement `generate`"
    generator
  else
    generator
  end
end
generator?(val) click to toggle source
# File lib/gen.rb, line 13
def generator?(val)
  val.respond_to?(:generate)
end
one_of(generators) click to toggle source
# File lib/gen.rb, line 34
def one_of(generators)
  generate(generators.to_a.sample)
end
sample(gen, n = 10) click to toggle source
# File lib/gen.rb, line 17
def sample(gen, n = 10)
  (0..n).map { generate(gen) }
end
where(gen, pred, max_tries = 10) click to toggle source
# File lib/gen.rb, line 21
def where(gen, pred, max_tries = 10)
  Generator.new do
    tries = 0
    until (val = generate(gen)) and pred.call(val)
      tries += 1
      if tries >= max_tries
        raise "We've tried generating a value from #{gen.inspect} with #{pred.inspect} #{max_tries} times and failed"
      end
    end
    val
  end
end

Private Instance Methods

generate(generator) click to toggle source
# File lib/gen.rb, line 38
def generate(generator)
  if generator.respond_to?(:generate)
    generator.generate
  elsif generator.respond_to?(:call)
    STDERR.puts "WARN: Objects that implement `call` are no longer automatically generators you must implement `generate`"
    generator
  else
    generator
  end
end
generator?(val) click to toggle source
# File lib/gen.rb, line 13
def generator?(val)
  val.respond_to?(:generate)
end
one_of(generators) click to toggle source
# File lib/gen.rb, line 34
def one_of(generators)
  generate(generators.to_a.sample)
end
sample(gen, n = 10) click to toggle source
# File lib/gen.rb, line 17
def sample(gen, n = 10)
  (0..n).map { generate(gen) }
end
where(gen, pred, max_tries = 10) click to toggle source
# File lib/gen.rb, line 21
def where(gen, pred, max_tries = 10)
  Generator.new do
    tries = 0
    until (val = generate(gen)) and pred.call(val)
      tries += 1
      if tries >= max_tries
        raise "We've tried generating a value from #{gen.inspect} with #{pred.inspect} #{max_tries} times and failed"
      end
    end
    val
  end
end