vispan 0.12.0 → 0.13.0

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
  SHA1:
3
- metadata.gz: 64ba877aba744f57e64be1228296c276a5439339
4
- data.tar.gz: caa20bc5aa7d410a2b3bcd08e7fede30c59f5af9
3
+ metadata.gz: c00d545c86c8f83e10f5dbf39fadcc384271dca6
4
+ data.tar.gz: 934f4a88849dfa633e3357c58757e7266edbd6e0
5
5
  SHA512:
6
- metadata.gz: 6fedd60956c362d4922dfd40530186eb46011585fed4f30c15bbb9b9ae60423124ffbf0fb42dbc599b550a6bb7d9479d0bacc1f0bf5dc91b8492e90f8463b053
7
- data.tar.gz: c099cdd5296d6b5191d1df362ed38067dbb8938fc15354cbd3b43d0e439d6365e38e763c74c2827eea661bf577d82805fca243a4fd31bb38862fe3132fc807ed
6
+ metadata.gz: 488bca000babaa2f9382f5e051a785c9bf0c4f7e0f639c711ce66b981c46e70d70da3e879001203ac836d05b687ec9febb1c5553425502fce11c39b01313b2de
7
+ data.tar.gz: 625a53519aa63cb77692d307dbbb5860fa958420c878f6976c1e327210bafea13f4397aeab2dc2482c0eea244fd07f9ac6ed33c625875d0010a9369bc1ac7c8a
data/lib/vispan.rb CHANGED
@@ -18,6 +18,9 @@ module Vispan
18
18
  @output = files[:output]
19
19
  @szenarios = []
20
20
  separate_szenarios(files[:input])
21
+ @szenarios.each do |szenario|
22
+ szenario.assign_ranks
23
+ end
21
24
  end
22
25
 
23
26
  def separate_szenarios(input_file)
@@ -34,7 +37,6 @@ module Vispan
34
37
  @relation_lines << line
35
38
  end
36
39
  end
37
-
38
40
  @szenarios << @single_szenario
39
41
  end
40
42
 
data/lib/vispan/config.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  NODE_WIDTH = 3.3
2
2
  NODE_MARGIN = 0.2
3
3
 
