Class: Properb::Generators::FrequenciesGenerator
- Inherits:
-
Properb::Generator
- Object
- Properb::Generator
- Properb::Generators::FrequenciesGenerator
- Defined in:
- lib/properb/generators/frequencies_generator.rb
Instance Method Summary collapse
- #generate_value(random, size) ⇒ Object
-
#initialize(frequencies) ⇒ FrequenciesGenerator
constructor
A new instance of FrequenciesGenerator.
Methods inherited from Properb::Generator
#map, #or, #reject, #select, #sized, #to_properb_generator
Constructor Details
#initialize(frequencies) ⇒ FrequenciesGenerator
Returns a new instance of FrequenciesGenerator.
4 5 6 |
# File 'lib/properb/generators/frequencies_generator.rb', line 4 def initialize(frequencies) @frequencies = frequencies end |
Instance Method Details
#generate_value(random, size) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/properb/generators/frequencies_generator.rb', line 8 def generate_value(random, size) integer = IntegerGenerator.new(0...@frequencies.values.sum) .generate_value(random, size) saved_random = random.dup integer.flat_map do |choice| new_random = saved_random.dup running = 0 generator = @frequencies.find do |_generator, weight| running += weight running > choice end.first raise "No generator found in `frequencies' - insufficient weights?" unless generator generator.generate_value(new_random, size) end end |