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