Module: Riffer::Helpers::Dependencies
- Included in:
- Providers::Base
- Defined in:
- lib/riffer/helpers/dependencies.rb
Overview
Helper module for lazy loading gem dependencies.
Used by providers to load their required gems only when needed.
Defined Under Namespace
Classes: LoadError, VersionError
Instance Method Summary collapse
-
#depends_on(gem_name, req: true) ⇒ Object
Declares a dependency on a gem.
Instance Method Details
#depends_on(gem_name, req: true) ⇒ Object
Declares a dependency on a gem.
Verifies the gem is installed and satisfies version requirements, then requires it.
- gem_name
-
String - the gem name
- req
-
Boolean or String - true to require the gem, false to skip, or String to require a different lib
Returns true if successful.
Raises LoadError if the gem is not installed. Raises VersionError if the gem version does not satisfy requirements.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/riffer/helpers/dependencies.rb', line 25 def depends_on(gem_name, req: true) gem(gem_name) return true unless defined?(Bundler) gem_version = Gem.loaded_specs[gem_name].version gem_dependency = Bundler.load.dependencies.find { |g| g.name == gem_name } gem_requirement = gem_dependency&.requirement unless gem_requirement raise VersionError, "The #{gem_name} gem is installed but not specified in your Bundler dependencies (e.g., Gemfile)." end unless gem_requirement.satisfied_by?(gem_version) raise VersionError, "The #{gem_name} gem is installed, but version #{gem_requirement} is required. You have #{gem_version}." end lib_name = gem_name if req == true lib_name = req if req.is_a?(String) require(lib_name) if lib_name true rescue ::LoadError raise LoadError, "Could not load #{gem_name}. Please ensure that the #{gem_name} gem is installed." end |