読者です 読者をやめる 読者になる 読者になる

Ruby+RSpecでFizzBuzz(with naokirin)

Ruby TDD

Rubyを使うのは久々です。
ペアプロに至ってはTDDBC名古屋以来です。
ということで、id:naokirin氏との初ペアプロ
Rubyを選んだ理由は「二人共慣れていない言語」で、Fizzbuzzなのは「いきなりMotsunabeZombieProjectはきついよね」という理由。
以下、今回書いたコードです。

fizzbuzz_spec.rb

# -*- coding: utf-8 -*-

require 'rubygems'
require 'rspec'
require 'fizzbuzz'

describe FizzBuzz do

  [3,6].each do |num|
    it "should return 'Fizz' for multiples of three(#{num})" do
      FizzBuzz.new(num).says.should == "Fizz"
    end
  end

  [5,10].each do |num|
    it "should return 'Buzz' for multiples of five(#{num})" do
      FizzBuzz.new(num).says.should == "Buzz"
    end
  end

  [15,30].each do |num|
    it "should return 'FizzBuzz' for multiples of three and five(#{num})" do
      FizzBuzz.new(num).says.should == "FizzBuzz"
    end
  end
  
  it "should return number for no multiples of three or five(1)" do
    FizzBuzz.new(1).says.should == "1"
  end

end

fizzbuzz.rb

# -*- coding: utf-8 -*-

class FizzBuzz

  def initialize(number)
    @number = number
  end

  def says
    if @number % 3 == 0 && @number % 5 == 0 then "FizzBuzz"
    elsif @number % 3 == 0 then "Fizz"
    elsif @number % 5 == 0 then "Buzz"
    else @number.to_s
    end
  end
end

itに仕様を書くかcontextを使ってitを省略しつつ記述するかで迷いましたが、話し合いの結果上記の形になりました。
もう少し何とかできないものかと思いつつ、今の力ではこんなところなのかな。


なお、今回はEmacs+Gitという環境です。
保存の度にgit nowしていたので49回を記録している……typo多すぎた。