class WordGenerator::Generator

Attributes

letters[R]

Public Class Methods

new(letters) click to toggle source
# File lib/word_generator/generator.rb, line 7
def initialize(letters)
  @letters = parse_letters(letters)
end

Public Instance Methods

generate(word_length) click to toggle source
# File lib/word_generator/generator.rb, line 11
def generate(word_length)
  max_word_length = WordGenerator.configuration.max_word_length
  if word_length > max_word_length
    raise WordLengthTooLongError, "Word length cannot be longer than #{max_word_length}"
  end

  possible_words(word_length).select { |word| WordList.contains?(word) }
end

Private Instance Methods

parse_letters(letters) click to toggle source
# File lib/word_generator/generator.rb, line 22
def parse_letters(letters)
  letters_string = 
    if letters.is_a?(String)
      letters
    elsif letters.is_a?(Array)
      letters.join
    else
      raise ArgumentError.new("String or Array of letters should be provided")
    end
  letters_string.gsub(/[^a-z]/i, "").split("")
end
possible_words(word_length) click to toggle source
# File lib/word_generator/generator.rb, line 34
def possible_words(word_length)
  @letters.permutation(word_length).to_a.map(&:join).uniq.sort
end