Sentence maker with thesaurus
Overall, it's pretty good. My comments are:


Use do/end for multiline blocks.
Typical Ruby style is a 2-space indent.
I think @thesaurus.drop(1) looks a bit better than @thesaurus.slice(1..-1)
match is not a good local variable name, word is more descriptive
Template is too complicated: you can just use multiple %s placeholders with an array of Strings.


I'm not commenting too much on the algorithm, since you weren't asking, but it seems a bit complicated. I'd be tempted to try simplifying it a bit.

Here's your code with the above changes applied:

dict = {
  'hello' =&gt; ['hey', 'what\'s up'],
  'name' =&gt; ['nomenclature', 'epithet'],
}

str = 'hello, my name is'

class SentenceMaker
  def initialize str, dict
    @thesaurus = []
    @template = str.gsub(/\w+/) do |word|
      if (dict[word])
        @thesaurus.push dict[word]
        '%s'
      else
        word
      end
    end
  end

  def each
    @thesaurus.first.product(*@thesaurus.drop(1)).each do |repl|
      yield @template % repl
    end
  end
end

SentenceMaker.new(str, dict).each {|sentence|
  puts sentence
}