Sha256: 31af3a4ead9736bd1d471ec89e3801b2eecb2ff20718177e435e14f2fb692dc8

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

require_relative 'die' 
require_relative 'ruleset/base_ruleset'

class Roll
  include Enumerable

  attr_reader :dice

  def initialize(num_of_dice, options = {})
    @options = default_options.merge(options)
    @rand_generator = @options[:rand_generator]
    @dice = roll(num_of_dice)
    unless @options[:ruleset].nil?
      self.extend(@options[:ruleset])
    end
  end

  def size
    @dice.count
  end

  def ==(other)
    @dice == other
  end

  private

  def each
    @dice.each { |die| yield die }
  end

  def default_options
    { :die_size => 10, :rand_generator => Random, :ruleset => Ruleset::BaseRuleset}
  end

  def roll(number)
    number.times.collect { roll_die }
  end

  def roll_die
    Die.new(@rand_generator.rand(@options[:die_size]))
  end

  def each_die_that_matches(values)
    @dice.map! do |die|
      last_die = die
      while values.any? { |value| last_die == value }
        die, last_die = yield(die)
        last_die = (last_die.nil? && die) || last_die
      end
      die
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
diceroller-0.0.3 lib/roller/roll.rb