Skip to content

Instantly share code, notes, and snippets.

@juanxo
Created July 30, 2013 03:57
Show Gist options
  • Select an option

  • Save juanxo/6110109 to your computer and use it in GitHub Desktop.

Select an option

Save juanxo/6110109 to your computer and use it in GitHub Desktop.
My take on FizzBuzz kata using ruby
module FizzBuzz
extend self
def get(number)
result = ''
result << 'Fizz' if multiple?(number, 3)
result << 'Buzz' if multiple?(number, 5)
return result if result.any?
number.to_s
end
def multiple?(number, factor)
number % factor == 0
end
def print_sequence
(1..100).each { |number| puts get(number) }
end
end
require 'fizzbuzz'
describe FizzBuzz do
context 'normal number' do
it 'gets 1 for 1' do
subject.get(1).should eq('1')
end
it 'gets 2 for 2' do
subject.get(2).should eq('2')
end
end
context 'multiples of 3' do
it 'gets Fizz for 3' do
subject.get(3).should eq('Fizz')
end
it 'gets Fizz for 6' do
subject.get(6).should eq('Fizz')
end
end
context 'multiples of 5' do
it 'gets Buzz for 5' do
subject.get(5).should eq('Buzz')
end
it 'gets Buzz for 10' do
subject.get(10).should eq('Buzz')
end
end
context 'multiples of both 3 and 5' do
it 'gets FizzBuzz for 15' do
subject.get(15).should eq('FizzBuzz')
end
it 'gets FizzBuzz for 30' do
subject.get(30).should eq('FizzBuzz')
end
end
context 'integration' do
it 'gets Fizz for all multiples of 3(only) in 1..100 range' do
multiples = (1..100).to_a.select do |number|
number % 3 == 0 and number % 5 != 0
end
multiples.each do |number|
subject.get(number).should eq('Fizz')
end
end
it 'gets Buzz for all multiples of 5(only) in 1..100 range' do
multiples = (1..100).to_a.select do |number|
number % 5 == 0 and number % 3 != 0
end
multiples.each do |number|
subject.get(number).should eq('Buzz')
end
end
it 'gets FizzBuzz for all multiples of 3 & 5 in 1..100 range' do
multiples = (1..100).to_a.select do |number|
number % 5 == 0 and number % 3 == 0
end
multiples.each do |number|
subject.get(number).should eq('FizzBuzz')
end
end
end
end
require 'fizzbuzz'
FizzBuzz::print_sequence
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment