Sha256: d624b03db508c214e778040a158ee2cf98a2890ef291d2c4786cf29ef2910f8a

Contents?: true

Size: 1.25 KB

Versions: 16

Compression:

Stored size: 1.25 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

require 'dependency_detection/version'
module DependencyDetection

  module_function
  @@items = []
  def defer(&block)
    item = Dependent.new
    item.instance_eval(&block)
    @@items << item
  end

  def detect!
    @@items.each do |item|
      if item.dependencies_satisfied?
        item.execute
      end
    end
  end

  def dependency_by_name(name)
    @@items.find {|i| i.name == name }
  end

  def installed?(name)
    item = dependency_by_name(name)
    item && item.executed
  end

  class Dependent
    attr_reader :executed
    attr_reader :name
    def executed!
      @executed = true
    end

    attr_reader :dependencies

    def initialize
      @dependencies = []
      @executes = []
    end

    def dependencies_satisfied?
      !executed and check_dependencies
    end

    def execute
      @executes.each do |x|
        x.call
      end
    ensure
      executed!
    end

    def check_dependencies
      dependencies && dependencies.all? { |d| d.call }
    end

    def depends_on
      @dependencies << Proc.new
    end

    def executes
      @executes << Proc.new
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
newrelic_rpm-3.6.4.122 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.4.113.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.3.111 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.3.106 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.3.105.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.3.104 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.3.103.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.2.96 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.2.90.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.1.88 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.1.87 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.1.86.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.1.85.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.0.83 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.0.78 vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb
newrelic_rpm-3.6.0.74.beta vendor/gems/dependency_detection-0.0.1.build/lib/dependency_detection.rb