2012-03-01 2 views
1

У меня есть библиотека функций, которая упакована в виде драгоценного камня. Одна из этих функций требует использования стороннего драгоценного камня, который сам имеет длинный список зависимостей.Требуется только зависимость только по определенному вызову метода

Есть ли способ, которым я могу настроить свой драгоценный камень, чтобы пользователи могли его установить и использовать эти функции в драгоценном камне, которые не имеют зависимостей сторонних разработчиков, без жалобы на запуск?

Я хочу, чтобы исключение возникало при вызове метода с зависимостью, но пользователь должен иметь возможность использовать другие функции без ошибки времени выполнения.

Возможно ли это?

ответ

1

Вы можете разделить свои функции на модули (возможно, модули на файлы), зависящие от или не зависящие от них. в том числе модуль 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" 
0

, если вы хотите знать, как сделать это, взгляните на различные библиотеки оберток для HTTP, JSON, YAML и т.д.

хороший пример https://github.com/rubiii/httpi, где вы можете настроить один из 3 HTTP адаптеры. сами адаптеры требуют отдельных зависимостей внутри рубина.

проблема заключается в том, что конечный пользователь должен как-то знать, как установить сторонние драгоценные камни. в настоящее время невозможно реализовать необязательные зависимости в ruby ​​gemspecs.

Смежные вопросы