module Polisher::VersionedDependencies

Mixin included in components that contain lists of dependencies which include version information

Requires module define ‘deps’ method which returns list of gem names representing component dependencies. List will be iterated over, versions will be looked up recursively and returned

Public Instance Methods

dependencies_satisfied?() click to toggle source

Return bool indicating if all dependencies are satisfied

# File lib/polisher/mixins/versioned_dependencies.rb, line 72
def dependencies_satisfied?
  missing_dependencies.empty?
end
dependency_for(name) click to toggle source

Return specified dependency

# File lib/polisher/mixins/versioned_dependencies.rb, line 16
def dependency_for(name)
  deps.detect { |dep| dep.name == name }
end
dependency_states() click to toggle source

Return list of states which gem dependencies are in

# File lib/polisher/mixins/versioned_dependencies.rb, line 77
def dependency_states
  states = {}
  deps.each do |dep|
    gem = Polisher::Gem.new :name => dep.name
    states.merge dep.name => gem.state(:check => dep)
  end
  states
end
dependency_tree(args = {}) { |self, dep, resolved| ... } click to toggle source

Return mapping of gems to dependency versions

# File lib/polisher/mixins/versioned_dependencies.rb, line 32
def dependency_tree(args = {}, &bl)
  dependencies = {}
  args = {:recursive    => true,
          :dev_deps     => true,
          :matching     => :latest,
          :dependencies => dependencies}.merge(args)

  process = []
  deps.each do |dep|
    resolved = nil
    begin
      resolved = Polisher::Gem.matching(dep, args[:matching])
    rescue
    end
    yield self, dep, resolved
    process << resolved unless resolved.nil?
  end

  process.each { |dep|
    dependencies.merge!(dep.dependency_tree(args, &bl))
  }

  dependencies
end
dependency_versions(args = {}, &bl) click to toggle source

Return list of versions of dependencies of component.

# File lib/polisher/mixins/versioned_dependencies.rb, line 21
def dependency_versions(args = {}, &bl)
  versions = {}
  args = {:recursive => true, :dev_deps  => true, :versions => versions}.merge(args)
  deps.each do |dep|
    gem = Polisher::Gem.retrieve(dep.name)
    versions.merge!(gem.versions(args, &bl))
  end
  versions
end
missing_dependencies() click to toggle source

Return missing dependencies

# File lib/polisher/mixins/versioned_dependencies.rb, line 58
def missing_dependencies
  missing = []
  dependency_versions(:recursive => false).each do |pkg, target_versions|
    found = false
    target_versions.each do |_target, versions|
      dependency = dependency_for(pkg)
      found = versions.any? { |version| dependency.match?(pkg, version) }
    end
    missing << pkg unless found
  end
  missing
end