jekyll-diagrams 0.10.0 → 0.11.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -411
  3. data/features/{blockdiag/block.feature → blockdiag_block.feature} +0 -0
  4. data/features/{graphviz/block.feature → graphviz_block.feature} +0 -0
  5. data/features/{graphviz/config.feature → graphviz_config.feature} +0 -0
  6. data/features/{mermaid/block.feature → mermaid_block.feature} +0 -0
  7. data/features/{nomnoml/block.feature → nomnoml_block.feature} +0 -0
  8. data/features/{plantuml/block.feature → plantuml_block.feature} +0 -0
  9. data/features/{smcat/block.feature → smcat_block.feature} +0 -0
  10. data/features/step_definitions/{jekyll-diagrams.rb → diagrams.rb} +0 -0
  11. data/features/support/env.rb +4 -1
  12. data/features/{syntrax/block.feature → syntrax_block.feature} +0 -0
  13. data/features/{vega/block.feature → vega_block.feature} +0 -0
  14. data/features/{wavedrom/block.feature → wavedrom_block.feature} +0 -0
  15. data/lib/jekyll-diagrams.rb +1 -38
  16. data/lib/jekyll_diagrams.rb +85 -0
  17. data/lib/jekyll_diagrams/version.rb +5 -0
  18. data/spec/{utils_spec.rb → jekyll_diagrams_spec.rb} +18 -70
  19. data/spec/spec_helper.rb +10 -8
  20. metadata +85 -129
  21. data/lib/jekyll-diagrams/basic_block.rb +0 -28
  22. data/lib/jekyll-diagrams/basic_renderer.rb +0 -38
  23. data/lib/jekyll-diagrams/blockdiag.rb +0 -12
  24. data/lib/jekyll-diagrams/blockdiag/block.rb +0 -9
  25. data/lib/jekyll-diagrams/blockdiag/renderer.rb +0 -40
  26. data/lib/jekyll-diagrams/erd.rb +0 -10
  27. data/lib/jekyll-diagrams/erd/block.rb +0 -8
  28. data/lib/jekyll-diagrams/erd/renderer.rb +0 -34
  29. data/lib/jekyll-diagrams/errors.rb +0 -24
  30. data/lib/jekyll-diagrams/graphviz.rb +0 -10
  31. data/lib/jekyll-diagrams/graphviz/block.rb +0 -8
  32. data/lib/jekyll-diagrams/graphviz/renderer.rb +0 -40
  33. data/lib/jekyll-diagrams/mermaid.rb +0 -10
  34. data/lib/jekyll-diagrams/mermaid/block.rb +0 -8
  35. data/lib/jekyll-diagrams/mermaid/renderer.rb +0 -29
  36. data/lib/jekyll-diagrams/nomnoml.rb +0 -10
  37. data/lib/jekyll-diagrams/nomnoml/block.rb +0 -8
  38. data/lib/jekyll-diagrams/nomnoml/renderer.rb +0 -19
  39. data/lib/jekyll-diagrams/plantuml.rb +0 -10
  40. data/lib/jekyll-diagrams/plantuml/block.rb +0 -8
  41. data/lib/jekyll-diagrams/plantuml/renderer.rb +0 -23
  42. data/lib/jekyll-diagrams/rendering.rb +0 -67
  43. data/lib/jekyll-diagrams/smcat.rb +0 -10
  44. data/lib/jekyll-diagrams/smcat/block.rb +0 -8
  45. data/lib/jekyll-diagrams/smcat/renderer.rb +0 -30
  46. data/lib/jekyll-diagrams/svgbob.rb +0 -10
  47. data/lib/jekyll-diagrams/svgbob/block.rb +0 -8
  48. data/lib/jekyll-diagrams/svgbob/renderer.rb +0 -25
  49. data/lib/jekyll-diagrams/syntrax.rb +0 -10
  50. data/lib/jekyll-diagrams/syntrax/block.rb +0 -8
  51. data/lib/jekyll-diagrams/syntrax/renderer.rb +0 -27
  52. data/lib/jekyll-diagrams/utils.rb +0 -85
  53. data/lib/jekyll-diagrams/vega.rb +0 -12
  54. data/lib/jekyll-diagrams/vega/block.rb +0 -9
  55. data/lib/jekyll-diagrams/vega/renderer.rb +0 -33
  56. data/lib/jekyll-diagrams/version.rb +0 -7
  57. data/lib/jekyll-diagrams/wavedrom.rb +0 -10
  58. data/lib/jekyll-diagrams/wavedrom/block.rb +0 -8
  59. data/lib/jekyll-diagrams/wavedrom/renderer.rb +0 -19
  60. data/spec/basic_block_spec.rb +0 -70
  61. data/spec/basic_renderer_spec.rb +0 -69
  62. data/spec/blockdiag_renderer_spec.rb +0 -43
  63. data/spec/erd_renderer_spec.rb +0 -43
  64. data/spec/graphviz_renderer_spec.rb +0 -19
  65. data/spec/jekyll-diagrams_spec.rb +0 -23
  66. data/spec/mermaid_renderer_spec.rb +0 -19
  67. data/spec/nomnoml_renderer_spec.rb +0 -19
  68. data/spec/plantuml_renderer_spec.rb +0 -20
  69. data/spec/rendering_spec.rb +0 -111
  70. data/spec/smcat_renderer_spec.rb +0 -19
  71. data/spec/svgbob_renderer_spec.rb +0 -27
  72. data/spec/syntrax_renderer_spec.rb +0 -19
  73. data/spec/vega_renderer_spec.rb +0 -19
  74. data/spec/wavedrom_renderer_spec.rb +0 -19
  75. data/vendor/mermaid_puppeteer_config.json +0 -3
  76. data/vendor/plantuml.1.2020.1.jar +0 -0
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class BasicBlock < Liquid::Block
6
- def self.renderer
7
- @renderer ||= const_get(renderer_name)
8
- rescue NameError => error
9
- raise Errors::RendererNotFoundError, error.message.split(' ').last
10
- end
11
-
12
- def self.renderer_name
13
- @renderer_name ||= name.sub(/Block$/, 'Renderer')
14
- end
15
-
16
- def render(context)
17
- self.class.renderer.render(
18
- context, super.to_s, {
19
- diagram_name: self.class.name.split('::').last
20
- .sub(/Block$/, '').downcase
21
- }
22
- )
23
- rescue Errors::RendererNotFoundError => error
24
- Utils.handle_error(context, error)
25
- end
26
- end
27
- end
28
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class BasicRenderer
6
- include Rendering
7
-
8
- def self.render(context, content, options = {})
9
- new(context, content, options).render
10
- end
11
-
12
- def initialize(context, content, options = {})
13
- @context = context
14
- @content = content
15
- @diagram = options.fetch(:diagram_name) do
16
- self.class.name.split('::').last.sub(/Renderer$/, '').downcase
17
- end
18
- end
19
-
20
- def render
21
- output = render_svg(@content, configuration)
22
- Utils.wrap_class(output, @diagram)
23
- rescue StandardError => error
24
- Utils.wrap_class(Utils.handle_error(@context, error), @diagram)
25
- end
26
-
27
- private
28
-
29
- def configuration
30
- Utils.config_for(@context, @diagram)
31
- end
32
-
33
- def render_svg(_code, _config)
34
- raise NotImplementedError
35
- end
36
- end
37
- end
38
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'blockdiag/renderer'
4
- require_relative 'blockdiag/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- %i[blockdiag seqdiag actdiag nwdiag rackdiag packetdiag].each do |name|
9
- Liquid::Template.register_tag(name, const_get("#{name.capitalize}Block"))
10
- end
11
- end
12
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- %i[blockdiag seqdiag actdiag nwdiag rackdiag packetdiag].each do |name|
6
- const_set "#{name.capitalize}Block", Class.new(BasicBlock)
7
- end
8
- end
9
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- %i[blockdiag seqdiag actdiag nwdiag rackdiag packetdiag].each do |name|
6
- renderer = Class.new(BasicRenderer) do
7
- const_set :CONFIGURATIONS, %w[config font fontmap size].freeze
8
- const_set :SWITCHES, {
9
- 'antialias' => false
10
- }.freeze
11
-
12
- def render_svg(code, config)
13
- command = build_command(config)
14
-
15
- render_with_tempfile(command, code) do |input, output|
16
- "#{input} -o #{output}"
17
- end
18
- end
19
-
20
- def build_command(config)
21
- command = +"#{@diagram} -T svg --nodoctype"
22
-
23
- switches = self.class.const_get(:SWITCHES)
24
-
25
- switches.merge(config.slice(*switches.keys)).each do |switch, value|
26
- command << " --#{switch}" if value != false
27
- end
28
-
29
- self.class.const_get(:CONFIGURATIONS).each do |conf|
30
- command << " --#{conf}=#{config[conf]}" if config.key?(conf)
31
- end
32
-
33
- command
34
- end
35
- end
36
-
37
- const_set "#{name.capitalize}Renderer", renderer
38
- end
39
- end
40
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'erd/renderer'
4
- require_relative 'erd/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- Liquid::Template.register_tag(:erd, ErdBlock)
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class ErdBlock < BasicBlock
6
- end
7
- end
8
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class ErdRenderer < BasicRenderer
6
- XML_REGEX = /^<\?xml(([^>]|\n)*>\n?){2}/.freeze
7
- CONFIGURATIONS = %w[config edge].freeze
8
- SWITCHES = {
9
- 'dot-entity' => false
10
- }.freeze
11
-
12
- def render_svg(code, config)
13
- command = build_command(config)
14
-
15
- svg = render_with_stdin_stdout(command, code)
16
- svg.sub!(XML_REGEX, '')
17
- end
18
-
19
- def build_command(config)
20
- command = +'erd --fmt=svg'
21
-
22
- SWITCHES.merge(config.slice(*SWITCHES.keys)).each do |switch, value|
23
- command << " --#{switch}" if value != false
24
- end
25
-
26
- CONFIGURATIONS.each do |conf|
27
- command << " --#{conf}=#{config[conf]}" if config.key?(conf)
28
- end
29
-
30
- command
31
- end
32
- end
33
- end
34
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- module Errors
6
- class BasicError < ::StandardError
7
- def initialize(val)
8
- # Jekyll::...::CommandNotFoundError -> 'CommandNotFoundError'
9
- klass = self.class.name.split('::').last
10
- # 'CommandNotFound' -> 'Command Not Found'
11
- prefix = klass.sub(/Error$/, '').split(/(?=[A-Z])/).join(' ')
12
-
13
- # "Command Not Found: raw message"
14
- super("#{prefix}: #{val}")
15
- end
16
- end
17
-
18
- CommandNotFoundError = Class.new(BasicError)
19
- RenderingFailedError = Class.new(BasicError)
20
- RendererNotFoundError = Class.new(BasicError)
21
- UnkownErrorModeError = Class.new(BasicError)
22
- end
23
- end
24
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'graphviz/renderer'
4
- require_relative 'graphviz/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- Liquid::Template.register_tag(:graphviz, GraphvizBlock)
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class GraphvizBlock < BasicBlock
6
- end
7
- end
8
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class GraphvizRenderer < BasicRenderer
6
- XML_REGEX = /^<\?xml(([^>]|\n)*>\n?){2}/.freeze
7
- CONFIGRATIONS = {
8
- 'K' => 'default_layout',
9
- 'G' => 'graph_attributes',
10
- 'N' => 'node_attributes',
11
- 'E' => 'edge_attributes'
12
- }.freeze
13
-
14
- def render_svg(code, config)
15
- command = build_command(config)
16
-
17
- svg = render_with_stdin_stdout(command, code).force_encoding(
18
- config.fetch('encoding', 'utf-8')
19
- )
20
-
21
- svg.sub!(XML_REGEX, '')
22
- end
23
-
24
- def build_command(config)
25
- command = +'dot -Tsvg'
26
-
27
- CONFIGRATIONS.each do |prefix, conf|
28
- next unless config.key?(conf)
29
-
30
- command << Utils.normalized_attrs(
31
- config[conf],
32
- prefix: " -#{prefix}"
33
- )
34
- end
35
-
36
- command
37
- end
38
- end
39
- end
40
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'mermaid/renderer'
4
- require_relative 'mermaid/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- Liquid::Template.register_tag(:mermaid, MermaidBlock)
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class MermaidBlock < BasicBlock
6
- end
7
- end
8
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class MermaidRenderer < BasicRenderer
6
- CONFIGURATIONS = %w[theme width height backgroundColor
7
- configFile cssFile scale].freeze
8
-
9
- def render_svg(code, config)
10
- command = build_command(config)
11
-
12
- render_with_tempfile(command, code) do |input, output|
13
- "--input #{input} --output #{output}"
14
- end
15
- end
16
-
17
- def build_command(config)
18
- command = +'mmdc --puppeteerConfigFile '
19
- command << Utils.vendor_path('mermaid_puppeteer_config.json')
20
-
21
- CONFIGURATIONS.each do |conf|
22
- command << " --#{conf} #{config[conf]}" if config.key?(conf)
23
- end
24
-
25
- command
26
- end
27
- end
28
- end
29
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'nomnoml/renderer'
4
- require_relative 'nomnoml/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- Liquid::Template.register_tag(:nomnoml, NomnomlBlock)
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class NomnomlBlock < BasicBlock
6
- end
7
- end
8
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class NomnomlRenderer < BasicRenderer
6
- def render_svg(code, config)
7
- command = build_command(config)
8
-
9
- render_with_tempfile(command, code) do |input, output|
10
- "#{input} #{output}"
11
- end
12
- end
13
-
14
- def build_command(_config)
15
- 'nomnoml'
16
- end
17
- end
18
- end
19
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'plantuml/renderer'
4
- require_relative 'plantuml/block'
5
-
6
- module Jekyll
7
- module Diagrams
8
- Liquid::Template.register_tag(:plantuml, PlantUMLBlock)
9
- end
10
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class PlantUMLBlock < BasicBlock
6
- end
7
- end
8
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module Diagrams
5
- class PlantUMLRenderer < BasicRenderer
6
- XML_REGEX = /^<\?xml([^>]|\n)*>\n?/.freeze
7
-
8
- def render_svg(code, config)
9
- command = build_command(config)
10
-
11
- svg = render_with_stdin_stdout(command, code)
12
- svg.sub!(XML_REGEX, '')
13
- end
14
-
15
- def build_command(_config)
16
- jar = Utils.vendor_path('plantuml.1.2020.1.jar')
17
-
18
- options = +Utils.run_jar(jar)
19
- options << ' -tsvg -pipe'
20
- end
21
- end
22
- end
23
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
- require 'tempfile'
5
- require 'tmpdir'
6
-
7
- module Jekyll
8
- module Diagrams
9
- module Rendering
10
- module_function
11
-
12
- # Render SVG with stdin and stdout
13
- #
14
- # @param command Command to run
15
- # @param content Content passed to command
16
- # @return The SVG output
17
- def render_with_stdin_stdout(command, content)
18
- render_with_command(command, :stdout, stdin_data: content)
19
- end
20
-
21
- # Render SVG with tempfile
22
- #
23
- # @param command Command to run
24
- # @param content Content passed to command
25
- # @param block Result of block will append to command
26
- # @return The SVG output
27
- def render_with_tempfile(command, content)
28
- Dir.mktmpdir('jekyll-diagrams-rendering') do |dir|
29
- input = Tempfile.new('input', tmpdir: dir)
30
- output = Tempfile.new(%w[output .svg], tmpdir: dir)
31
-
32
- File.write(input.path, content)
33
-
34
- extra = yield input.path, output.path
35
- command = "#{command} #{extra}"
36
-
37
- render_with_command(command, output.path)
38
- ensure
39
- input.close!
40
- output.close!
41
- end
42
- end
43
-
44
- # Render SVG with command
45
- #
46
- # @param command Command to run
47
- # @param output Output path, use :stdout for stdout
48
- # @param options Extra options passed to Open3.captrue3
49
- # @return The SVG output
50
- def render_with_command(command, output = :stdout, **options)
51
- begin
52
- stdout, stderr, status = Open3.capture3(command, **options)
53
- rescue Errno::ENOENT
54
- raise Errors::CommandNotFoundError, command.split(' ')[0]
55
- end
56
-
57
- unless status.success?
58
- raise Errors::RenderingFailedError, <<~MSG
59
- #{command}: #{stderr.empty? ? stdout : stderr}
60
- MSG
61
- end
62
-
63
- output == :stdout ? stdout : File.read(output)
64
- end
65
- end
66
- end
67
- end