Class: Properb::Generators::FrequenciesGenerator

Inherits:
Properb::Generator show all
Defined in:
lib/properb/generators/frequencies_generator.rb

Instance Method Summary collapse

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