プラットフォームがWindowsかそうでないかで処理を変える方法

RUBY_PLATFORMRuby が動作しているプラットフォームがわかります。

Windowsx64-mingw32 とかになります。windows ではありません。

Visual Studio とかでビルドすると mswin が入るようです。(環境がないのでフルネームはわかりません...)

なので、これらの文字列が RUBY_PLATFORM に含まれているかどうかを確認することで Windwos で動作しているかが判定できます。

def bar(msg)
  puts "#{__callee__} #{msg}"
end

3.times do |i|
  if RUBY_PLATFORM =~ /mingw|mswin/
    bar("win: #{i}")
  else
    bar("other: #{i}")
  end
end

何回も呼ぶようなメソッドを包含するような場合だと、定義ごと分岐したほうがいいかもしれません。

if RUBY_PLATFORM =~ /mingw|mswin/
  def foo(i)
    puts "#{__callee__} win: #{i}"
  end
else
  def foo(i)
    puts "#{__callee__} other: #{i}"
  end
end

3.times do |i|
  foo(i)
end

複数のメソッドを定義しないといけない場合は上記の場合だと煩雑になるかもしれません。その場合は require を分岐させる方法がいいかもしれません。

if RUBY_PLATFORM =~ /mingw|mswin/
  require File.join(__dir__, "method_win.rb"
else
  require File.join(__dir__, "method.rb"
end

3.times do |i|
  method(i)
end