liquid-diagrams 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -4
- data/lib/liquid_diagrams/basic_block.rb +31 -19
- data/lib/liquid_diagrams/basic_renderer.rb +1 -2
- data/lib/liquid_diagrams/renderers/blockdiag_renderer.rb +3 -11
- data/lib/liquid_diagrams/renderers/plantuml_renderer.rb +1 -1
- data/lib/liquid_diagrams/renderers/smcat_renderer.rb +1 -1
- data/lib/liquid_diagrams/renderers/vega_renderer.rb +21 -13
- data/lib/liquid_diagrams/version.rb +1 -1
- data/spec/liquid_diagrams/basic_block_spec.rb +17 -10
- data/spec/liquid_diagrams/renderers/plantuml_renderer_spec.rb +1 -1
- data/spec/liquid_diagrams/renderers/smcat_renderer_spec.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df588bcd7fd4a7aaa39d7b84616886346cd3ef33e9e731eda9eca167f6e4e546
|
4
|
+
data.tar.gz: b14f75ad3612cf7438acd839f91530e82197e09c8ae55e8a0c049c7edf78603a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06152201c6a73f2198737ddb543a2fa7ad6a04f583569de17273658e5c3a270f33d3cc1bfb55660afcbf05b1ad43c64ca32916607b03229efb90d39a9cf9e96c
|
7
|
+
data.tar.gz: ea18e10f7b712012f179759d6baa0bab4c73471539ee4580927e75173cb3e14730414d7930b4d1de3bcbb32b4c41c993c05d049fc6e0f39145401530ee1a5e42
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ Liquid Diagrams is a liquid plugins for creating diagrams, it is inspired by [as
|
|
26
26
|
- [Usage](#usage)
|
27
27
|
- [List of diagrams](#list-of-diagrams)
|
28
28
|
- [Register diagrams](#register-diagrams)
|
29
|
-
- [
|
29
|
+
- [Use diagrams tag](#use-diagrams-tag)
|
30
30
|
- [Configurations](#configurations)
|
31
31
|
- [Contributing](#contributing)
|
32
32
|
- [License](#license)
|
@@ -90,7 +90,7 @@ LiquidDiagrams.registered_diagrams
|
|
90
90
|
LiquidDiagrams.register_diagrams(LiquidDiagrams.diagrams)
|
91
91
|
```
|
92
92
|
|
93
|
-
###
|
93
|
+
### Use diagrams tag
|
94
94
|
|
95
95
|
```ruby
|
96
96
|
content = <<~CONTENT
|
@@ -107,9 +107,33 @@ template.render
|
|
107
107
|
# => "<svg ...>...</svg>"
|
108
108
|
```
|
109
109
|
|
110
|
-
## Configurations
|
110
|
+
## Dependencies and Configurations
|
111
111
|
|
112
|
-
|
112
|
+
Configurations can be set for each diagrams when parse content, e.g.:
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
content = <<~CONTENT
|
116
|
+
{% blockdiag %}
|
117
|
+
blockdiag {
|
118
|
+
A -> B -> C -> D;
|
119
|
+
A -> E -> F -> G;
|
120
|
+
}
|
121
|
+
{% endblockdiag %}
|
122
|
+
CONTENT
|
123
|
+
|
124
|
+
options = {
|
125
|
+
blockdiag: {
|
126
|
+
'scale' => 3
|
127
|
+
}
|
128
|
+
# options for other diagrams
|
129
|
+
}
|
130
|
+
|
131
|
+
template = Liquid::Template.parse(content, liquid_diagrams: options)
|
132
|
+
template.render
|
133
|
+
# => "<svg ...>...</svg>"
|
134
|
+
```
|
135
|
+
|
136
|
+
See [Configurations](CONFIGURATIONS.md)
|
113
137
|
|
114
138
|
## Contributing
|
115
139
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module LiquidDiagrams
|
4
|
-
# @abstract Subclass and override {#
|
4
|
+
# @abstract Subclass and override {#render_with_rescue} or
|
5
|
+
# {#render_without_rescue} to implement
|
5
6
|
class BasicBlock < ::Liquid::Block
|
6
7
|
# Return the renderer class matching the block
|
7
8
|
#
|
@@ -14,36 +15,47 @@ module LiquidDiagrams
|
|
14
15
|
)
|
15
16
|
end
|
16
17
|
|
17
|
-
#
|
18
|
-
#
|
19
|
-
# @param context [Liquid::Context]
|
20
|
-
#
|
21
|
-
# @return String
|
18
|
+
# @note Do not overwite this method, overwrite {#render_with_rescue} or
|
19
|
+
# {#render_without_recue} instead
|
22
20
|
def render(context)
|
23
21
|
@content = super.to_s
|
22
|
+
@context = context
|
24
23
|
|
25
|
-
|
26
|
-
rescue Errors::BasicError => error
|
27
|
-
error
|
24
|
+
render_with_rescue
|
28
25
|
end
|
29
26
|
|
30
|
-
# Render
|
27
|
+
# Render diagram with error rescued
|
31
28
|
#
|
32
|
-
# @
|
33
|
-
|
34
|
-
|
29
|
+
# @return [String]
|
30
|
+
def render_with_rescue
|
31
|
+
render_without_rescue
|
32
|
+
rescue Errors::BasicError => error
|
33
|
+
handle_error(error)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Render diagram without error rescued
|
35
37
|
#
|
36
|
-
# @
|
38
|
+
# @return [String]
|
37
39
|
#
|
38
|
-
#
|
39
|
-
|
40
|
+
# @raise [NameError] @see {.renderer}
|
41
|
+
# @raise [Errors::BasicError] if rendering failed
|
42
|
+
def render_without_rescue
|
40
43
|
self.class.renderer.render(@content, config)
|
41
44
|
end
|
42
|
-
# rubocop:enable Lint/UnusedMethodArgument
|
43
45
|
|
46
|
+
def handle_error(error)
|
47
|
+
error
|
48
|
+
end
|
49
|
+
|
50
|
+
# Read block config from parse context
|
51
|
+
#
|
52
|
+
# @return [Hash]
|
44
53
|
def config
|
45
|
-
|
46
|
-
|
54
|
+
opts = options[:liquid_diagrams] || options['liquid_diagrams'] || {}
|
55
|
+
|
56
|
+
opts.fetch block_name.to_sym do
|
57
|
+
opts.fetch(block_name.to_s, {})
|
58
|
+
end
|
47
59
|
end
|
48
60
|
end
|
49
61
|
end
|
@@ -2,12 +2,7 @@
|
|
2
2
|
|
3
3
|
module LiquidDiagrams
|
4
4
|
module Renderers
|
5
|
-
%i[
|
6
|
-
Seqdiag
|
7
|
-
Actdiag
|
8
|
-
Nwdiag
|
9
|
-
Rackdiag
|
10
|
-
Packetdiag ].each do |diagram|
|
5
|
+
%i[Blockdiag Seqdiag Actdiag Nwdiag Rackdiag Packetdiag].each do |diagram|
|
11
6
|
renderer = Class.new(BasicRenderer) do
|
12
7
|
const_set :OPTIONS, %w[
|
13
8
|
config
|
@@ -29,14 +24,11 @@ module LiquidDiagrams
|
|
29
24
|
define_method :build_command do
|
30
25
|
command = +"#{diagram.downcase} -T svg --nodoctype"
|
31
26
|
|
32
|
-
|
33
|
-
switches = self.class.const_get(:SWITCHES)
|
34
|
-
|
35
|
-
@config.slice(*options).each do |opt, value|
|
27
|
+
@config.slice(*self.class.const_get(:OPTIONS)).each do |opt, value|
|
36
28
|
command << " --#{opt}=#{value}"
|
37
29
|
end
|
38
30
|
|
39
|
-
Utils.merge(
|
31
|
+
Utils.merge(self.class.const_get(:SWITCHES), @config).each do |swc, value|
|
40
32
|
command << " --#{swc}" if value
|
41
33
|
end
|
42
34
|
|
@@ -2,24 +2,32 @@
|
|
2
2
|
|
3
3
|
module LiquidDiagrams
|
4
4
|
module Renderers
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
%i[Vega Vegalite].each do |diagram|
|
6
|
+
renderer = Class.new(BasicRenderer) do
|
7
|
+
const_set :OPTIONS, %w[
|
8
|
+
scale
|
9
|
+
].freeze
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def build_command
|
15
|
-
command = +'vg2svg'
|
11
|
+
define_method :render do
|
12
|
+
if diagram.downcase == 'vegalite'
|
13
|
+
@content = Rendering.render_with_stdin_stdout('vl2vg', @content)
|
14
|
+
end
|
16
15
|
|
17
|
-
|
18
|
-
command << " --#{opt} #{value}"
|
16
|
+
Rendering.render_with_stdin_stdout(build_command, @content)
|
19
17
|
end
|
20
18
|
|
21
|
-
|
19
|
+
def build_command
|
20
|
+
command = +'vg2svg'
|
21
|
+
|
22
|
+
@config.slice(*self.class.const_get(:OPTIONS)).each do |opt, value|
|
23
|
+
command << " --#{opt} #{value}"
|
24
|
+
end
|
25
|
+
|
26
|
+
command
|
27
|
+
end
|
22
28
|
end
|
29
|
+
|
30
|
+
const_set("#{diagram}Renderer", renderer)
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
@@ -22,28 +22,35 @@ RSpec.describe LiquidDiagrams::BasicBlock do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '#render' do
|
25
|
-
it 'call #
|
26
|
-
allow(block).to receive(:
|
25
|
+
it 'call #render_with_rescue' do
|
26
|
+
allow(block).to receive(:render_with_rescue).and_return 'success'
|
27
27
|
|
28
28
|
expect(block.render(Liquid::Context.new)).to eq 'success'
|
29
29
|
end
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
describe '#render_with_rescue' do
|
33
|
+
it 'call #render_without_rescue' do
|
34
|
+
allow(block).to receive(:render_without_rescue).and_return 'success'
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
+
expect(block.render(Liquid::Context.new)).to eq 'success'
|
37
|
+
end
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
it 'rescue and handle the error' do
|
40
|
+
allow(block).to receive(:render_without_rescue).and_raise(
|
41
|
+
LiquidDiagrams::Errors::BasicError.new
|
42
|
+
)
|
43
|
+
allow(block).to receive(:handle_error).and_return 'ok'
|
44
|
+
|
45
|
+
expect(block.render(Liquid::Context.new)).to eq 'ok'
|
39
46
|
end
|
40
47
|
end
|
41
48
|
|
42
|
-
describe '#
|
49
|
+
describe '#render_without_rescue' do
|
43
50
|
it 'render with renderer' do
|
44
51
|
allow(TestRenderer).to receive(:render).and_return 'success'
|
45
52
|
|
46
|
-
expect(block.render
|
53
|
+
expect(block.render(Liquid::Context.new)).to eq 'success'
|
47
54
|
end
|
48
55
|
end
|
49
56
|
end
|
@@ -11,7 +11,7 @@ RSpec.describe LiquidDiagrams::Renderers::SmcatRenderer do
|
|
11
11
|
|
12
12
|
describe '#build_command' do
|
13
13
|
context 'when config is empty' do
|
14
|
-
it { expect(renderer.build_command).to eq '
|
14
|
+
it { expect(renderer.build_command).to eq 'smcat' }
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'when config is not empty' do
|