如何使gem优雅地支持多个Ruby版本

时间:2014-07-07 21:24:12

标签: ruby version

我正在编写一个我希望在多个Ruby版本中工作的gem,这是最好的方法吗?天真的解决方案是做这样的事情

if RUBY_VERSION <= 1.8.7
   my_hash = {:a => 1}
elsif RUBY_VERSION >= 1.9.3
   my_hash = {a: 1}
...
end

什么是让gem支持多个Ruby版本的最佳方法?

2 个答案:

答案 0 :(得分:2)

Ruby&gt; 1.9.3仍然支持旧的哈希语法。如果您需要支持1.8.7并且您唯一的问题是散列文字,那么优雅的解决方案是专门使用旧语法。这样你可以放弃任何条件。

答案 1 :(得分:1)

您可以在lib目录中的不同文件上编写两个版本的gem,并在主文件上根据Ruby版本加载其中任何一个。

主档案(foo_gem / lib / foo.rb)

if RUBY_VERSION <= 1.8.7
  require_relative "./foo-ruby1.8.7"
elsif RUBY_VERSION >= 1.9.3
  require_relative "./foo-ruby1.9.3"
end