なにも追加動作のない空の配列の生成に Array.new は使ってはいけない、目立ってめんどくさいから
ごく普通に素直にリテラルで [] や [ ] と書くとよい

なにかデータを格納したマイオブジェクトがあって、メソッド引数で動作を指定して、動作結果を利用したいという場合は
my = MyObject.new(init_data)
my.action(condition)
my.result...
ではなく、actionメソッドの戻り値の時点で計算結果を返すようにするとよい(resultメソッド自体は別途存在しても構わない)
my = MyObject.new(init_data)
result = my.action(condition)
result...

んで、おそらく、単にcountメソッドかresultメソッドがバグってる
p k,text,counter.result,'--------------------'
あたりをeachの前に入れて、期待通りの出力になるかどうか確かめてみれ