Sha256: 3252b326b8c6571ed919e7aa8723956d902cb1dda9f820bb68d1486e45790c1e

Contents?: true

Size: 2 KB

Versions: 19

Compression:

Stored size: 2 KB

Contents

module Cxxproject
  module HasDependencies

    def dependencies
      @dependencies ||= []
    end

    def helper_dependencies
      @helper_dependencies ||= []
    end

   def set_dependencies(deps)
      @dependencies = deps.map { |dep| dep.instance_of?(String) ? dep : dep.name }
      self
    end

    def set_helper_dependencies(deps)
      @helper_dependencies = deps.map { |dep| dep.instance_of?(String) ? dep : dep.name }
      self
    end

    def direct_deps
      return @direct_deps if @direct_deps

      @all_dependencies_set = Set.new
      @all_dependencies_set << self
      @all_dependencies = [self]

      depList = helper_dependencies.length > 0 ? helper_dependencies : dependencies

      depList.each do |d|
        bb = ALL_BUILDING_BLOCKS[d]
        if not bb
          raise "Error: while reading config file for #{self.name}: dependent building block \"#{d}\" was specified but not found!"
        end
        next if @all_dependencies_set.include?bb

        @all_dependencies << bb
        @all_dependencies_set << bb

        # deps in modules may be splitted into its contents
        if ModuleBuildingBlock === bb
          bb.contents.each do |c|
            next if @all_dependencies_set.include?c
            @all_dependencies << c
            @all_dependencies_set << c
          end
        end

      end

      @direct_deps = @all_dependencies.dup
      @direct_deps
    end

    def all_dependencies()
      return @all_dependencies if @all_deps_calculated

      direct_deps.each do |d|
        d.all_dependencies_recursive(@all_dependencies, @all_dependencies_set)
      end

      @all_deps_calculated = true
      @all_dependencies
    end

    def all_dependencies_recursive(all_deps, all_deps_set)
      deps = [] # needed to keep order

      direct_deps.each do |d|
        next if all_deps_set.include?d
        all_deps << d
        all_deps_set << d
        deps << d
      end

      deps.each do |d|
        d.all_dependencies_recursive(all_deps, all_deps_set)
      end
    end

  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
cxxproject-0.6.26 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.25 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.24 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.23 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.21 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.18 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.17 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.14 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.12 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.13 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.11 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.10 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.9 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.6 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.5 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.4 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.2 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.1 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb
cxxproject-0.6.0 lib/cxxproject/buildingblocks/has_dependencies_mixin.rb