Skip to content

Instantly share code, notes, and snippets.

@benkoshy
Created April 19, 2017 08:27
Show Gist options
  • Select an option

  • Save benkoshy/b0c0ba1889c9cc7259a673b4ad36ddad to your computer and use it in GitHub Desktop.

Select an option

Save benkoshy/b0c0ba1889c9cc7259a673b4ad36ddad to your computer and use it in GitHub Desktop.
FizzBuzz kata
# my attempt at the fizz buzz kata

class Printer
  def self.output
    1.upto(15) do |n|
      puts SpecialNumber.new(n).factory.print
    end
  end
end

class SpecialNumber
  attr_reader :number

  def initialize(number)
    @number = number
  end

  def factory
    if is_divisible_by?(15)
      FizzBuzzNumber
    elsif is_divisible_by?(3)
      FizzNumber
    elsif is_divisible_by?(5)
      BuzzNumber    
    else
      NormalNumber
    end.new(@number)
  end

  def print    
  end

  def is_divisible_by?(factor)
    @number % factor == 0
  end
end


class FizzNumber < SpecialNumber  
  def print
    "fizz"
  end
end

class BuzzNumber < SpecialNumber  
  def print
    "buzz"
  end
end

class FizzBuzzNumber < SpecialNumber  
  def print
    "fizzbuzz"
  end
end


class NormalNumber < SpecialNumber  
  def print
    @number
  end
end


Printer.output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment