dependz 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dependz.rb +2 -2
- data/lib/dependz/sort_depth.rb +60 -0
- metadata +4 -3
- data/lib/dependz/sort_level.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e21b5e4e8fdca0c6c7fa61925190624b2a1525cd91a98b51f24bc8fb01d21802
|
4
|
+
data.tar.gz: 56e0f76d74df8e7fea3fa77a8b581f5031efe9df235a32a28139f12246768566
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f13e19f30b940a67c2b55c338be23e687ea1bb12bc3cf1120ae8cc1eda38f74ed2daefc517c1295483599b45afe978c89fb6e412fdf4b41fdef0010d5f06a18
|
7
|
+
data.tar.gz: 1f7829d9f1c088e851e1ba25504265d6dec134ee61fade400d4173b14875292e80620489ae9202395901f5b9ebf6d6cec8a323add784fad0ed4d9c7769ffe3f2
|
data/lib/dependz.rb
CHANGED
@@ -7,7 +7,7 @@ require 'dependz/add'
|
|
7
7
|
require 'dependz/base'
|
8
8
|
require 'dependz/sort_item'
|
9
9
|
require 'dependz/list'
|
10
|
-
require 'dependz/
|
10
|
+
require 'dependz/sort_depth'
|
11
11
|
|
12
12
|
module Dependz
|
13
13
|
class Client
|
@@ -15,6 +15,6 @@ module Dependz
|
|
15
15
|
include Add
|
16
16
|
include SortItem
|
17
17
|
include List
|
18
|
-
include
|
18
|
+
include SortDepth
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rgl/traversal'
|
4
|
+
|
5
|
+
module Dependz
|
6
|
+
module SortDepth
|
7
|
+
def sort_depth
|
8
|
+
depth_of_all_item = roots
|
9
|
+
.map { |root| calculate_depth_from_root(dag, root) }
|
10
|
+
.reduce { |acc, depths| acc.merge(depths) { |_key, a, b| [a, b].max } }
|
11
|
+
|
12
|
+
format(depth_of_all_item)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def format(depth_mapping)
|
18
|
+
depth_mapping.each_with_object([]) do |item_depth, result|
|
19
|
+
item = item_depth[0]
|
20
|
+
depth = item_depth[1] - 1
|
21
|
+
|
22
|
+
if result[depth].nil?
|
23
|
+
result[depth] = [item]
|
24
|
+
else
|
25
|
+
result[depth].push(item)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def calculate_depth_from_root(dag, root)
|
31
|
+
@depth = 0
|
32
|
+
@depth_map = {}
|
33
|
+
|
34
|
+
visitor = dfs_visitor(dag)
|
35
|
+
dag.reverse.depth_first_visit(root, visitor) { |x| }
|
36
|
+
|
37
|
+
@depth_map
|
38
|
+
end
|
39
|
+
|
40
|
+
def dfs_visitor(dag)
|
41
|
+
RGL::DFSVisitor.new(dag.reverse).tap do |visitor|
|
42
|
+
visitor.set_examine_vertex_event_handler do |v|
|
43
|
+
@depth += 1
|
44
|
+
@depth_map[v] = @depth
|
45
|
+
end
|
46
|
+
|
47
|
+
visitor.set_finish_vertex_event_handler do |_v|
|
48
|
+
@depth -= 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def roots
|
54
|
+
depend_ons = list.map { |d| d[:depend_on] }.uniq
|
55
|
+
depend_bys = list.map { |d| d[:depend_by] }.uniq
|
56
|
+
|
57
|
+
depend_ons.reject { |head| depend_bys.include?(head) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rundong Gao
|
@@ -24,7 +24,8 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.5'
|
27
|
-
description:
|
27
|
+
description: A ruby gem for concurrent tasks scheduling and resolving dependencies
|
28
|
+
based on directed acyclic graphs and modified topological sorting algorithm.
|
28
29
|
email: asphinx423@gmail.com
|
29
30
|
executables: []
|
30
31
|
extensions: []
|
@@ -34,8 +35,8 @@ files:
|
|
34
35
|
- lib/dependz/add.rb
|
35
36
|
- lib/dependz/base.rb
|
36
37
|
- lib/dependz/list.rb
|
38
|
+
- lib/dependz/sort_depth.rb
|
37
39
|
- lib/dependz/sort_item.rb
|
38
|
-
- lib/dependz/sort_level.rb
|
39
40
|
homepage: https://github.com/RundongGao/depends
|
40
41
|
licenses:
|
41
42
|
- MIT
|
data/lib/dependz/sort_level.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rgl/traversal'
|
4
|
-
|
5
|
-
module Dependz
|
6
|
-
module SortLevel
|
7
|
-
def sort_level
|
8
|
-
@level_map = {}
|
9
|
-
|
10
|
-
roots(dag).each do |root|
|
11
|
-
@level = 0
|
12
|
-
visitor = dfs_visitor(dag)
|
13
|
-
dag.reverse.depth_first_visit(root, visitor) { |x| }
|
14
|
-
end
|
15
|
-
|
16
|
-
@level_map.each_with_object([]) do |item_with_level, result|
|
17
|
-
item = item_with_level[0]
|
18
|
-
level = item_with_level[1] - 1
|
19
|
-
|
20
|
-
if result[level].nil?
|
21
|
-
result[level] = [item]
|
22
|
-
else
|
23
|
-
result[level].push(item)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def dfs_visitor(dag)
|
31
|
-
RGL::DFSVisitor.new(dag.reverse).tap do |visitor|
|
32
|
-
visitor.set_examine_vertex_event_handler do |v|
|
33
|
-
@level += 1
|
34
|
-
if @level_map[v].nil?
|
35
|
-
@level_map[v] = @level
|
36
|
-
else
|
37
|
-
@level_map[v] = @level if @level_map[v] < @level
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
visitor.set_finish_vertex_event_handler do |_v|
|
42
|
-
@level -= 1
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def roots(_dag)
|
48
|
-
depend_ons = list.map { |d| d[:depend_on] }.uniq
|
49
|
-
depend_bys = list.map { |d| d[:depend_by] }.uniq
|
50
|
-
|
51
|
-
depend_ons.reject { |head| depend_bys.include?(head) }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|