class Gem::DependencyList + TSort
クラスの継承リスト: Gem::DependencyList < TSort < Object < Kernel < BasicObject
要約
Gem の依存関係を扱うためのクラスです。
特異メソッド
from_source_index(src_index) -> Gem::DependencyList
-
与えられた Gem::SourceIndex のインスタンスから自身を作成します。
- [PARAM] src_index:
- Gem::SourceIndex を指定します。
[SEE_ALSO] Gem::SourceIndex
インスタンスメソッド
add(*gemspecs)
-
与えられた Gem::Specification のインスタンスを自身に追加します。
- [PARAM] gemspecs:
- Gem::Specification のインスタンスを一つ以上指定します。
dependency_order -> [Gem::Specification]
-
依存する Gem の数が少ない順にソートされた Gem::Specification のリストを返します。
このことは、インストール済みの Gem を削除するときに便利です。 このメソッドで返された順にインストール済みの Gem 削除すると、 依存関係による多くの問題を回避することができます。
If there are circular dependencies (yuck!), then gems will be returned in order until only the circular dependents and anything they reference are left. Then arbitrary gemspecs will be returned until the circular dependency is broken, after which gems will be returned in dependency order again.
each_strongly_connected_component {|nodes| ...} -> nil
-
strongly_connected_components メソッドのイテレータ版です。 obj.each_strongly_connected_component は obj.strongly_connected_components.each に似ていますが、 ブロックの評価中に obj が変更された場合は予期しない結果になる ことがあります。
each_strongly_connected_component は nil を返します。
使用例
require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end non_sort = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]} non_sort.each_strongly_connected_component{|nodes| p nodes } #出力 #=> [4] #=> [2, 3] #=> [1]
each_strongly_connected_component_from(node) {|nodes| ...} -> ()
-
node から到達可能な強連結成分についてのイテレータです。
返す値は規定されていません。
each_strongly_connected_component_from は tsort_each_node を呼びません。
- [PARAM] node:
- ノードを指定します。
#例 到達可能なノードを表示する require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end non_sort = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]} non_sort.each_strongly_connected_component{|nodes| p nodes nodes.each {|node| non_sort.each_strongly_connected_component_from(node){|ns| printf("%s -> %s\n", node, ns.join(",")) } } } #出力 #=> [4] #=> 4 -> 4 #=> [2, 3] #=> 2 -> 4 #=> 2 -> 2,3 #=> 3 -> 4 #=> 3 -> 3,2 #=> [1] #=> 1 -> 4 #=> 1 -> 2,3 #=> 1 -> 1
find_name(full_name) -> Gem::Specification | nil
-
自身に含まれる与えられた名前を持つ Gem::Specification のインスタンスを返します。
見つからなかった場合は nil を返します。
- [PARAM] full_name:
- バージョンを含むフルネームで Gem の名前を指定します。
[SEE_ALSO] Gem::Specification#full_name
ok? -> bool
-
自身に含まれる全ての Gem::Specification が依存関係を満たしていれば真を返します。 そうでない場合は、偽を返します。
ok_to_remove?(full_name) -> bool
-
与えられた名前を持つ Gem::Specification を自身から削除しても OK な場合は真を返します。 そうでない場合は、偽を返します。
与えられた名前を持つ Gem::Specification を自身から削除すると、 依存関係を壊してしまう場合が、それを削除してはいけない場合です。
- [PARAM] full_name:
- バージョンを含むフルネームで Gem の名前を指定します。
[SEE_ALSO] Gem::Specification#full_name
remove_by_name(full_name) -> Gem::Specification
-
与えられた名前を持つ Gem::Specification を自身から削除します。
このメソッドでは削除後の依存関係をチェックしません。
- [PARAM] full_name:
- バージョンを含むフルネームで Gem の名前を指定します。
[SEE_ALSO] Gem::Specification#full_name, Array#delete_if
spec_predecessors -> Hash
-
[TODO] ???
Return a hash of predecessors. <tt>result[spec]</tt> is an Array of gemspecs that have a dependency satisfied by the named spec.
strongly_connected_components -> Array
-
強連結成分の集まりを配列の配列として返します。 この配列は子から親に向かってソートされています。 各要素は強連結成分を表す配列です。
require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end non_sort = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]} p non_sort.strongly_connected_components #=> [[4], [2, 3], [1]]
tsort -> Array
-
頂点をトポロジカルソートして得られる配列を返します。 この配列は子から親に向かってソートされています。 すなわち、最初の要素は子を持たず、最後の要素は親を持ちません。
閉路が存在するとき、例外TSort::Cyclicを起こします。
- [EXCEPTION] TSort::Cyclic:
- 閉路が存在するとき、発生します.
使用例
require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end sorted = {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort p sorted #=> [3, 2, 1, 4]
tsort_each {|node| ...} -> nil
-
tsort メソッドのイテレータ版です。 obj.tsort_each は obj.tsort.each と似ていますが、 ブロックの評価中に obj が変更された場合は予期しない結果になる ことがあります。
tsort_each は nil を返します。 閉路が存在するとき、例外 TSort::Cyclic を起こします。
- [EXCEPTION] TSort::Cyclic:
- 閉路が存在するとき、発生します.
使用例
require 'tsort' class Hash include TSort alias tsort_each_node each_key def tsort_each_child(node, &block) fetch(node).each(&block) end end non_sort = {1=>[2, 3], 2=>[3], 3=>[], 4=>[]} non_sort.tsort_each {|node| non_sort.tsort_each_child(node){|child| printf("%d -> %d\n", node, child) } } # 出力 #=> 2 -> 3 #=> 1 -> 2 #=> 1 -> 3
tsort_each_child(node) {|child| ...} -> ()
-
TSort で拡張されるクラスで定義されていなければならないメソッドです。
tsort_each_child is used to iterate for child nodes of node.
- [PARAM] node:
- ノードを指定します。
- [EXCEPTION] NotImplementedError:
- TSort で拡張されるクラスで定義されていない場合発生します。
tsort_each_node {|node| ...} -> ()
-
TSort で拡張されるクラスで定義されていなければならないメソッドです。
tsort_each_node is used to iterate for all nodes over a graph.
- [EXCEPTION] NotImplementedError:
- TSort で拡張されるクラスで定義されていない場合発生します。