4
- GENERAL_SETTINGS = {graph:{rankdir:"LR", labeljust:"l", splines:"true" },
5
- node:{color:"none", shape:"rect", style:"rounded, filled", width:"#{NODE_WIDTH}", margin:"#{NODE_MARGIN}"},
4
+ GENERAL_SETTINGS = {graph:{rankdir:"LR", labeljust:"l", splines:"true", concentrate: "true", ranksep:"2"},
5
+ node:{shape:"rect", color:"none", style:"rounded, filled", margin:"#{NODE_MARGIN}", width:"#{NODE_WIDTH}"},
6
6
  edge:{}}
7
7
 
8
8
  SZENARIO = {szenario:{bgcolor:"mintcream:lightcyan", margin:60, fontsize:18}}
@@ -10,8 +10,9 @@ SZENARIO = {szenario:{bgcolor:"mintcream:lightcyan", margin:60, fontsize:18}}
10
10
  NODE = {screen:{fillcolor:"yellowgreen:lemonchiffon"},
11
11
  email:{fillcolor:"grey:ghostwhite"},
12
12
  pdf:{fillcolor:"gold:orange"},
13
- command:{fillcolor:"lightblue:steelblue"}
13
+ command:{fillcolor:"lightblue:steelblue"},
14
+ helper:{shape:"plaintext", fillcolor:"none", width:"0.01", height:"0.01", margin:"0.15"}
14
15
  }
15
16
  RELATION = {event:{color:"red"},
16
- link:{arrowhead:"none", arrowsize:"30"}
17
+ link:{arrowsize:"0.7", style:"dashed"}
17
18
  }
@@ -3,23 +3,43 @@ require "vispan/config.rb"
3
3
  class GraphWriter
4
4
 
5
5
  def build_string(szenarios)
6
+ # puts "Digraph G{ #{get_general_settings}#{szenarios.map.with_index {|szenario, index| build_szenario(szenario, index)}.join("")}}"
6
7
  "Digraph G{ #{get_general_settings}#{szenarios.map.with_index {|szenario, index| build_szenario(szenario, index)}.join("")}}"
7
8
  end
8
9
 
9
10
  def build_szenario(szenario, index)
10
11
  node_definitions = szenario.nodes.map{|node| write_node(node)}.join("")
11
- relation_definitions = szenario.relations.map{|relation| write_relations(relation)}.join("")
12
+ relation_definitions = szenario.relations.map{|relation| write_relations(relation, szenario)}.join("")
12
13
  effect_definitions = szenario.relations.map {|relation| write_effects(relation)}.join("")
13
14
 
14
15
  "\n\nsubgraph cluster#{index.to_s} {label=\"#{szenario.title}\"#{find_attributes(szenario)};\n#{node_definitions}\n#{relation_definitions}#{effect_definitions}}"
15
16
  end
16
17
 
17
18
  def write_node(node)
19
+ # puts node.inspect
18
20
  "#{node.name} [label=\"#{node.label}\" #{find_attributes(node)}]\n"
21
+ # [label=<<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" ><TR><TD PORT=\"#{node.name}\">#{node.label}</TD></TR></TABLE>> #{find_attributes(node)}]\n"
22
+
19
23
  end
20
24
 
21
- def write_relations(relation)
22
- "#{relation.start.name} -> #{relation.stop.name} [label=\"#{relation.label}\" #{find_attributes(relation)}]\n"
25
+ def write_relations(relation, szenario)
26
+
27
+ if relation.get_direction < 0
28
+ previous_node_name = szenario.get_previous_helper_node(relation)
29
+ "#{relation.start.name}:w-> #{relation.helper.name}:e [dir=\"none\" #{find_attributes(relation)}];
30
+ #{relation.helper.name}:w -> #{relation.stop.name}:e [dir=\"forward\" #{find_attributes(relation)}];
31
+ {rank = same; #{previous_node_name}; #{relation.helper.name};}"
32
+ else
33
+ #
34
+ #
35
+ # return "#{relation.helper.name} -> #{relation.stop.name} [dir=\"forward\" #{find_attributes(relation)}];
36
+ # #{relation.start.name}-> #{relation.helper.name} [dir=\"none\" #{find_attributes(relation)}];
37
+ # {rank = same; helper_0Angebotspostenerteilen0; #{relation.helper.name};}"
38
+ # end
39
+ # puts "#{relation.start.name} #{relation.start.rank} führt zurück zu #{relation.stop.name} #{relation.stop.rank}" if relation.start.rank > relation.stop.rank
40
+ "#{relation.start.name}:e-> #{relation.helper.name}:w [dir=\"none\" #{find_attributes(relation)}];
41
+ #{relation.helper.name}:e -> #{relation.stop.name}:w [dir=\"forward\" #{find_attributes(relation)}]\n"
42
+ end
23
43
  end
24
44
 
25
45
  def write_effects(relation)
data/lib/vispan/node.rb CHANGED
@@ -1,12 +1,13 @@
1
1
  class Node
2
2
 
3
- attr_accessor :name, :type, :label
4
- NODE_TYPES = ["screen", "email", "pdf", "command"]
3
+ attr_accessor :name, :type, :label, :rank
4
+ NODE_TYPES = ["screen", "email", "pdf", "command", "helper"]
5
5
 
6
6
  def initialize(type, label, index)
7
7
  @name = transform_to_name(label, index)
8
8
  @type = NODE_TYPES.include?(type)? type : ""
9
9
  @label = label
10
+ @rank = 0
10
11
  end
11
12
 
12
13
  def transform_to_name(label, index)
@@ -1,11 +1,13 @@
1
1
  class Relation
2
- attr_accessor :start, :stop, :type, :effects, :label
2
+ attr_accessor :start, :stop, :type, :effects, :label, :helper
3
3
 
4
4
  def initialize(relation_array, index)
5
5
  @effects = []
6
6
  @label = ""
7
7
 
8
8
  extract(relation_array, index)
9
+ @helper = Node.new("helper", @label, index)
10
+ @helper.name = "helper_"+ @helper.name + @stop.name
9
11
  end
10
12
 
11
13
  def extract(relation_array, index)
@@ -42,4 +44,8 @@ class Relation
42
44
  }
43
45
  end
44
46
  end
47
+
48
+ def get_direction
49
+ @stop.rank - @start.rank
50
+ end
45
51
  end
@@ -24,8 +24,9 @@ class Szenario
24
24
  end
25
25
 
26
26
  def add_relation(relation)
27
+ add_nodes([relation.start, relation.stop, relation.helper, relation.effects])
28
+ replace_with_existing_nodes(relation, @nodes)
27
29
  @relations << relation
28
- add_nodes([relation.start, relation.stop, relation.effects])
29
30
  end
30
31
 
31
32
  def add_nodes(nodes_array)
@@ -38,4 +39,33 @@ class Szenario
38
39
  return false if szenario_node.name == node.name
39
40
  end
40
41
  end
42
+
43
+ def replace_with_existing_nodes(relation, nodes)
44
+ nodes.each do |node|
45
+ relation.start = node if relation.start.name == node.name
46
+ relation.stop = node if relation.stop.name == node.name
47
+ end
48
+ end
49
+
50
+ def assign_ranks
51
+ rank = @relations.map{|relation|
52
+
53
+ if relation.start.rank == 0
54
+ relation.start.rank = 1
55
+ relation.stop.rank = 2 unless relation.stop.rank > 0
56
+ elsif relation.stop.rank == 0
57
+ relation.stop.rank = relation.start.rank + 1
58
+ end
59
+ }
60
+ end
61
+
62
+ def get_previous_helper_node(relation2)
63
+ @relations.each do |relation|
64
+
65
+ if relation2.start.name == relation.stop.name
66
+ return relation.helper.name
67
+ end
68
+ end
69
+ end
70
+
41
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vispan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Witek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-21 00:00:00.000000000 Z
11
+ date: 2018-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler