https://qiita.com/sumim/items/f26902f2b813c075a619 見て書いてみたけどStringの場合とIntegerの場合のメソッドで2つ実装別れてしまっていけてないかんじになっちゃった
module FizzBuzz
refine(String)do
def fizzbuzz
@fizzbuzz
end
def fizzbuzz=(n)
extend(FizzBuzz)
instance_variable_set(:@fizzbuzz, n)
end
end
end
module Fizz
refine(Integer) do
using FizzBuzz
def fizz?
(self % 3).zero?
end
def fizz
if fizz?
"Fizz".tap {|s| s.fizzbuzz = self }
else
self
end
end
end
end
module Buzz
refine(Integer) do
using FizzBuzz
def buzz?
(self % 5).zero?
end
def buzz
if buzz?
"Buzz".tap {|s| s.fizzbuzz = self }
else
self
end
end
end
refine(String) do
using FizzBuzz
def buzz
if fizzbuzz.buzz?
concat("Buzz")
else
self
end
end
end
end
using Fizz
using Buzz
1.upto(100) { |n| p n.fizz.buzz }