宝石打算支持宝石a或b作为功能的替代品.
在代码中我用定义的方法检查?(A)如果我回到b那很好.
但作为宝石开发者如何指定这些依赖关系?
1)我把什么放在Gemfile中.
group :development, :test do
gem 'a', :require => false
gem 'b', :require => false
end
这允许Bundle.require(:test)不要自动要求a,b?
2)当我们在测试中回到b时,如何明确要求a和b分别模仿(或模拟)场景?
3)另外如何指定a或b是gem的先决条件.
谢谢
最佳答案 不要在依赖项中包含gem,但无论如何都需要它.如果失败,则会引发LoadError,您可以从中进行救援.
begin
require 'a'
rescue LoadError
# The 'a' gem is not installed
require 'b'
end
我相信这是使用和测试此设置的最佳方式:
>为后端定义接口,并允许轻松插入自定义实现.
module YourGem
class << self
attr_accessor :backend
def do_something_awesome
backend.do_something_awesome
end
end
end
>实现a和b后端.
# your_gem/backends/a.rb
require 'a'
module YourGem::Backends::A
def self.do_something_awesome
# Do it
end
end
# your_gem/backends/b.rb
require 'b'
module YourGem::Backends::B
def self.do_something_awesome
# Do it
end
end
>设置您要使用的那个.
begin
require 'your_gem/backends/a'
Gem.backend = YourGem::Backends::A
rescue LoadError
require 'your_gem/backends/b'
Gem.backend = YourGem::Backends::B
end
即使安装了b,也会使用YourGem :: Backend :: A.
>在测试之前,确保安装了a和b gems,在测试代码中需要两个后端,用一个后端运行测试,然后再用另一个后端运行测试.