1d5707f13f1f9840f3c7c05adfcd8fa0
2015/12/10 13:52:53 投稿
0

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

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

みんなのコメント