Class: EY::Serverside::DependencyManager

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/engineyard-serverside/dependency_manager.rb,
lib/engineyard-serverside/dependency_manager/npm.rb,
lib/engineyard-serverside/dependency_manager/base.rb,
lib/engineyard-serverside/dependency_manager/bundler.rb,
lib/engineyard-serverside/dependency_manager/composer.rb,
lib/engineyard-serverside/dependency_manager/legacy_helpers.rb

Overview

DependencyManager encapsulates any number of dependency manager objects.

If a dependency manager indicates that it has detected the required file or state in order to run, it will be included in this set.

Methods called on an instance of DependencyManager are forwarded to any or all of the detected dependency managers.

Some actions, like check and install, are forwarded to all of the dependency managers. Other methods will take the first dependency manager that returns a value.

Defined Under Namespace

Modules: LegacyHelpers Classes: Base, Bundler, Composer, Npm

Constant Summary collapse

AVAILABLE_MANAGERS =

Registry pattern be damned. Hard code it and fix it when we want to support dynamic loading. Right now we have no way to load dependency managers dynamically, so why support it?

[Bundler, Composer, Npm]

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ DependencyManager

Initialize detected dependency managers



28
29
30
# File 'lib/engineyard-serverside/dependency_manager.rb', line 28

def initialize(*args)
  @detected = AVAILABLE_MANAGERS.map { |klass| klass.new(*args) }.select { |manager| manager.detected? }
end

Instance Method Details

#checkObject

Verify application state with respect to dependency management. Warn if there is anything wrong with the dependency manager.



47
48
49
# File 'lib/engineyard-serverside/dependency_manager.rb', line 47

def check
  each { |m| m.check }
end

#detected?Boolean

Did we find any dependency managers?



41
42
43
# File 'lib/engineyard-serverside/dependency_manager.rb', line 41

def detected?
  any?
end

#each(&block) ⇒ Object



32
33
34
# File 'lib/engineyard-serverside/dependency_manager.rb', line 32

def each(&block)
  @detected.each(&block)
end

#installObject

Install dependencies for each of the dependency managers.



52
53
54
# File 'lib/engineyard-serverside/dependency_manager.rb', line 52

def install
  each { |m| m.install }
end

#rails_versionObject

Use the response from the first dependency manager that returns a rails version.



70
71
72
73
74
# File 'lib/engineyard-serverside/dependency_manager.rb', line 70

def rails_version
  version = nil
  find { |m| version = m.respond_to?(:rails_version) && m.rails_version }
  version
end

#show_ey_config_instructionsObject

If services are installed, print intructions for using ey_config if the dependency manager has a compatible version.



78
79
80
# File 'lib/engineyard-serverside/dependency_manager.rb', line 78

def show_ey_config_instructions
  each { |m| m.respond_to?(:show_ey_config_instructions) && m.show_ey_config_instructions }
end

#to_aObject



36
37
38
# File 'lib/engineyard-serverside/dependency_manager.rb', line 36

def to_a
  @detected
end

#uses_sqlite3?Boolean

Assume application is not using sqlite3 unless a dependency manager says that sqlite is loaded and likely to be the only manager.

This may have problems in the future if one manager detects sqlite but another has the primary database manager.

Hopefully this method can be removed in the future and sqlite loading can be done without interfering with other systems.



64
65
66
# File 'lib/engineyard-serverside/dependency_manager.rb', line 64

def uses_sqlite3?
  any? { |m| m.respond_to?(:uses_sqlite3?) && m.uses_sqlite3? }
end