我有一個打包爲gem的函數庫。其中一個功能需要使用第三方gem,它本身有很長的依賴關係。僅在某些方法調用時才需要依賴關係
有沒有一種方法可以設置我的gem,以便用戶可以安裝它並在沒有運行時抱怨的情況下在沒有第三方依賴項的gem中使用這些函數?
我想調用具有依賴項的方法時引發異常,但用戶應該能夠使用其他函數而不會出現運行時錯誤。
這可能嗎?
我有一個打包爲gem的函數庫。其中一個功能需要使用第三方gem,它本身有很長的依賴關係。僅在某些方法調用時才需要依賴關係
有沒有一種方法可以設置我的gem,以便用戶可以安裝它並在沒有運行時抱怨的情況下在沒有第三方依賴項的gem中使用這些函數?
我想調用具有依賴項的方法時引發異常,但用戶應該能夠使用其他函數而不會出現運行時錯誤。
這可能嗎?
你可以將你的函數分解爲模塊(也可能是模塊),這取決於或不依賴於gem。包括GemDependent
模塊試圖要求你的寶石,如果沒有,然後重新定義所有寶石依賴函數來引發異常。
module YourFunctions
module GemDependent
def self.included(klass)
require "yourgem"
rescue LoadError
instance_methods.each do |m|
define_method(m) { raise "you need yourgem to run #{m}" }
end
end
def gem_dependent_function
end
end
include GemDependent
def no_dependent_function
end
end
include YourFunctions
gem_dependent_function
# "you need yourgem to run gem_dependent_function"
,看看對於HTTP,JSON,YAML等
各種包裝材料庫一個很好的例子是https://github.com/rubiii/httpi在這裏你可以配置3一個HTTP適配器。適配器本身需要ruby中的各個依賴項。
問題是,最終用戶需要以某種方式知道如何安裝第三方寶石。目前不可能在ruby gemspecs中實現可選的依賴關係。