lib/cw/words.rb

Summary

Maintainability
B
4 hrs
Test Coverage
# encoding: utf-8

module CW

  #class Words deals with words

  class Words

    include TextHelpers

    def load args
      @words = CommonWords.new.read(args)
    end

    def load_text(filename)
      File.open(filename, 'r') do |file|
        @words = file.read.split
      end
    end

    def double_words
      @words.collect! {|wrd| [wrd] * 2}
      @words.flatten!
    end

    def repeat multiplier
      @words *= multiplier + 1
    end

    def shuffle
      @words.shuffle!
    end

    def to_array
      @words
    end

    def all
      @words
    end

    def to_s
      @words.join(' ')
    end

    def add words
      @words = words
    end

    def exist?
      @words
    end

    def word_size(size)
      @words = @words.select{|wrd| wrd.size == size}
    end

    def beginning_with_letter(letr)
      @words.select{|wrd| wrd.start_with?(letr)}
    end

    def ending_with_letter(letr)
      @words.select{|wrd| wrd.end_with?(letr)}
    end

    def beginning_with
      letter_filter(:beginning_with, Cfg.config["begin"])
    end

    def ending_with
      letter_filter(:ending_with, Cfg.config["end"])
    end

    def including
      letter_filter(:including, Cfg.config["including"])
    end

    def letter_filter(option,letters)
      method_name = option.to_s + "_letter"
      @words = letters.flatten.collect do |letr|
        if letr.class == Range
          letr.collect do |let|
            self.send(method_name, let)
          end
        else
          self.send(method_name, letr)
        end
      end.flatten
    end

    def count(word_count)
      @words = @words.take(word_count.to_i)
    end

    def including_letter(letr)
      @words.select{|wrd| wrd.include?(letr)}
    end

    def containing
      letters = Cfg.config["containing"]
      letters.flatten.collect do |letr|
        if letr.class == Range
          letters = letr.collect { |let| let }
        end
      end

      lets = letters.flatten.join('').split("")
      found, temp, @words = false, @words, []
      temp.each do |wrd|
        wrd_lets = wrd.split("")
        wrd_lets.each do |wrd_let|
          if lets.include?(wrd_let)
            found = true
          else
            found = false
            break
          end
        end
        if found
          @words.push wrd
        end
      end
      @words
    end

    def no_longer_than(max)
      @words = @words.select{|wrd| wrd.size <= max}
    end

    def no_shorter_than(min)
      @words = @words.select{|wrd| wrd.size >= min}
    end

    def assign(words)
      words.kind_of?(String) ?
        @words = words.split(/\s+/) :
        @words = words
    end

    def collect_words
      @words.each{ |word| ' ' + word }.
        collect{ |wrd| wrd }.join(' ')
    end

    def reverse
      @words.reverse!
    end

    def letters_numbers
      @words = letter_group.push( * number_group)
    end

    def random_letters(options = {})
      @words = Randomize.new(options, letter_group).generate
    end

    def random_numbers(options = {})
      @words = Randomize.new(options, number_group).generate
    end

    def random_letters_numbers(options = {})
      @words = Randomize.new(options, letters_numbers.shuffle).generate
    end

    def alphabet(options = {reverse: nil})
      @words = [Alphabet.new(options).generate]
    end

    def numbers(options = {reverse: nil})
      @words = [Numbers.new(options).generate]
    end

    def numbers_spoken()
    end
  end
end