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