On this page
class Bundler::Graph
Constants
- GRAPH_NAME
Attributes
edge_options[R]
groups[R]
node_options[R]
output_file[R]
output_format[R]
relations[R]
Public Class Methods
new(env, output_file, show_version = false, show_requirements = false, output_format = "png", without = []) Show source
# 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
Public Instance Methods
# File lib/bundler/graph.rb, line 26
def viz
GraphVizClient.new(self).run
end
Private Instance Methods
# 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
# 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
# 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
# File lib/bundler/graph.rb, line 90
def spec_for_dependency(dependency)
@env.requested_specs.find {|s| s.name == dependency.name }
end
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.