asciidoctor-diagram 1.4.0 → 1.5.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/CHANGELOG.adoc +15 -0
- data/README.adoc +252 -95
- data/README_zh-CN.adoc +333 -0
- data/images/asciidoctor-diagram-classes.png +0 -0
- data/images/asciidoctor-diagram-process.png +0 -0
- data/lib/{asciidoctor-diagram-java-1.3.8.jar → asciidoctor-diagram-java-1.3.10.jar} +0 -0
- data/lib/asciidoctor-diagram.rb +9 -9
- data/lib/asciidoctor-diagram/blockdiag.rb +1 -2
- data/lib/asciidoctor-diagram/blockdiag/extension.rb +27 -12
- data/lib/asciidoctor-diagram/ditaa.rb +1 -2
- data/lib/asciidoctor-diagram/ditaa/extension.rb +33 -48
- data/lib/asciidoctor-diagram/extensions.rb +85 -18
- data/lib/asciidoctor-diagram/graphviz.rb +1 -2
- data/lib/asciidoctor-diagram/graphviz/extension.rb +14 -4
- data/lib/asciidoctor-diagram/meme.rb +1 -2
- data/lib/asciidoctor-diagram/meme/extension.rb +82 -79
- data/lib/asciidoctor-diagram/mermaid.rb +1 -2
- data/lib/asciidoctor-diagram/mermaid/extension.rb +33 -25
- data/lib/asciidoctor-diagram/plantuml.rb +1 -2
- data/lib/asciidoctor-diagram/plantuml/extension.rb +33 -22
- data/lib/asciidoctor-diagram/salt.rb +1 -2
- data/lib/asciidoctor-diagram/shaape.rb +1 -2
- data/lib/asciidoctor-diagram/shaape/extension.rb +10 -5
- data/lib/asciidoctor-diagram/util/cli_generator.rb +7 -5
- data/lib/asciidoctor-diagram/util/java.rb +1 -1
- data/lib/asciidoctor-diagram/util/platform.rb +12 -1
- data/lib/asciidoctor-diagram/util/which.rb +16 -7
- data/lib/asciidoctor-diagram/version.rb +1 -1
- data/lib/asciidoctor-diagram/wavedrom.rb +1 -2
- data/lib/asciidoctor-diagram/wavedrom/extension.rb +24 -20
- data/lib/plantuml.jar +0 -0
- data/spec/blockdiag_spec.rb +8 -8
- data/spec/ditaa_spec.rb +7 -7
- data/spec/graphviz_spec.rb +7 -7
- data/spec/meme_spec.rb +2 -2
- data/spec/mermaid_spec.rb +11 -11
- data/spec/plantuml_spec.rb +156 -34
- data/spec/shaape_spec.rb +8 -8
- data/spec/test_helper.rb +24 -5
- data/spec/wavedrom_spec.rb +11 -11
- metadata +6 -3
@@ -6,7 +6,7 @@ module Asciidoctor
|
|
6
6
|
module Java
|
7
7
|
def self.classpath
|
8
8
|
@classpath ||= [
|
9
|
-
File.expand_path(File.join('../..', 'asciidoctor-diagram-java-1.3.
|
9
|
+
File.expand_path(File.join('../..', 'asciidoctor-diagram-java-1.3.10.jar'), File.dirname(__FILE__))
|
10
10
|
]
|
11
11
|
end
|
12
12
|
|
@@ -12,24 +12,33 @@ module Asciidoctor
|
|
12
12
|
return exe if File.executable? exe
|
13
13
|
}
|
14
14
|
end
|
15
|
+
|
15
16
|
nil
|
16
17
|
end
|
17
18
|
|
18
19
|
def which(parent_block, cmd, options = {})
|
19
|
-
attr_names = options[
|
20
|
+
attr_names = options.fetch(:alt_attrs, []) + [cmd]
|
21
|
+
cmd_names = [cmd] + options.fetch(:alt_cmds, [])
|
20
22
|
|
21
23
|
cmd_var = '@' + attr_names[0]
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
if already_defined
|
25
|
+
if instance_variable_defined?(cmd_var)
|
26
26
|
cmd_path = instance_variable_get(cmd_var)
|
27
27
|
else
|
28
|
-
cmd_path = attr_names.map { |attr_name| parent_block.
|
29
|
-
|
28
|
+
cmd_path = attr_names.map { |attr_name| parent_block.attr(attr_name, nil, true) }.find { |attr| !attr.nil? }
|
29
|
+
|
30
|
+
unless cmd_path && File.executable?(cmd_path)
|
31
|
+
cmd_paths = cmd_names.map do |c|
|
32
|
+
::Asciidoctor::Diagram::Which.which(c, :path => options[:path])
|
33
|
+
end
|
34
|
+
|
35
|
+
cmd_path = cmd_paths.reject { |c| c.nil? }.first
|
36
|
+
end
|
37
|
+
|
30
38
|
instance_variable_set(cmd_var, cmd_path)
|
39
|
+
|
31
40
|
if cmd_path.nil? && options.fetch(:raise_on_error, true)
|
32
|
-
raise "Could not find the '#{
|
41
|
+
raise "Could not find the #{cmd_names.map { |c| "'#{c}'" }.join(', ')} executable in PATH; add it to the PATH or specify its location using the '#{attr_names[0]}' document attribute"
|
33
42
|
end
|
34
43
|
end
|
35
44
|
|
@@ -11,28 +11,32 @@ module Asciidoctor
|
|
11
11
|
|
12
12
|
def self.included(mod)
|
13
13
|
[:png, :svg].each do |f|
|
14
|
-
mod.register_format(f, :image) do |
|
15
|
-
|
16
|
-
|
14
|
+
mod.register_format(f, :image) do |parent, source|
|
15
|
+
wavedrom(parent, source, f)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
else
|
23
|
-
if ::Asciidoctor::Diagram::Platform.os == :macosx
|
24
|
-
wavedrom = which(p, 'WaveDromEditor.app', :attr_names => ['wavedrom'], :path => ['/Applications'])
|
25
|
-
if wavedrom
|
26
|
-
wavedrom = File.join(wavedrom, 'Contents/MacOS/nwjs')
|
27
|
-
end
|
28
|
-
else
|
29
|
-
wavedrom = which(p, 'WaveDromEditor', :attr_names => ['wavedrom'])
|
30
|
-
end
|
20
|
+
def wavedrom(parent, source, format)
|
21
|
+
wavedrom_cli = which(parent, 'wavedrom', :raise_on_error => false)
|
22
|
+
phantomjs = which(parent, 'phantomjs', :alt_attrs => ['phantomjs_2'], :raise_on_error => false)
|
31
23
|
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
if wavedrom_cli && !wavedrom_cli.include?('WaveDromEditor') && phantomjs
|
25
|
+
CliGenerator.generate_file(wavedrom_cli, 'wvd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
26
|
+
[phantomjs, Platform.native_path(tool_path), '-i', Platform.native_path(input_path), "-#{format.to_s[0]}", Platform.native_path(output_path)]
|
27
|
+
end
|
28
|
+
else
|
29
|
+
if ::Asciidoctor::Diagram::Platform.os == :macosx
|
30
|
+
wavedrom = which(parent, 'WaveDromEditor.app', :alt_attrs => ['wavedrom'], :path => ['/Applications'])
|
31
|
+
if wavedrom
|
32
|
+
wavedrom = File.join(wavedrom, 'Contents/MacOS/nwjs')
|
35
33
|
end
|
34
|
+
else
|
35
|
+
wavedrom = which(parent, 'WaveDromEditor', :alt_attrs => ['wavedrom'])
|
36
|
+
end
|
37
|
+
|
38
|
+
CliGenerator.generate_file(wavedrom, 'wvd', format.to_s, source.to_s) do |tool_path, input_path, output_path|
|
39
|
+
[tool_path, 'source', Platform.native_path(input_path), format.to_s, Platform.native_path(output_path)]
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
@@ -46,4 +50,4 @@ module Asciidoctor
|
|
46
50
|
include Wavedrom
|
47
51
|
end
|
48
52
|
end
|
49
|
-
end
|
53
|
+
end
|
data/lib/plantuml.jar
CHANGED
Binary file
|
data/spec/blockdiag_spec.rb
CHANGED
@@ -20,7 +20,7 @@ Doc Writer <doc@example.com>
|
|
20
20
|
blockdiag::blockdiag.txt[format="png"]
|
21
21
|
eos
|
22
22
|
|
23
|
-
d =
|
23
|
+
d = load_asciidoc doc
|
24
24
|
expect(d).to_not be_nil
|
25
25
|
|
26
26
|
b = d.find { |b| b.context == :image }
|
@@ -52,7 +52,7 @@ Doc Writer <doc@example.com>
|
|
52
52
|
----
|
53
53
|
eos
|
54
54
|
|
55
|
-
d =
|
55
|
+
d = load_asciidoc doc
|
56
56
|
expect(d).to_not be_nil
|
57
57
|
|
58
58
|
b = d.find { |b| b.context == :image }
|
@@ -82,7 +82,7 @@ Doc Writer <doc@example.com>
|
|
82
82
|
----
|
83
83
|
eos
|
84
84
|
|
85
|
-
d =
|
85
|
+
d = load_asciidoc doc
|
86
86
|
expect(d).to_not be_nil
|
87
87
|
|
88
88
|
b = d.find { |b| b.context == :image }
|
@@ -111,7 +111,7 @@ Doc Writer <doc@example.com>
|
|
111
111
|
----
|
112
112
|
eos
|
113
113
|
|
114
|
-
expect {
|
114
|
+
expect { load_asciidoc doc }.to raise_error /support.*format/i
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should not regenerate images when source has not changed" do
|
@@ -131,7 +131,7 @@ blockdiag::blockdiag.txt
|
|
131
131
|
----
|
132
132
|
eos
|
133
133
|
|
134
|
-
d =
|
134
|
+
d = load_asciidoc doc
|
135
135
|
b = d.find { |b| b.context == :image }
|
136
136
|
expect(b).to_not be_nil
|
137
137
|
target = b.attributes['target']
|
@@ -139,7 +139,7 @@ blockdiag::blockdiag.txt
|
|
139
139
|
|
140
140
|
sleep 1
|
141
141
|
|
142
|
-
d =
|
142
|
+
d = load_asciidoc doc
|
143
143
|
|
144
144
|
mtime2 = File.mtime(target)
|
145
145
|
|
@@ -159,7 +159,7 @@ blockdiag::blockdiag.txt[]
|
|
159
159
|
blockdiag::blockdiag.txt[]
|
160
160
|
eos
|
161
161
|
|
162
|
-
|
162
|
+
load_asciidoc doc
|
163
163
|
expect(File.exists?('blockdiag.png')).to be true
|
164
164
|
end
|
165
165
|
|
@@ -176,7 +176,7 @@ blockdiag::blockdiag.txt["foobar"]
|
|
176
176
|
blockdiag::blockdiag.txt["foobaz"]
|
177
177
|
eos
|
178
178
|
|
179
|
-
|
179
|
+
load_asciidoc doc
|
180
180
|
expect(File.exists?('foobar.png')).to be true
|
181
181
|
expect(File.exists?('foobaz.png')).to be true
|
182
182
|
expect(File.exists?('blockdiag.png')).to be false
|
data/spec/ditaa_spec.rb
CHANGED
@@ -25,7 +25,7 @@ Doc Writer <doc@example.com>
|
|
25
25
|
ditaa::ditaa.txt[format="png"]
|
26
26
|
eos
|
27
27
|
|
28
|
-
d =
|
28
|
+
d = load_asciidoc doc
|
29
29
|
expect(d).to_not be_nil
|
30
30
|
|
31
31
|
b = d.find { |b| b.context == :image }
|
@@ -65,7 +65,7 @@ Doc Writer <doc@example.com>
|
|
65
65
|
----
|
66
66
|
eos
|
67
67
|
|
68
|
-
d =
|
68
|
+
d = load_asciidoc doc
|
69
69
|
expect(d).to_not be_nil
|
70
70
|
|
71
71
|
b = d.find { |b| b.context == :image }
|
@@ -94,7 +94,7 @@ Doc Writer <doc@example.com>
|
|
94
94
|
----
|
95
95
|
eos
|
96
96
|
|
97
|
-
expect {
|
97
|
+
expect { load_asciidoc doc }.to raise_error /support.*format/i
|
98
98
|
end
|
99
99
|
|
100
100
|
it "should use a default format when none was given" do
|
@@ -109,7 +109,7 @@ Doc Writer <doc@example.com>
|
|
109
109
|
----
|
110
110
|
eos
|
111
111
|
|
112
|
-
d =
|
112
|
+
d = load_asciidoc doc
|
113
113
|
expect(d).to_not be_nil
|
114
114
|
|
115
115
|
b = d.find { |b| b.context == :image }
|
@@ -142,7 +142,7 @@ Doc Writer <doc@example.com>
|
|
142
142
|
----
|
143
143
|
eos
|
144
144
|
|
145
|
-
d =
|
145
|
+
d = load_asciidoc doc
|
146
146
|
expect(d).to_not be_nil
|
147
147
|
|
148
148
|
b = d.find { |b| b.context == :image }
|
@@ -173,14 +173,14 @@ Doc Writer <doc@example.com>
|
|
173
173
|
----
|
174
174
|
eos
|
175
175
|
|
176
|
-
d =
|
176
|
+
d = load_asciidoc(doc.sub('{opts}', 'shadow=false'))
|
177
177
|
b = d.find { |b| b.context == :image }
|
178
178
|
target = b.attributes['target']
|
179
179
|
mtime1 = File.mtime(target)
|
180
180
|
|
181
181
|
sleep 1
|
182
182
|
|
183
|
-
d =
|
183
|
+
d = load_asciidoc(doc.sub('{opts}', 'round-corners=true'))
|
184
184
|
|
185
185
|
mtime2 = File.mtime(target)
|
186
186
|
|
data/spec/graphviz_spec.rb
CHANGED
@@ -24,7 +24,7 @@ Doc Writer <doc@example.com>
|
|
24
24
|
graphviz::graphviz.txt[format="png"]
|
25
25
|
eos
|
26
26
|
|
27
|
-
d =
|
27
|
+
d = load_asciidoc doc
|
28
28
|
expect(d).to_not be_nil
|
29
29
|
|
30
30
|
b = d.find { |b| b.context == :image }
|
@@ -63,7 +63,7 @@ digraph foo {
|
|
63
63
|
----
|
64
64
|
eos
|
65
65
|
|
66
|
-
d =
|
66
|
+
d = load_asciidoc doc
|
67
67
|
expect(d).to_not be_nil
|
68
68
|
|
69
69
|
b = d.find { |b| b.context == :image }
|
@@ -100,7 +100,7 @@ digraph foo {
|
|
100
100
|
----
|
101
101
|
eos
|
102
102
|
|
103
|
-
d =
|
103
|
+
d = load_asciidoc doc
|
104
104
|
expect(d).to_not be_nil
|
105
105
|
|
106
106
|
b = d.find { |b| b.context == :image }
|
@@ -129,23 +129,23 @@ Doc Writer <doc@example.com>
|
|
129
129
|
----
|
130
130
|
eos
|
131
131
|
|
132
|
-
expect {
|
132
|
+
expect { load_asciidoc doc }.to raise_error /support.*format/i
|
133
133
|
end
|
134
134
|
|
135
|
-
it "should support
|
135
|
+
it "should support neato layout engine" do
|
136
136
|
doc = <<-eos
|
137
137
|
= Hello, graphviz!
|
138
138
|
Doc Writer <doc@example.com>
|
139
139
|
|
140
140
|
== First Section
|
141
141
|
|
142
|
-
[graphviz]
|
142
|
+
[graphviz, layout=neato]
|
143
143
|
----
|
144
144
|
digraph g { rankdir=LR; Text->Graphviz->Image }
|
145
145
|
----
|
146
146
|
eos
|
147
147
|
|
148
|
-
d =
|
148
|
+
d = load_asciidoc doc
|
149
149
|
expect(d).to_not be_nil
|
150
150
|
|
151
151
|
b = d.find { |b| b.context == :image }
|
data/spec/meme_spec.rb
CHANGED
@@ -16,7 +16,7 @@ Doc Writer <doc@example.com>
|
|
16
16
|
meme::man.jpg[I don't always // write unit tests, but when I do // they generate memes, format=png, options=noupcase]
|
17
17
|
eos
|
18
18
|
|
19
|
-
d =
|
19
|
+
d = load_asciidoc doc
|
20
20
|
expect(d).to_not be_nil
|
21
21
|
|
22
22
|
b = d.find { |b| b.context == :image }
|
@@ -48,7 +48,7 @@ Doc Writer <doc@example.com>
|
|
48
48
|
meme::man.jpg[I don't always // write unit tests, but when I do // they generate memes, format=gif, options=noupcase]
|
49
49
|
eos
|
50
50
|
|
51
|
-
d =
|
51
|
+
d = load_asciidoc doc
|
52
52
|
expect(d).to_not be_nil
|
53
53
|
|
54
54
|
b = d.find { |b| b.context == :image }
|
data/spec/mermaid_spec.rb
CHANGED
@@ -21,7 +21,7 @@ Doc Writer <doc@example.com>
|
|
21
21
|
mermaid::mermaid.txt[format="png"]
|
22
22
|
eos
|
23
23
|
|
24
|
-
d =
|
24
|
+
d = load_asciidoc doc
|
25
25
|
expect(d).to_not be_nil
|
26
26
|
|
27
27
|
b = d.find { |b| b.context == :image }
|
@@ -50,7 +50,7 @@ Doc Writer <doc@example.com>
|
|
50
50
|
mermaid::mermaid.txt[format="svg"]
|
51
51
|
eos
|
52
52
|
|
53
|
-
d =
|
53
|
+
d = load_asciidoc doc
|
54
54
|
expect(d).to_not be_nil
|
55
55
|
|
56
56
|
b = d.find { |b| b.context == :image }
|
@@ -82,7 +82,7 @@ Doc Writer <doc@example.com>
|
|
82
82
|
----
|
83
83
|
eos
|
84
84
|
|
85
|
-
d =
|
85
|
+
d = load_asciidoc doc
|
86
86
|
expect(d).to_not be_nil
|
87
87
|
|
88
88
|
b = d.find { |b| b.context == :image }
|
@@ -112,7 +112,7 @@ Doc Writer <doc@example.com>
|
|
112
112
|
----
|
113
113
|
eos
|
114
114
|
|
115
|
-
d =
|
115
|
+
d = load_asciidoc doc
|
116
116
|
expect(d).to_not be_nil
|
117
117
|
|
118
118
|
b = d.find { |b| b.context == :image }
|
@@ -141,7 +141,7 @@ Doc Writer <doc@example.com>
|
|
141
141
|
----
|
142
142
|
eos
|
143
143
|
|
144
|
-
expect {
|
144
|
+
expect { load_asciidoc doc }.to raise_error /support.*format/i
|
145
145
|
end
|
146
146
|
|
147
147
|
it "should not regenerate images when source has not changed" do
|
@@ -161,7 +161,7 @@ mermaid::mermaid.txt
|
|
161
161
|
----
|
162
162
|
eos
|
163
163
|
|
164
|
-
d =
|
164
|
+
d = load_asciidoc doc
|
165
165
|
b = d.find { |b| b.context == :image }
|
166
166
|
expect(b).to_not be_nil
|
167
167
|
target = b.attributes['target']
|
@@ -169,7 +169,7 @@ mermaid::mermaid.txt
|
|
169
169
|
|
170
170
|
sleep 1
|
171
171
|
|
172
|
-
d =
|
172
|
+
d = load_asciidoc doc
|
173
173
|
|
174
174
|
mtime2 = File.mtime(target)
|
175
175
|
|
@@ -189,7 +189,7 @@ mermaid::mermaid.txt[]
|
|
189
189
|
mermaid::mermaid.txt[]
|
190
190
|
eos
|
191
191
|
|
192
|
-
|
192
|
+
load_asciidoc doc
|
193
193
|
expect(File.exists?('mermaid.png')).to be true
|
194
194
|
end
|
195
195
|
|
@@ -206,7 +206,7 @@ mermaid::mermaid.txt["foobar"]
|
|
206
206
|
mermaid::mermaid.txt["foobaz"]
|
207
207
|
eos
|
208
208
|
|
209
|
-
|
209
|
+
load_asciidoc doc
|
210
210
|
expect(File.exists?('foobar.png')).to be true
|
211
211
|
expect(File.exists?('foobaz.png')).to be true
|
212
212
|
expect(File.exists?('mermaid.png')).to be false
|
@@ -244,7 +244,7 @@ mermaid::mermaid.txt["with_config", sequenceConfig="seqconfig.txt"]
|
|
244
244
|
mermaid::mermaid.txt["without_config"]
|
245
245
|
eos
|
246
246
|
|
247
|
-
|
247
|
+
load_asciidoc doc
|
248
248
|
expect(File.exists?('with_config.png')).to be true
|
249
249
|
expect(File.exists?('without_config.png')).to be true
|
250
250
|
expect(File.size('with_config.png')).to_not be File.size('without_config.png')
|
@@ -269,7 +269,7 @@ mermaid::mermaid.txt["with_width", width="700"]
|
|
269
269
|
mermaid::mermaid.txt["without_width"]
|
270
270
|
eos
|
271
271
|
|
272
|
-
|
272
|
+
load_asciidoc doc
|
273
273
|
expect(File.exists?('with_width.png')).to be true
|
274
274
|
expect(File.exists?('without_width.png')).to be true
|
275
275
|
expect(File.size('with_width.png')).to_not be File.size('without_width.png')
|
data/spec/plantuml_spec.rb
CHANGED
@@ -20,7 +20,7 @@ Doc Writer <doc@example.com>
|
|
20
20
|
plantuml::plantuml.txt[format="png"]
|
21
21
|
eos
|
22
22
|
|
23
|
-
d =
|
23
|
+
d = load_asciidoc doc
|
24
24
|
expect(d).to_not be_nil
|
25
25
|
|
26
26
|
b = d.find { |b| b.context == :image }
|
@@ -36,6 +36,72 @@ plantuml::plantuml.txt[format="png"]
|
|
36
36
|
expect(b.attributes['width']).to_not be_nil
|
37
37
|
expect(b.attributes['height']).to_not be_nil
|
38
38
|
end
|
39
|
+
|
40
|
+
it 'should support substitutions' do
|
41
|
+
code = <<-eos
|
42
|
+
class {parent-class}
|
43
|
+
class {child-class}
|
44
|
+
{parent-class} <|-- {child-class}
|
45
|
+
eos
|
46
|
+
|
47
|
+
File.write('plantuml.txt', code)
|
48
|
+
|
49
|
+
doc = <<-eos
|
50
|
+
= Hello, PlantUML!
|
51
|
+
Doc Writer <doc@example.com>
|
52
|
+
:parent-class: ParentClass
|
53
|
+
:child-class: ChildClass
|
54
|
+
|
55
|
+
== First Section
|
56
|
+
|
57
|
+
plantuml::plantuml.txt[format="svg", subs=attributes+]
|
58
|
+
eos
|
59
|
+
|
60
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
|
61
|
+
expect(d).to_not be_nil
|
62
|
+
|
63
|
+
b = d.find { |b| b.context == :image }
|
64
|
+
expect(b).to_not be_nil
|
65
|
+
|
66
|
+
target = b.attributes['target']
|
67
|
+
expect(File.exists?(target)).to be true
|
68
|
+
|
69
|
+
content = File.read(target)
|
70
|
+
expect(content).to include('ParentClass')
|
71
|
+
expect(content).to include('ChildClass')
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should resolve !include directives with relative paths' do
|
75
|
+
included = <<-eos
|
76
|
+
interface List
|
77
|
+
List : int size()
|
78
|
+
List : void clear()
|
79
|
+
eos
|
80
|
+
|
81
|
+
code = <<-eos
|
82
|
+
!include list.iuml
|
83
|
+
List <|.. ArrayList
|
84
|
+
eos
|
85
|
+
|
86
|
+
Dir.mkdir('dir')
|
87
|
+
File.write('dir/list.iuml', included)
|
88
|
+
File.write('dir/plantuml.txt', code)
|
89
|
+
|
90
|
+
doc = <<-eos
|
91
|
+
= Hello, PlantUML!
|
92
|
+
Doc Writer <doc@example.com>
|
93
|
+
:parent-class: ParentClass
|
94
|
+
:child-class: ChildClass
|
95
|
+
|
96
|
+
== First Section
|
97
|
+
|
98
|
+
plantuml::dir/plantuml.txt[format="png", subs=attributes+]
|
99
|
+
eos
|
100
|
+
|
101
|
+
load_asciidoc doc, :attributes => {'backend' => 'html5'}
|
102
|
+
|
103
|
+
# No easy way to assert this since PlantUML doesn't produce an error on file not found
|
104
|
+
end
|
39
105
|
end
|
40
106
|
|
41
107
|
describe Asciidoctor::Diagram::PlantUmlBlockProcessor do
|
@@ -55,7 +121,7 @@ User --> (Use the application) : Label
|
|
55
121
|
----
|
56
122
|
eos
|
57
123
|
|
58
|
-
d =
|
124
|
+
d = load_asciidoc doc
|
59
125
|
expect(d).to_not be_nil
|
60
126
|
|
61
127
|
b = d.find { |b| b.context == :image }
|
@@ -88,7 +154,7 @@ User --> (Use the application) : Label
|
|
88
154
|
----
|
89
155
|
eos
|
90
156
|
|
91
|
-
d =
|
157
|
+
d = load_asciidoc doc
|
92
158
|
expect(d).to_not be_nil
|
93
159
|
|
94
160
|
b = d.find { |b| b.context == :image }
|
@@ -121,7 +187,7 @@ User --> (Use the application) : Label
|
|
121
187
|
----
|
122
188
|
eos
|
123
189
|
|
124
|
-
d =
|
190
|
+
d = load_asciidoc doc
|
125
191
|
expect(d).to_not be_nil
|
126
192
|
|
127
193
|
b = d.find { |b| b.context == :literal }
|
@@ -132,7 +198,7 @@ User --> (Use the application) : Label
|
|
132
198
|
expect(b.attributes['target']).to be_nil
|
133
199
|
end
|
134
200
|
|
135
|
-
it
|
201
|
+
it 'should raise an error when when format is set to an invalid value' do
|
136
202
|
doc = <<-eos
|
137
203
|
= Hello, PlantUML!
|
138
204
|
Doc Writer <doc@example.com>
|
@@ -144,10 +210,10 @@ Doc Writer <doc@example.com>
|
|
144
210
|
----
|
145
211
|
eos
|
146
212
|
|
147
|
-
expect {
|
213
|
+
expect { load_asciidoc doc }.to raise_error /support.*format/i
|
148
214
|
end
|
149
215
|
|
150
|
-
it
|
216
|
+
it 'should use plantuml configuration when specified as a document attribute' do
|
151
217
|
doc = <<-eos
|
152
218
|
= Hello, PlantUML!
|
153
219
|
Doc Writer <doc@example.com>
|
@@ -171,7 +237,7 @@ ArrowColor #DEADBE
|
|
171
237
|
f.write config
|
172
238
|
end
|
173
239
|
|
174
|
-
d =
|
240
|
+
d = load_asciidoc doc
|
175
241
|
b = d.find { |b| b.context == :image }
|
176
242
|
|
177
243
|
target = b.attributes['target']
|
@@ -182,7 +248,7 @@ ArrowColor #DEADBE
|
|
182
248
|
expect(svg).to match /<path.*fill="#DEADBE"/
|
183
249
|
end
|
184
250
|
|
185
|
-
it
|
251
|
+
it 'should not regenerate images when source has not changed' do
|
186
252
|
code = <<-eos
|
187
253
|
User -> (Start)
|
188
254
|
User --> (Use the application) : Label
|
@@ -208,21 +274,21 @@ Foo1 -> Foo2 : To boundary
|
|
208
274
|
----
|
209
275
|
eos
|
210
276
|
|
211
|
-
d =
|
277
|
+
d = load_asciidoc doc
|
212
278
|
b = d.find { |b| b.context == :image }
|
213
279
|
target = b.attributes['target']
|
214
280
|
mtime1 = File.mtime(target)
|
215
281
|
|
216
282
|
sleep 1
|
217
283
|
|
218
|
-
d =
|
284
|
+
d = load_asciidoc doc
|
219
285
|
|
220
286
|
mtime2 = File.mtime(target)
|
221
287
|
|
222
288
|
expect(mtime2).to eq mtime1
|
223
289
|
end
|
224
290
|
|
225
|
-
it
|
291
|
+
it 'should handle two block macros with the same source' do
|
226
292
|
code = <<-eos
|
227
293
|
User -> (Start)
|
228
294
|
User --> (Use the application) : Label
|
@@ -242,11 +308,11 @@ plantuml::plantuml.txt[]
|
|
242
308
|
plantuml::plantuml.txt[]
|
243
309
|
eos
|
244
310
|
|
245
|
-
|
311
|
+
load_asciidoc doc
|
246
312
|
expect(File.exists?('plantuml.png')).to be true
|
247
313
|
end
|
248
314
|
|
249
|
-
it
|
315
|
+
it 'should respect target attribute in block macros' do
|
250
316
|
code = <<-eos
|
251
317
|
User -> (Start)
|
252
318
|
User --> (Use the application) : Label
|
@@ -266,13 +332,13 @@ plantuml::plantuml.txt["foobar"]
|
|
266
332
|
plantuml::plantuml.txt["foobaz"]
|
267
333
|
eos
|
268
334
|
|
269
|
-
|
335
|
+
load_asciidoc doc
|
270
336
|
expect(File.exists?('foobar.png')).to be true
|
271
337
|
expect(File.exists?('foobaz.png')).to be true
|
272
338
|
expect(File.exists?('plantuml.png')).to be false
|
273
339
|
end
|
274
340
|
|
275
|
-
it
|
341
|
+
it 'should respect target attribute values with relative paths in block macros' do
|
276
342
|
code = <<-eos
|
277
343
|
User -> (Start)
|
278
344
|
User --> (Use the application) : Label
|
@@ -292,13 +358,13 @@ plantuml::plantuml.txt["test/foobar"]
|
|
292
358
|
plantuml::plantuml.txt["test2/foobaz"]
|
293
359
|
eos
|
294
360
|
|
295
|
-
|
361
|
+
load_asciidoc doc
|
296
362
|
expect(File.exists?('test/foobar.png')).to be true
|
297
363
|
expect(File.exists?('test2/foobaz.png')).to be true
|
298
364
|
expect(File.exists?('plantuml.png')).to be false
|
299
365
|
end
|
300
366
|
|
301
|
-
it
|
367
|
+
it 'should write files to outdir if set' do
|
302
368
|
doc = <<-eos
|
303
369
|
= Hello, PlantUML!
|
304
370
|
Doc Writer <doc@example.com>
|
@@ -313,7 +379,7 @@ Foo1 -> Foo2 : To boundary
|
|
313
379
|
----
|
314
380
|
eos
|
315
381
|
|
316
|
-
d =
|
382
|
+
d = load_asciidoc doc, {:attributes => {'outdir' => 'foo'}}
|
317
383
|
b = d.find { |b| b.context == :image }
|
318
384
|
|
319
385
|
target = b.attributes['target']
|
@@ -322,7 +388,7 @@ Foo1 -> Foo2 : To boundary
|
|
322
388
|
expect(File.exists?(File.expand_path(target, 'foo'))).to be true
|
323
389
|
end
|
324
390
|
|
325
|
-
it
|
391
|
+
it 'should write files to imagesoutdir if set' do
|
326
392
|
doc = <<-eos
|
327
393
|
= Hello, PlantUML!
|
328
394
|
Doc Writer <doc@example.com>
|
@@ -337,7 +403,7 @@ Foo1 -> Foo2 : To boundary
|
|
337
403
|
----
|
338
404
|
eos
|
339
405
|
|
340
|
-
d =
|
406
|
+
d = load_asciidoc doc, {:attributes => {'imagesoutdir' => 'bar', 'outdir' => 'foo'}}
|
341
407
|
b = d.find { |b| b.context == :image }
|
342
408
|
|
343
409
|
target = b.attributes['target']
|
@@ -347,7 +413,7 @@ Foo1 -> Foo2 : To boundary
|
|
347
413
|
expect(File.exists?(File.expand_path(target, 'foo'))).to be false
|
348
414
|
end
|
349
415
|
|
350
|
-
it
|
416
|
+
it 'should omit width/height attributes when generating docbook' do
|
351
417
|
doc = <<-eos
|
352
418
|
= Hello, PlantUML!
|
353
419
|
Doc Writer <doc@example.com>
|
@@ -360,7 +426,7 @@ User -> (Start)
|
|
360
426
|
----
|
361
427
|
eos
|
362
428
|
|
363
|
-
d =
|
429
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'docbook5'}
|
364
430
|
expect(d).to_not be_nil
|
365
431
|
|
366
432
|
b = d.find { |b| b.context == :image }
|
@@ -373,7 +439,7 @@ User -> (Start)
|
|
373
439
|
expect(b.attributes['height']).to be_nil
|
374
440
|
end
|
375
441
|
|
376
|
-
it
|
442
|
+
it 'should support salt diagrams using salt block type' do
|
377
443
|
doc = <<-eos
|
378
444
|
= Hello, PlantUML!
|
379
445
|
Doc Writer <doc@example.com>
|
@@ -395,7 +461,7 @@ Doc Writer <doc@example.com>
|
|
395
461
|
----
|
396
462
|
eos
|
397
463
|
|
398
|
-
d =
|
464
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'docbook5'}
|
399
465
|
expect(d).to_not be_nil
|
400
466
|
|
401
467
|
b = d.find { |b| b.context == :image }
|
@@ -408,7 +474,7 @@ Doc Writer <doc@example.com>
|
|
408
474
|
expect(b.attributes['height']).to be_nil
|
409
475
|
end
|
410
476
|
|
411
|
-
it
|
477
|
+
it 'should support salt diagrams using plantuml block type' do
|
412
478
|
doc = <<-eos
|
413
479
|
= Hello, PlantUML!
|
414
480
|
Doc Writer <doc@example.com>
|
@@ -431,7 +497,7 @@ salt
|
|
431
497
|
----
|
432
498
|
eos
|
433
499
|
|
434
|
-
d =
|
500
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'docbook5'}
|
435
501
|
expect(d).to_not be_nil
|
436
502
|
|
437
503
|
b = d.find { |b| b.context == :image }
|
@@ -444,7 +510,7 @@ salt
|
|
444
510
|
expect(b.attributes['height']).to be_nil
|
445
511
|
end
|
446
512
|
|
447
|
-
it
|
513
|
+
it 'should support salt diagrams containing tree widgets' do
|
448
514
|
doc = <<-eos
|
449
515
|
= Hello, PlantUML!
|
450
516
|
Doc Writer <doc@example.com>
|
@@ -463,7 +529,7 @@ salt
|
|
463
529
|
----
|
464
530
|
eos
|
465
531
|
|
466
|
-
d =
|
532
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'docbook5'}
|
467
533
|
expect(d).to_not be_nil
|
468
534
|
|
469
535
|
b = d.find { |b| b.context == :image }
|
@@ -476,7 +542,7 @@ salt
|
|
476
542
|
expect(b.attributes['height']).to be_nil
|
477
543
|
end
|
478
544
|
|
479
|
-
it
|
545
|
+
it 'should support scaling diagrams' do
|
480
546
|
doc = <<-eos
|
481
547
|
= Hello, PlantUML!
|
482
548
|
Doc Writer <doc@example.com>
|
@@ -501,17 +567,17 @@ A -> B
|
|
501
567
|
----
|
502
568
|
eos
|
503
569
|
|
504
|
-
d =
|
570
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
|
505
571
|
unscaled_image = d.find { |b| b.context == :image }
|
506
572
|
|
507
|
-
d =
|
573
|
+
d = load_asciidoc scaled_doc, :attributes => {'backend' => 'html5'}
|
508
574
|
scaled_image = d.find { |b| b.context == :image }
|
509
575
|
|
510
576
|
expect(scaled_image.attributes['width']).to be_within(1).of(unscaled_image.attributes['width'] * 1.5)
|
511
577
|
expect(scaled_image.attributes['height']).to be_within(1).of(unscaled_image.attributes['height'] * 1.5)
|
512
578
|
end
|
513
579
|
|
514
|
-
it
|
580
|
+
it 'should handle embedded creole images correctly' do
|
515
581
|
creole_doc = <<-eos
|
516
582
|
= Hello, PlantUML!
|
517
583
|
Doc Writer <doc@example.com>
|
@@ -533,8 +599,64 @@ Doc Writer <doc@example.com>
|
|
533
599
|
----
|
534
600
|
eos
|
535
601
|
|
536
|
-
|
602
|
+
load_asciidoc creole_doc, :attributes => {'backend' => 'html5'}
|
537
603
|
|
538
604
|
# No real way to assert this since PlantUML doesn't produce an error on file not found
|
539
605
|
end
|
606
|
+
|
607
|
+
it 'should resolve !include directives with relative paths' do
|
608
|
+
included = <<-eos
|
609
|
+
interface List
|
610
|
+
List : int size()
|
611
|
+
List : void clear()
|
612
|
+
eos
|
613
|
+
|
614
|
+
Dir.mkdir('dir')
|
615
|
+
File.write('dir/list.iuml', included)
|
616
|
+
|
617
|
+
creole_doc = <<-eos
|
618
|
+
= Hello, PlantUML!
|
619
|
+
Doc Writer <doc@example.com>
|
620
|
+
|
621
|
+
== First Section
|
622
|
+
|
623
|
+
[plantuml, format="png"]
|
624
|
+
----
|
625
|
+
!include dir/List.iuml
|
626
|
+
List <|.. ArrayList
|
627
|
+
----
|
628
|
+
eos
|
629
|
+
|
630
|
+
load_asciidoc creole_doc, :attributes => {'backend' => 'html5'}
|
631
|
+
|
632
|
+
# No easy way to assert this since PlantUML doesn't produce an error on file not found
|
633
|
+
end
|
634
|
+
|
635
|
+
it 'should support substitutions' do
|
636
|
+
doc = <<-eos
|
637
|
+
= Hello, PlantUML!
|
638
|
+
:parent-class: ParentClass
|
639
|
+
:child-class: ChildClass
|
640
|
+
|
641
|
+
[plantuml,class-inheritence,svg,subs=attributes+]
|
642
|
+
....
|
643
|
+
class {parent-class}
|
644
|
+
class {child-class}
|
645
|
+
{parent-class} <|-- {child-class}
|
646
|
+
....
|
647
|
+
eos
|
648
|
+
|
649
|
+
d = load_asciidoc doc, :attributes => {'backend' => 'html5'}
|
650
|
+
expect(d).to_not be_nil
|
651
|
+
|
652
|
+
b = d.find { |b| b.context == :image }
|
653
|
+
expect(b).to_not be_nil
|
654
|
+
|
655
|
+
target = b.attributes['target']
|
656
|
+
expect(File.exists?(target)).to be true
|
657
|
+
|
658
|
+
content = File.read(target)
|
659
|
+
expect(content).to include('ParentClass')
|
660
|
+
expect(content).to include('ChildClass')
|
661
|
+
end
|
540
662
|
end
|