class RuleChooser

Public Class Methods

new(random_generator = RandomGenerator.new) click to toggle source
# File lib/grammoire/rule_chooser.rb, line 3
def initialize(random_generator = RandomGenerator.new)
  @random_generator = random_generator
end

Public Instance Methods

select_from(rules) click to toggle source
# File lib/grammoire/rule_chooser.rb, line 7
def select_from(rules)
  return nil if rules.empty?

  selected_weight_index = @random_generator.number_up_to(total_weight_from(rules))
  max_weight_index = 0

  rules.each do |rule|
    max_weight_index += rule.weight
    return rule if selected_weight_index < max_weight_index
  end
end

Private Instance Methods

total_weight_from(rules) click to toggle source
# File lib/grammoire/rule_chooser.rb, line 21
def total_weight_from(rules)
  rules.inject(0) { |sum, rule| sum + rule.weight }
end