simple-hd-graph 0.2.0 → 0.3.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 +4 -4
- data/README.md +54 -2
- data/example.png +0 -0
- data/lib/simple-hd-graph/context.rb +12 -2
- data/lib/simple-hd-graph/parser.rb +48 -14
- data/lib/simple-hd-graph/renderer/plantuml/context.rb +19 -5
- data/lib/simple-hd-graph/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c9b0d3ded87feb7413df4ddeba6059e109be00644737ded9a4e814f8e9a1e67
|
4
|
+
data.tar.gz: 9c677cc4cd05e216464afe2b3c04ba8b321a595dedb5932292bfd5ec4dbd7c90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99df519c7c3e8927c09ed17e6b6a8dd9d0533cd7885ff59592d2da9f614ea2c2bff15d4473095f108b19bd1b045b07de3013d2a3a94b1025af878280bce6d159
|
7
|
+
data.tar.gz: 81d0c1f6c5359f88cca05d4f3beaeb6c55ce73a19cbd966c3a8086fc8553e690b77a8ad96af359a186940958b2733f187067f8df58351cb631db2738bc3f314b
|
data/README.md
CHANGED
@@ -22,9 +22,42 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
$ simple-hd-graph -f FILE
|
24
24
|
|
25
|
+
or
|
26
|
+
|
27
|
+
$ simple-hd-graph -d DIR
|
28
|
+
|
29
|
+
## Format
|
30
|
+
|
31
|
+
SimpleHdGraph was designed primarily to describe systems, its constituent resources, and their dependencies.
|
32
|
+
|
33
|
+
The two components are as follows:
|
34
|
+
|
35
|
+
* Context
|
36
|
+
* Resource
|
37
|
+
|
38
|
+
A single YAML document corresponds to a single context as below:
|
39
|
+
|
40
|
+
<pre>
|
41
|
+
<b>id</b>: name1
|
42
|
+
<b>resources</b>:
|
43
|
+
resource1:
|
44
|
+
note: memo
|
45
|
+
<b>has</b>: resource2
|
46
|
+
resource2:
|
47
|
+
note: very important
|
48
|
+
<b>depends</b>:
|
49
|
+
- name2
|
50
|
+
</pre>
|
51
|
+
|
52
|
+
features:
|
53
|
+
|
54
|
+
* Context can contain mutiple Resources
|
55
|
+
* Resource can use the `has` keyword to indicate that it owns other Resources
|
56
|
+
* Context can use the `depends` keyword to indicate its dependency on other Contexts
|
57
|
+
|
25
58
|
## Example
|
26
59
|
|
27
|
-
input
|
60
|
+
input ( streams )
|
28
61
|
|
29
62
|
```yaml
|
30
63
|
id: example1
|
@@ -41,6 +74,14 @@ resources:
|
|
41
74
|
storage:
|
42
75
|
hosting: AWS S3
|
43
76
|
region: ap-north-east1
|
77
|
+
---
|
78
|
+
id: example 2
|
79
|
+
resources:
|
80
|
+
web:
|
81
|
+
hosting: Google AppEngines
|
82
|
+
runtime: Ruby 2.6
|
83
|
+
depends:
|
84
|
+
- example1
|
44
85
|
```
|
45
86
|
|
46
87
|
output
|
@@ -63,8 +104,19 @@ rectangle "example1" as example1 {
|
|
63
104
|
example1Web -d-|> example1Admin
|
64
105
|
example1Web -d-|> example1Storage
|
65
106
|
}
|
107
|
+
rectangle "example 2" as example2 {
|
108
|
+
object "web" as example2Web {
|
109
|
+
hosting: Google AppEngines
|
110
|
+
runtime: Ruby 2.6
|
111
|
+
}
|
112
|
+
}
|
113
|
+
example2 -|> example1
|
66
114
|
```
|
67
115
|
|
116
|
+
after plantuml converted
|
117
|
+
|
118
|
+

|
119
|
+
|
68
120
|
## Development
|
69
121
|
|
70
122
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -73,4 +125,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
73
125
|
|
74
126
|
## Contributing
|
75
127
|
|
76
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/wtnabe/graph.
|
128
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/wtnabe/simple-hd-graph.
|
data/example.png
ADDED
Binary file
|
@@ -2,7 +2,7 @@ module SimpleHdGraph
|
|
2
2
|
class ContextNode < Node
|
3
3
|
required :id
|
4
4
|
|
5
|
-
attr_reader :resources, :relations
|
5
|
+
attr_reader :resources, :relations, :depends # Array
|
6
6
|
|
7
7
|
#
|
8
8
|
# @return [String]
|
@@ -20,6 +20,9 @@ module SimpleHdGraph
|
|
20
20
|
id
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
# @param resource [ResourceNode]
|
25
|
+
#
|
23
26
|
def <<(resource)
|
24
27
|
@resources ||= []
|
25
28
|
@resource_dict ||= {}
|
@@ -28,8 +31,15 @@ module SimpleHdGraph
|
|
28
31
|
end
|
29
32
|
|
30
33
|
#
|
31
|
-
#
|
34
|
+
# @param depends [Array]
|
35
|
+
#
|
36
|
+
def set_depends(depends)
|
37
|
+
@depends = depends
|
38
|
+
end
|
39
|
+
|
40
|
+
# :reek:NestedIterators, :reek:TooManyStatements
|
32
41
|
def refill_relation
|
42
|
+
@resource ||= []
|
33
43
|
@relations ||= []
|
34
44
|
@resources.each { |resource|
|
35
45
|
dependencies = resource.has
|
@@ -6,6 +6,10 @@ module SimpleHdGraph
|
|
6
6
|
#
|
7
7
|
# :reek:InstanceVaariableAssumption
|
8
8
|
class Parser
|
9
|
+
KEYWORD_ID ||= 'id'.freeze
|
10
|
+
KEYWORD_RESOURCES ||= 'resources'.freeze
|
11
|
+
KEYWORD_DEPENDS ||= 'depends'.freeze
|
12
|
+
|
9
13
|
#
|
10
14
|
# @param document [String]
|
11
15
|
#
|
@@ -17,29 +21,50 @@ module SimpleHdGraph
|
|
17
21
|
next unless node
|
18
22
|
|
19
23
|
context = nil
|
20
|
-
resources =
|
24
|
+
resources = nil
|
25
|
+
depends = nil
|
21
26
|
|
22
|
-
# :reek:NestedIterators
|
23
27
|
node.each_pair { |key, value|
|
24
|
-
|
28
|
+
case key
|
29
|
+
when KEYWORD_ID
|
25
30
|
context = ContextNode.new
|
26
31
|
context.load({ id: value })
|
27
|
-
|
28
|
-
|
32
|
+
when KEYWORD_DEPENDS
|
33
|
+
depends = value
|
34
|
+
when KEYWORD_RESOURCES
|
29
35
|
resources = value
|
30
36
|
end
|
31
37
|
}
|
32
38
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
context << rn
|
37
|
-
}
|
39
|
+
pack_depends_into_context(depends, context) if depends
|
40
|
+
pack_resources_into_context(resources, context) if resources
|
41
|
+
|
38
42
|
contexts << context
|
39
43
|
end
|
40
44
|
refill_relation(contexts)
|
45
|
+
refill_depends(contexts)
|
41
46
|
|
42
|
-
contexts
|
47
|
+
contexts.map { |context| context.freeze }.freeze
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# @param depends [Array]
|
52
|
+
# @param context [ContextNode]
|
53
|
+
#
|
54
|
+
def pack_depends_into_context(depends, context)
|
55
|
+
context.set_depends depends
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# @param resources [Array]
|
60
|
+
# @param context [ContextNode]
|
61
|
+
#
|
62
|
+
def pack_resources_into_context(resources, context)
|
63
|
+
resources.each { |key, resource|
|
64
|
+
rn = ResourceNode.new
|
65
|
+
rn.load_with_context({ id: context.id }, { key => resource })
|
66
|
+
context << rn
|
67
|
+
}
|
43
68
|
end
|
44
69
|
|
45
70
|
#
|
@@ -52,10 +77,19 @@ module SimpleHdGraph
|
|
52
77
|
end
|
53
78
|
|
54
79
|
#
|
55
|
-
# @
|
80
|
+
# @param context [Array]
|
56
81
|
#
|
57
|
-
def
|
58
|
-
|
82
|
+
def refill_depends(contexts)
|
83
|
+
contexts.map { |context|
|
84
|
+
if context.depends
|
85
|
+
regularized = context.depends.map { |dependee|
|
86
|
+
{ context.id => dependee }
|
87
|
+
}
|
88
|
+
context.set_depends regularized
|
89
|
+
else
|
90
|
+
context.set_depends []
|
91
|
+
end
|
92
|
+
}
|
59
93
|
end
|
60
94
|
end
|
61
95
|
end
|
@@ -9,19 +9,23 @@ module SimpleHdGraph
|
|
9
9
|
#
|
10
10
|
# @param node [ContextNode]
|
11
11
|
#
|
12
|
-
# :reek:FeatureEnvy
|
12
|
+
# :reek:FeatureEnvy, :reek:DuplicateMethodCall
|
13
13
|
def render(node)
|
14
14
|
resources = node.resources.map { |resource|
|
15
15
|
indent_resource(resource)
|
16
|
-
}.join
|
16
|
+
}.join if node.resources.size > 0
|
17
17
|
relations = node.relations.map { |relation|
|
18
18
|
render_relation(relation)
|
19
|
-
}.join("\n")
|
20
|
-
|
19
|
+
}.join("\n") if node.relations.size > 0
|
20
|
+
depends = node.depends.map { |depending|
|
21
|
+
render_depends(depending)
|
22
|
+
}.join("\n") if node.depends.size > 0
|
23
|
+
(<<-EOD).gsub(/^$\n/, '')
|
21
24
|
rectangle \"#{node.alias}\" as #{node.id} {
|
22
25
|
#{resources}
|
23
|
-
#{relations
|
26
|
+
#{relations}
|
24
27
|
}
|
28
|
+
#{depends}
|
25
29
|
EOD
|
26
30
|
end
|
27
31
|
|
@@ -44,6 +48,16 @@ EOD
|
|
44
48
|
depender, dependee = relation.to_a.first
|
45
49
|
" #{depender} -d-|> #{dependee}"
|
46
50
|
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# @param depending [Hash]
|
54
|
+
# @return [String]
|
55
|
+
#
|
56
|
+
# :reek:UtilityFunction
|
57
|
+
def render_depends(depending)
|
58
|
+
depender, dependee = depending.to_a.first
|
59
|
+
"#{depender} -|> #{dependee}"
|
60
|
+
end
|
47
61
|
end
|
48
62
|
end
|
49
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple-hd-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- wtnabe
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- Rakefile
|
127
127
|
- bin/console
|
128
128
|
- bin/setup
|
129
|
+
- example.png
|
129
130
|
- exe/simple-hd-graph
|
130
131
|
- lib/simple-hd-graph.rb
|
131
132
|
- lib/simple-hd-graph/command.rb
|