加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在ruby Gemfile中指定gem的可选依赖项的正确方法

发布时间:2020-12-17 02:14:46 所属栏目:百科 来源:网络整理
导读:宝石打算支持宝石a或b作为功能的替代品. 在代码中我用定义的方法检查?(A)如果我回到b那很好. 但作为宝石开发者如何指定这些依赖关系? 1)我把什么放在Gemfile中. group :development,:test do gem 'a',:require = false gem 'b',:require = falseend 这允许
宝石打算支持宝石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,在测试代码中需要两个后端,用一个后端运行测试,然后再用另一个后端运行测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读