123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Graph

Relationships & Source Files
Namespace Children
Classes:
Inherits: Object
Defined in: lib/bundler/graph.rb

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(env, output_file, show_version = false, show_requirements = false, output_format = "png", without = []) ⇒ Graph

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 8

def initialize(env, output_file, show_version = false, show_requirements = false, output_format = "png", without = [])
  @env               = env
  @output_file       = output_file
  @show_version      = show_version
  @show_requirements = show_requirements
  @output_format     = output_format
  @without_groups    = without.map(&:to_sym)

  @groups            = []
  @relations         = Hash.new {|h, k| h[k] = Set.new }
  @node_options      = {}
  @edge_options      = {}

  _populate_relations
end

Instance Attribute Details

#edge_options (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

#groups (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

#node_options (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

#output_file (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

#output_format (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

#relations (readonly)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 24

attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

Instance Method Details

#_groups (private)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 52

def _groups
  relations = Hash.new {|h, k| h[k] = Set.new }
  @env.current_dependencies.each do |dependency|
    dependency.groups.each do |group|
      next if @without_groups.include?(group)

      relations[group.to_s].add(dependency)
      @relations[group.to_s].add(dependency.name)

      @node_options[group.to_s] ||= _make_label(group, :node)
      @edge_options["#{group}_#{dependency.name}"] = _make_label(dependency, :edge)
    end
  end
  @groups = relations.keys
  relations
end

#_make_label(symbol_or_string_or_dependency, element_type) (private)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 69

def _make_label(symbol_or_string_or_dependency, element_type)
  case element_type.to_sym
  when :node
    if symbol_or_string_or_dependency.is_a?(Gem::Dependency)
      label = symbol_or_string_or_dependency.name.dup
      label << "\n#{spec_for_dependency(symbol_or_string_or_dependency).version}" if @show_version
    else
      label = symbol_or_string_or_dependency.to_s
    end
  when :edge
    label = nil
    if symbol_or_string_or_dependency.respond_to?(:requirements_list) && @show_requirements
      tmp = symbol_or_string_or_dependency.requirements_list.join(", ")
      label = tmp if tmp != ">= 0"
    end
  else
    raise ArgumentError, "2nd argument is invalid"
  end
  label.nil? ? {} : { :label => label }
end

#_populate_relations (private)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 32

def _populate_relations
  parent_dependencies = _groups.values.to_set.flatten
  loop do
    break if parent_dependencies.empty?

    tmp = Set.new
    parent_dependencies.each do |dependency|
      child_dependencies = spec_for_dependency(dependency).runtime_dependencies.to_set
      @relations[dependency.name] += child_dependencies.map(&:name).to_set
      tmp += child_dependencies

      @node_options[dependency.name] = _make_label(dependency, :node)
      child_dependencies.each do |c_dependency|
        @edge_options["#{dependency.name}_#{c_dependency.name}"] = _make_label(c_dependency, :edge)
      end
    end
    parent_dependencies = tmp
  end
end

#spec_for_dependency(dependency) (private)

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 90

def spec_for_dependency(dependency)
  @env.requested_specs.find {|s| s.name == dependency.name }
end

#viz

[ GitHub ]

  
# File 'lib/bundler/graph.rb', line 26

def viz
  GraphVizClient.new(self).run
end