Forkwell
2015/12/10 13:52:53 投稿
0

【Refactor Me】複雑な仕様に対抗するため、早くリファクタリングしないといけない

<p>リファクタリングのネタが思いつかない方のために、beforeコードを用意しました。<br><br> このbeforeコードをリファクタリングしてくれた方にも <img alt="sushi" src="/assets/emoji/unicode/1f363-831097849a370c02369283b17255c6e4f0ffe9e0a1269610119e49b26401f621.png" style="vertical-align:middle" width="20" height="20" /> のチャンスがあります!</p> <p>beforeコードをコピーして新規投稿を作成してね!</p> <hr> <p>架空のコーヒーショップ「スターバッカス」のメニューを生成するプログラムです。 <img alt="coffee" src="/assets/emoji/unicode/2615-2ab7f0680256fdd3dc2a2e31f73861302dc25d38b36f4baaf596217c03871b22.png" style="vertical-align:middle" width="20" height="20" /><br><br> 仕様は下記の通りです。(が、実装途中です)</p> <ul> <li>温度: ホット or アイス</li> <li>ショット: 変更無し or エクストラショット or リストレット</li> <li>ミルク: 変更無し or 低脂肪タイプミルク or ノンファット or ソイ</li> <li>その他: なし or バニラ(ただし、アイスでは選択不可) or キャラメル</li> </ul>

Before

require 'minitest/autorun'

module StarBacchus
  class Menu
    def create(base, options = {})
      if base == :latte && options[:milk] == :soy
        'ソイ スターバッカス ラテ'
      elsif base == :latte && options[:hot] && options[:espresso] == :extrashot
        'エクストラショット スターバッカス ラテ'
      elsif base == :latte && options[:iced] && options[:espresso] == :extrashot
        'アイス エクストラショット スターバッカス ラテ'
      elsif base == :latte && options[:hot]
        'スターバッカス ラテ'
      elsif base == :latte && options[:iced]
        'アイス スターバッカス ラテ'
      end
    end
  end
end

class TestMenu < MiniTest::Unit::TestCase
  def setup
    @menu = StarBacchus::Menu.new
  end

  def test_latte
    assert_equal 'スターバッカス ラテ', @menu.create(:latte, hot: true)
  end

  def test_iced_latte
    assert_equal 'アイス スターバッカス ラテ', @menu.create(:latte, iced: true)
  end

  def test_extrashot
    assert_equal 'エクストラショット スターバッカス ラテ', @menu.create(:latte, hot: true, espresso: :extrashot)
  end

  def test_iced_extrashot
    assert_equal 'アイス エクストラショット スターバッカス ラテ', @menu.create(:latte, iced: true, espresso: :extrashot)
  end

  def test_soy_latte
    assert_equal 'ソイ スターバッカス ラテ', @menu.create(:latte, hot: true, milk: :soy)
  end
end

After

#  your cool code

みんなのコメント