Module: Listen::DependencyManager
- Included in:
- Adapters::BSD, Adapters::Darwin, Adapters::Linux, Adapters::Polling, Adapters::Windows
- Defined in:
- lib/listen/dependency_manager.rb
Overview
The dependency-manager offers a simple DSL which allows classes to declare their gem dependencies and load them when needed. It raises a user-friendly exception when the dependencies can’t be loaded which has the install command in the message.
Defined Under Namespace
Classes: Dependency, Error
Constant Summary collapse
- GEM_LOAD_MESSAGE =
<<-EOS.gsub(/^ {6}/, '') Missing dependency '%s' (version '%s')! EOS
- GEM_INSTALL_COMMAND =
<<-EOS.gsub(/^ {6}/, '') Please run the following to satisfy the dependency: gem install --version '%s' %s EOS
- BUNDLER_DECLARE_GEM =
<<-EOS.gsub(/^ {6}/, '') Please add the following to your Gemfile to satisfy the dependency: gem '%s', '%s' EOS
Class Method Summary collapse
-
.add_loaded(dependency) ⇒ Object
Adds a loaded dependency to a list so that it doesn’t have to be loaded again by another classes.
-
.already_loaded?(dependency) ⇒ Boolean
Returns whether the dependency is alread loaded or not.
-
.clear_loaded ⇒ Object
Clears the list of loaded dependencies.
-
.extended(base) ⇒ Object
Initializes the extended class.
Instance Method Summary collapse
-
#dependencies_loaded? ⇒ Boolean
Returns whether all the dependencies has been loaded or not.
-
#dependency(name, version) ⇒ Object
Registers a new dependency.
-
#load_depenencies ⇒ Object
Loads the registered dependencies.
Class Method Details
.add_loaded(dependency) ⇒ Object
Adds a loaded dependency to a list so that it doesn’t have to be loaded again by another classes.
53 54 55 |
# File 'lib/listen/dependency_manager.rb', line 53 def add_loaded(dependency) @_loaded_dependencies << dependency end |
.already_loaded?(dependency) ⇒ Boolean
Returns whether the dependency is alread loaded or not.
62 63 64 |
# File 'lib/listen/dependency_manager.rb', line 62 def already_loaded?(dependency) @_loaded_dependencies.include?(dependency) end |
.clear_loaded ⇒ Object
Clears the list of loaded dependencies.
68 69 70 |
# File 'lib/listen/dependency_manager.rb', line 68 def clear_loaded @_loaded_dependencies.clear end |
.extended(base) ⇒ Object
Initializes the extended class.
42 43 44 45 46 |
# File 'lib/listen/dependency_manager.rb', line 42 def extended(base) base.class_eval do @_dependencies = Set.new end end |
Instance Method Details
#dependencies_loaded? ⇒ Boolean
Returns whether all the dependencies has been loaded or not.
112 113 114 |
# File 'lib/listen/dependency_manager.rb', line 112 def dependencies_loaded? @_dependencies.empty? end |
#dependency(name, version) ⇒ Object
Registers a new dependency.
78 79 80 |
# File 'lib/listen/dependency_manager.rb', line 78 def dependency(name, version) @_dependencies << Dependency.new(name, version) end |
#load_depenencies ⇒ Object
Loads the registered dependencies.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/listen/dependency_manager.rb', line 86 def load_depenencies @_dependencies.each do |dependency| begin next if DependencyManager.already_loaded?(dependency) gem(dependency.name, dependency.version) require(dependency.name) DependencyManager.add_loaded(dependency) @_dependencies.delete(dependency) rescue Gem::LoadError args = [dependency.name, dependency.version] command = if running_under_bundler? BUNDLER_DECLARE_GEM % args else GEM_INSTALL_COMMAND % args.reverse end = GEM_LOAD_MESSAGE % args raise Error.new( + command) end end end |