diff --git a/spec/.DS_Store b/spec/.DS_Store new file mode 100644 index 0000000..4be6982 Binary files /dev/null and b/spec/.DS_Store differ diff --git a/spec/wordcounter_spec.rb b/spec/wordcounter_spec.rb new file mode 100644 index 0000000..57a133f --- /dev/null +++ b/spec/wordcounter_spec.rb @@ -0,0 +1,43 @@ +require 'rspec' +require_relative '../wordcounter' + +describe '#countWords' do + let(:counter) { Counter.new } + + context 'when string is unique' do + it 'returns proper array' do + expect(counter.countWords("maverick goose iceman")).to eq( + [["maverick", 1], + ["goose", 1], + ["iceman", 1]]) + end + end + + context 'when string is nonunique' do + it 'returns proper array' do + expect(counter.countWords("maverick maverick goose maverick iceman goose")).to eq( + [["maverick", 3], + ["goose", 2], + ["iceman", 1]]) + end + end + + context 'when string is nonunique, puntuated, with capitalization' do + it 'returns proper array' do + expect(counter.countWords("GOOSE! Maverick Goose goose, Iceman (icEman)")).to eq( + [["goose", 3], + ["iceman", 2], + ["maverick", 1]]) + end + end +end + +describe '#printCount' do + let(:counter) { Counter.new } + + context 'when reading in file' do + it 'does not raise an error' do + expect{counter.printCount("./speech.txt")}.not_to raise_error + end + end +end \ No newline at end of file diff --git a/wordcounter.rb b/wordcounter.rb new file mode 100644 index 0000000..b784118 --- /dev/null +++ b/wordcounter.rb @@ -0,0 +1,25 @@ +class Counter + + def countWords(text) + text = text.downcase.gsub(/[^a-z' ]/, '') #make lowercase and only keep allowed characters + raw_words = text.split(" ") + count = {} + + raw_words.each do |word| + if !count.key? word + count[word] = 1 + else + count[word] += 1 + end + end + + count.sort_by{ |k, v| -v} + end + + def printCount(path) + text = File.open(path) { |line| line.read } #concatenates every line into one string + countWords(text).each do |word, count| + puts "#{word} - #{count}" + end + end +end