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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba1ff616b07b924ecd59632333c81870cd3fce36f47298518680c3dd02c7813a
4
- data.tar.gz: ab5a62a85de8b63999037543f34ffb19530d45e36294ac7a1c9630ffb7de4bf9
3
+ metadata.gz: e21b5e4e8fdca0c6c7fa61925190624b2a1525cd91a98b51f24bc8fb01d21802
4
+ data.tar.gz: 56e0f76d74df8e7fea3fa77a8b581f5031efe9df235a32a28139f12246768566
5
5
  SHA512:
6
- metadata.gz: 1373b544c115690a4d486fa36ec8f589721c972e27c4fc9a1a82e152be93b2a642b6409c753db05a38ba97f83b4c346c7ab6b75869196d715a8c29cc1b51a69f
7
- data.tar.gz: 7a9595047c8a975b60acbfed1f780f6c889b6132cbd9b8dea466a5484b422e657f14e39e58fd9698be2f237cff6f84366f1d5034bdd6899cfdb7e44a63a4051f
6
+ metadata.gz: 9f13e19f30b940a67c2b55c338be23e687ea1bb12bc3cf1120ae8cc1eda38f74ed2daefc517c1295483599b45afe978c89fb6e412fdf4b41fdef0010d5f06a18
7
+ data.tar.gz: 1f7829d9f1c088e851e1ba25504265d6dec134ee61fade400d4173b14875292e80620489ae9202395901f5b9ebf6d6cec8a323add784fad0ed4d9c7769ffe3f2
@@ -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/sort_level'
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 SortLevel
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.0
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: Topoligical sorting for dependent relations
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
@@ -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