B問題「高層タワー」テストコード


もっとスマートなのもあるだろうが今はこれが精一杯
エンジニアが死滅した世界「高層タワー」

問題文

単語を組み合わせて新単語を作ります。
新単語は N 個の文字列を、前から順に結合して作ります。
この時、冗長さをなくすため、 前から結合した単語の末尾 と 後ろの単語の先端 が一番長く一致するように結合します。
例えば、 入力例 1 の "paiza", "apple", "letter" の場合、
先頭から "paiza", "apple" を条件どおり重ねると "paizapple" となります。
この単語を更に次の単語と重ねると "paizappletter" となります。

高層タワー_spec.rb
require 'spec_helper'

RSpec.describe High_rise_tower do
  it '入力例1' do
    # やりやすいように引数の文字列を「/」で区切りました
    result = High_rise_tower.new.combine(word: 'paiza/apple/letter')
    expect(result).to eq 'paizappletter'
  end
  it '入力例2' do
    result = High_rise_tower.new.combine(word: 'poh/p/oh')
    expect(result).to eq 'pohpoh'
  end
end
高層タワー.rb
class High_rise_tower

    def initialize
      # その都度新単語がこの変数に入っていく
      @new_word = ''
    end

    def combine(word:)
      word.split('/').each do |w|
        w.to_s
        if @new_word == '' # 1回目は必ず、ただの単語が入るように条件分岐
          @new_word = w
        else
          num = w.length # 比較する単語が、前の単語と重なる部分があるかを調べるために、比較する単語の長さを調べてその長さ分、後ろから確かめる
          cut_word = w
          while num >= 1
            break if @new_word.index(cut_word, -num) != nil
            # 一回ずつ文字列の末尾を削って、合致するかをみる
            cut_word = cut_word.chop
            num -= 1
          end
          # つまりは、chopしていった結果合致するものがなく、からの文字列が帰ってきたのではなければ、切った文字列の長さ分を、比較された単語から削って新しい単語にくっつける
          if cut_word == ''
            @new_word += w
          else
            int = cut_word.length
            if int == 1
              w.slice!(0)
              @new_word += w
            else
              w.slice!(0..int -1)
              @new_word += w
            end
          end
        end
    end
    # 最後にブロック引数として新しい単語を返す
    @new_word
  end
end

thank youにゃー
また更新したいけど、需要のなさそうなこれらの、どこをどう直しましょうか?