Sha256: b6a4f6d4e8725ff26f7fdf9e94f286572be83cdd1f274577975fbfc86e08b473

Contents?: true

Size: 871 Bytes

Versions: 3

Compression:

Stored size: 871 Bytes

Contents

# frozen_string_literal: true
module WordSearch
  class WordBank < Array
    include ActiveModel::Validations

    validate :word_bank

    def initialize(file)
      return invalid_file unless valid_file?(file)
      words = []

      CSV.foreach(file) do |row|
        row.each do |word|
          words << word.strip.downcase if word.strip.length > 1
        end
      end

      super words.uniq
    end

    def longest_length
      @longest ||= collect(&:length).max.to_i
    end

    def longest_words
      select do |word|
        word.length == longest_length
      end
    end

    private

    def word_bank
      errors.add(:base, "Word bank cannot be empty") if blank?
    end

    def valid_file?(file)
      File.file?(file) && File.extname(file) == ".csv"
    end

    def invalid_file
      errors.add(:file, "is invalid")
      false
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
word_search-1.1.0 lib/word_search/word_bank.rb
word_search-1.0.1 lib/word_search/word_bank.rb
word_search-1.0.0 lib/word_search/word_bank.rb