class Wordlist::Operators::Union

Lazily enumerates over words from both wordlists, filtering out any duplicates.

@since 1.0.0

Public Instance Methods

each() { |word| ... } click to toggle source

Enumerates over the union of the two wordlists.

@yield [word]

The given block will be passed each word from both wordlists,
without duplicates.

@yieldparam [String] word

A word that belongs to one of the wordlists.

@return [Enumerator]

If no block is given, an Enumerator object will be returned.

@example

wordlist1 = Wordlist::Words["foo", "bar", "baz", "qux"]
wordlist2 = Wordlist::Words["xyz", "bar", "abc", "qux"]
(wordlist1 | wordlist2).each do |word|
  puts word
end
# foo
# bar
# baz
# qux
# xyz
# abc

@api public

# File lib/wordlist/operators/union.rb, line 43
def each
  return enum_for(__method__) unless block_given?

  unique_filter = UniqueFilter.new

  @left.each do |word|
    yield word
    unique_filter.add(word)
  end

  @right.each do |word|
    unless unique_filter.include?(word)
      yield word
    end
  end
end