Class: Spruz::Generator

### Home Classes Methods

### In Files

- lib/spruz/generator.rb

### Parent

Object

### Methods

- ::[]
- ::new
- #add_dimension
- #each
- #size

### Included Modules

- Enumerable

### Files

- README.rdoc

### Class/Module Index

Quicksearch

- Spruz
- Spruz::Attempt
- Spruz::Bijection
- Spruz::Blank
- Spruz::Blank::Array
- Spruz::Blank::FalseClass
- Spruz::Blank::Hash
- Spruz::Blank::NilClass
- Spruz::Blank::Numeric
- Spruz::Blank::Object
- Spruz::Blank::String
- Spruz::Blank::TrueClass
- Spruz::CountBy
- Spruz::DeepDup
- Spruz::FileBinary
- Spruz::FileBinary::ClassMethods
- Spruz::FileBinary::Constants
- Spruz::Full
- Spruz::GO
- Spruz::Generator
- Spruz::HashSymbolizeKeysRecursive
- Spruz::HashUnion
- Spruz::Limited
- Spruz::LinesFile
- Spruz::LinesFile::LineExtension
- Spruz::Memoize
- Spruz::Minimize
- Spruz::ModuleGroup
- Spruz::Null
- Spruz::Once
- Spruz::P
- Spruz::PartialApplication
- Spruz::RangePlus
- Spruz::Round
- Spruz::SecureWrite
- Spruz::Shuffle
- Spruz::StringCamelize
- Spruz::StringUnderscore
- Spruz::StringVersion
- Spruz::StringVersion::Version
- Spruz::Subhash
- Spruz::TimeDummy
- Spruz::TimeDummy::ClassMethods
- Spruz::ToProc
- Spruz::UniqBy
- Spruz::Write
- Array
- Enumerable
- File
- Float
- Hash
- IO
- IRB
- Integer
- Method
- Module
- Object
- Proc
- Range
- String
- Symbol
- Time

No matching classes.

# Spruz::Generator

This class can create generator objects, that can produce all tuples, that would be created by as many for-loops as dimensions were given.

The generator

    g = Spruz::Generator[1..2, %w[a b c]]

produces

    g.to_a # => [[1, "a"], [1, "b"], [1, "c"], [2, "a"], [2, "b"], [2, "c"]]

The 'each' method can be used to iterate over the tuples

    g.each { |a, b| puts "#{a} #{b}" }

and Spruz::Generator includes the Enumerable module, so Enumerable.instance_methods can be used as well:

    g.select { |a, b| %w[a c].include? b  } # => [[1, "a"], [1, "c"], [2, "a"], [2, "c"]]

### Public Class Methods

[](*enums) click to toggle source

Create a new Generator object from the enumberables enums.

    # File lib/spruz/generator.rb, line 20
    def self.[](*enums)
      new(enums)
    end

new(enums) click to toggle source

Create a new Generator instance. Use the objects in the Array enums as dimensions. The should all respond to the :each method (see module Enumerable in the core ruby library).

    # File lib/spruz/generator.rb, line 27
    def initialize(enums)
      @enums, @iterators, @n = [], [], 0
      enums.each { |e| add_dimension(e) }
    end

### Public Instance Methods

add_dimension(enum, iterator = :each) click to toggle source

Add another dimension to this generator. enum is an object, that ought to respond to the iterator method (defaults to :each).

    # File lib/spruz/generator.rb, line 55
    def add_dimension(enum, iterator = :each)
      @enums << enum
      @iterators << iterator
      @n += 1
    end

each() click to toggle source

Iterate over all tuples produced by this generator and yield to them.

    # File lib/spruz/generator.rb, line 33
    def each(&block) # :yield: tuple
      recurse(&block)
      self
    end

size() click to toggle source

Return the size of this generator, that is the number of its dimensions.

    # File lib/spruz/generator.rb, line 62
    def size
      @enums.size
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.