jekyll-diagrams 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/features/{blockdiag.feature → blockdiag/block.feature} +2 -2
  3. data/features/graphviz/block.feature +26 -0
  4. data/features/{graphviz.feature → graphviz/config.feature} +18 -31
  5. data/features/{mermaid.feature → mermaid/block.feature} +2 -2
  6. data/features/{nomnoml.feature → nomnoml/block.feature} +2 -2
  7. data/features/{plantuml.feature → plantuml/block.feature} +3 -12
  8. data/features/{smcat.feature → smcat/block.feature} +3 -3
  9. data/features/step_definitions/jekyll-diagrams.rb +5 -5
  10. data/features/support/env.rb +3 -9
  11. data/features/{syntrax.feature → syntrax/block.feature} +2 -2
  12. data/features/{vega.feature → vega/block.feature} +3 -3
  13. data/features/{wavedrom.feature → wavedrom/block.feature} +2 -2
  14. data/lib/jekyll-diagrams.rb +22 -61
  15. data/lib/jekyll-diagrams/basic_block.rb +28 -0
  16. data/lib/jekyll-diagrams/basic_renderer.rb +38 -0
  17. data/lib/jekyll-diagrams/blockdiag.rb +5 -31
  18. data/lib/jekyll-diagrams/blockdiag/block.rb +9 -0
  19. data/lib/jekyll-diagrams/blockdiag/renderer.rb +40 -0
  20. data/lib/jekyll-diagrams/erd.rb +4 -30
  21. data/lib/jekyll-diagrams/erd/block.rb +8 -0
  22. data/lib/jekyll-diagrams/erd/renderer.rb +34 -0
  23. data/lib/jekyll-diagrams/errors.rb +12 -13
  24. data/lib/jekyll-diagrams/graphviz.rb +4 -34
  25. data/lib/jekyll-diagrams/graphviz/block.rb +8 -0
  26. data/lib/jekyll-diagrams/graphviz/renderer.rb +40 -0
  27. data/lib/jekyll-diagrams/mermaid.rb +4 -25
  28. data/lib/jekyll-diagrams/mermaid/block.rb +8 -0
  29. data/lib/jekyll-diagrams/mermaid/renderer.rb +29 -0
  30. data/lib/jekyll-diagrams/nomnoml.rb +4 -15
  31. data/lib/jekyll-diagrams/nomnoml/block.rb +8 -0
  32. data/lib/jekyll-diagrams/nomnoml/renderer.rb +19 -0
  33. data/lib/jekyll-diagrams/plantuml.rb +4 -19
  34. data/lib/jekyll-diagrams/plantuml/block.rb +8 -0
  35. data/lib/jekyll-diagrams/plantuml/renderer.rb +23 -0
  36. data/lib/jekyll-diagrams/smcat.rb +4 -26
  37. data/lib/jekyll-diagrams/smcat/block.rb +8 -0
  38. data/lib/jekyll-diagrams/smcat/renderer.rb +30 -0
  39. data/lib/jekyll-diagrams/svgbob.rb +4 -21
  40. data/lib/jekyll-diagrams/svgbob/block.rb +8 -0
  41. data/lib/jekyll-diagrams/svgbob/renderer.rb +25 -0
  42. data/lib/jekyll-diagrams/syntrax.rb +4 -23
  43. data/lib/jekyll-diagrams/syntrax/block.rb +8 -0
  44. data/lib/jekyll-diagrams/syntrax/renderer.rb +27 -0
  45. data/lib/jekyll-diagrams/utils.rb +85 -0
  46. data/lib/jekyll-diagrams/vega.rb +5 -26
  47. data/lib/jekyll-diagrams/vega/block.rb +9 -0
  48. data/lib/jekyll-diagrams/vega/renderer.rb +33 -0
  49. data/lib/jekyll-diagrams/version.rb +1 -1
  50. data/lib/jekyll-diagrams/wavedrom.rb +4 -15
  51. data/lib/jekyll-diagrams/wavedrom/block.rb +8 -0
  52. data/lib/jekyll-diagrams/wavedrom/renderer.rb +19 -0
  53. data/spec/basic_block_spec.rb +70 -0
  54. data/spec/basic_renderer_spec.rb +69 -0
  55. data/spec/blockdiag_renderer_spec.rb +43 -0
  56. data/spec/erd_renderer_spec.rb +43 -0
  57. data/spec/graphviz_renderer_spec.rb +19 -0
  58. data/spec/jekyll-diagrams_spec.rb +23 -0
  59. data/spec/mermaid_renderer_spec.rb +19 -0
  60. data/spec/nomnoml_renderer_spec.rb +19 -0
  61. data/spec/plantuml_renderer_spec.rb +20 -0
  62. data/spec/rendering_spec.rb +111 -0
  63. data/spec/smcat_renderer_spec.rb +19 -0
  64. data/spec/spec_helper.rb +31 -0
  65. data/spec/svgbob_renderer_spec.rb +27 -0
  66. data/spec/syntrax_renderer_spec.rb +19 -0
  67. data/spec/utils_spec.rb +163 -0
  68. data/spec/vega_renderer_spec.rb +19 -0
  69. data/spec/wavedrom_renderer_spec.rb +19 -0
  70. metadata +115 -95
  71. data/lib/jekyll-diagrams/block.rb +0 -51
  72. data/test/block_test.rb +0 -6
  73. data/test/blockdiag_test.rb +0 -28
  74. data/test/erd_test.rb +0 -25
  75. data/test/rendering_test.rb +0 -20
  76. data/test/svgbob_test.rb +0 -22
  77. data/test/test_helper.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e01b0efc75e18e6fc6eb105f1bdbd31380407a653bdf3972b61f96e69495d2f2
4
- data.tar.gz: 8e505b39fa89147623fb456f6e08ba20837b92f77e4f612177f0bb25e7f2aa21
3
+ metadata.gz: e747a50f5b7243d7385068b039987f6a562423a2de58c5fca5a6ba2b0e3f5fcd
4
+ data.tar.gz: 2d2e9080efbefdea34b81df49e7b47c01ebdc753571317754ae1bfb4e28a6e0f
5
5
  SHA512:
6
- metadata.gz: 2cb41b3ca6850ed7be3389369fc928cb52d7b128fef27568858a28d9ba3ade5a3b024dca39828ff875f0e69f0e6b4c0b3f9806b0c39b044f8ebc38cd5b5e7f25
7
- data.tar.gz: 7a52d3fdb72daf02efb5ecc89f86f4c791c2ec8281a5787165997385baa9b156d37105fbd973a13ed6d0ad01deea22c553ead6059a80894259f97a10664a15b0
6
+ metadata.gz: dce4156ef2128881613b401747c9a32c17e0ac56f420e6359f32cb6c39478a5a39d807b2ed615e27f00b4ce0f357a2d3a444f50651247684f990769d0fc5a78e
7
+ data.tar.gz: 7d987eb136d804ce0023abe94f6acf48557063c96f9e94e11e082b65a3075d1f5fdd40d784fc682d1928bd63bc95a02fd041c8f5f782bf40303b8544bbef6edf
@@ -1,8 +1,8 @@
1
- Feature: Blockdiag
1
+ Feature: Blockdiag Block
2
2
 
3
3
 
4
4
  Scenario: Basic Rendering
5
- Given I have a file 'blockdiag.md' with content:
5
+ Given I have a file named 'blockdiag.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -0,0 +1,26 @@
1
+ Feature: Graphviz Block
2
+
3
+
4
+ Background: I have a file with Graghviz
5
+ Given I have a file named 'graphviz.md' with:
6
+ """
7
+ ---
8
+ ---
9
+
10
+ {% graphviz %}
11
+ digraph {
12
+ A -> B;
13
+ }
14
+ {% endgraphviz %}
15
+ """
16
+
17
+ Scenario: Basic Rendering
18
+ When I run jekyll build
19
+ Then the file '_site/graphviz.html' should exist
20
+ And I should see svg output in '_site/graphviz.html'
21
+
22
+ Scenario: It Remove XML Heading
23
+ When I run jekyll build
24
+ Then the file '_site/graphviz.html' should exist
25
+ And I should not see '<\?xml' in '_site/graphviz.html'
26
+ And I should not see '<!DOCTYPE' in '_site/graphviz.html'
@@ -1,8 +1,18 @@
1
- Feature: Graphviz
1
+ Feature: Graphviz Configuration
2
2
 
3
3
 
4
- Background: I have a file with Graghviz
5
- Given I have a file 'graphviz.md' with content:
4
+ Scenario: Global Configuration
5
+ Given I have a file named '_config.yml' with:
6
+ """
7
+ jekyll-diagrams:
8
+ graphviz:
9
+ graph_attributes: bgcolor=red
10
+ edge_attributes:
11
+ - color=green
12
+ node_attributes:
13
+ color: blue
14
+ """
15
+ And I have a file named 'graphviz.md' with:
6
16
  """
7
17
  ---
8
18
  ---
@@ -13,29 +23,6 @@ Feature: Graphviz
13
23
  }
14
24
  {% endgraphviz %}
15
25
  """
16
-
17
- Scenario: Basic Rendering
18
- When I run jekyll build
19
- Then the file '_site/graphviz.html' should exist
20
- And I should see svg output in '_site/graphviz.html'
21
-
22
- Scenario: Remove XML Heading
23
- When I run jekyll build
24
- Then the file '_site/graphviz.html' should exist
25
- And I should not see '<\?xml' in '_site/graphviz.html'
26
- And I should not see '<!DOCTYPE' in '_site/graphviz.html'
27
-
28
- Scenario: Global Configugration
29
- Given I have a file '_config.yml' with content:
30
- """
31
- jekyll-diagrams:
32
- graphviz:
33
- graph_attributes: bgcolor=red
34
- edge_attributes:
35
- - color=green
36
- node_attributes:
37
- color: blue
38
- """
39
26
  When I run jekyll build
40
27
  Then the file '_site/graphviz.html' should exist
41
28
  # Graph
@@ -45,15 +32,15 @@ Feature: Graphviz
45
32
  # Node
46
33
  And I should see '<ellipse .*? stroke="#0000ff"' in '_site/graphviz.html'
47
34
 
48
- Scenario: Page Configugration Will Overwite Site Configuration
49
- Given I have a file '_config.yml' with content:
35
+ Scenario: Page Configuration Will Overwite Site Configuration
36
+ Given I have a file named '_config.yml' with:
50
37
  """
51
38
  jekyll-diagrams:
52
39
  graphviz:
53
40
  edge_attributes:
54
- color: blue
41
+ color: green
55
42
  """
56
- And I have a file 'graphviz.md' with content:
43
+ And I have a file named 'graphviz.md' with:
57
44
  """
58
45
  ---
59
46
  jekyll-diagrams:
@@ -71,4 +58,4 @@ Feature: Graphviz
71
58
  When I run jekyll build
72
59
  Then the file '_site/graphviz.html' should exist
73
60
  And I should see '<path .*? stroke="#ff0000"' in '_site/graphviz.html'
74
- And I should not see '<path .*? stroke="#0000ff"' in '_site/graphviz.html'
61
+ And I should not see '<path .*? stroke="#00ff00"' in '_site/graphviz.html'
@@ -1,8 +1,8 @@
1
- Feature: Mermaid
1
+ Feature: Mermaid Block
2
2
 
3
3
 
4
4
  Scenario: Basic Rendering
5
- Given I have a file 'mermaid.md' with content:
5
+ Given I have a file named 'mermaid.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -1,8 +1,8 @@
1
- Feature: Nomnoml
1
+ Feature: Nomnoml Block
2
2
 
3
3
 
4
4
  Scenario: Basic Rendering
5
- Given I have a file 'nomnoml.md' with content:
5
+ Given I have a file named 'nomnoml.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -1,8 +1,8 @@
1
- Feature: PlantUML
1
+ Feature: PlantUML Block
2
2
 
3
3
 
4
4
  Background: I have a file with PlantUML
5
- Given I have a file 'plantuml.md' with content:
5
+ Given I have a file named 'plantuml.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -13,20 +13,11 @@ Feature: PlantUML
13
13
  """
14
14
 
15
15
  Scenario: Basic Rendering
16
- Given I have a file 'plantuml.md' with content:
17
- """
18
- ---
19
- ---
20
-
21
- {% plantuml %}
22
- Bob->Alice : hello
23
- {% endplantuml %}
24
- """
25
16
  When I run jekyll build
26
17
  Then the file '_site/plantuml.html' should exist
27
18
  And I should see svg output in '_site/plantuml.html'
28
19
 
29
- Scenario: Remove XML Heading
20
+ Scenario: It Remove XML Heading
30
21
  When I run jekyll build
31
22
  Then the file '_site/plantuml.html' should exist
32
23
  And I should not see '<\?xml' in '_site/plantuml.html'
@@ -1,8 +1,8 @@
1
- Feature: SMCat
1
+ Feature: SMCat Block
2
2
 
3
3
 
4
4
  Background: I have a file with SMCat
5
- Given I have a file 'smcat.md' with content:
5
+ Given I have a file named 'smcat.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -17,7 +17,7 @@ Feature: SMCat
17
17
  Then the file '_site/smcat.html' should exist
18
18
  And I should see svg output in '_site/smcat.html'
19
19
 
20
- Scenario: Remove XML Heading
20
+ Scenario: It Remove XML Heading
21
21
  When I run jekyll build
22
22
  Then the file '_site/smcat.html' should exist
23
23
  And I should not see '<\?xml' in '_site/smcat.html'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Given('I have a file {string} with content:') do |file, content|
3
+ Given('I have a file named {string} with:') do |file, content|
4
4
  File.write(file, content)
5
5
  end
6
6
 
@@ -9,17 +9,17 @@ When('I run jekyll build') do
9
9
  end
10
10
 
11
11
  Then('the file {string} should exist') do |file|
12
- assert File.exist?(file)
12
+ expect(File.exist?(file)).to be true
13
13
  end
14
14
 
15
15
  Then('I should see svg output in {string}') do |file|
16
- assert_match %r{<svg(.|\r|\n)*?>(.|\r|\n)*</svg>}, File.read(file)
16
+ expect(File.read(file)).to match %r{<svg(.|\r|\n)*?>(.|\r|\n)*</svg>}
17
17
  end
18
18
 
19
19
  Then('I should see {string} in {string}') do |pattern, file|
20
- assert_match Regexp.new(pattern), File.read(file)
20
+ expect(File.read(file)).to match Regexp.new(pattern)
21
21
  end
22
22
 
23
23
  Then('I should not see {string} in {string}') do |pattern, file|
24
- refute_match Regexp.new(pattern), File.read(file)
24
+ expect(File.read(file)).not_to match Regexp.new(pattern)
25
25
  end
@@ -3,13 +3,8 @@
3
3
  lib = File.expand_path('../lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
- # Don't use coveralls in Github Actions
7
- unless ENV['GITHUB_ACTIONS']
8
- require 'coveralls'
9
- Coveralls.wear!
10
- end
11
-
12
- require 'minitest'
6
+ require 'simplecov'
7
+ require 'rspec'
13
8
  require 'tmpdir'
14
9
  require 'jekyll-diagrams'
15
10
 
@@ -31,8 +26,7 @@ end
31
26
  def run_jekyll
32
27
  options = Jekyll.configuration(
33
28
  source: TEST_DIR,
34
- quiet: true,
35
- liquid: { 'error_mode' => 'strict' }
29
+ quiet: true
36
30
  )
37
31
 
38
32
  Jekyll::Site.new(options).process
@@ -1,8 +1,8 @@
1
- Feature: Syntrax
1
+ Feature: Syntrax Block
2
2
 
3
3
 
4
4
  Scenario: Basic Rendering
5
- Given I have a file 'syntrax.md' with content:
5
+ Given I have a file named 'syntrax.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -1,8 +1,8 @@
1
- Feature: Vega
1
+ Feature: Vega Block
2
2
 
3
3
 
4
4
  Scenario: Basic Vega Rendering
5
- Given I have a file 'vega.md' with content:
5
+ Given I have a file named 'vega.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -23,7 +23,7 @@ Feature: Vega
23
23
  And I should see svg output in '_site/vega.html'
24
24
 
25
25
  Scenario: Basic Vegalite Rendering
26
- Given I have a file 'vegalite.md' with content:
26
+ Given I have a file named 'vegalite.md' with:
27
27
  """
28
28
  ---
29
29
  ---
@@ -1,8 +1,8 @@
1
- Feature: Wavedrom
1
+ Feature: Wavedrom Block
2
2
 
3
3
 
4
4
  Scenario: Basic Rendering
5
- Given I have a file 'wavedrom.md' with content:
5
+ Given I have a file named 'wavedrom.md' with:
6
6
  """
7
7
  ---
8
8
  ---
@@ -2,69 +2,12 @@
2
2
 
3
3
  require 'jekyll'
4
4
 
5
- module Jekyll
6
- module Diagrams
7
- class << self
8
- # Return configuration of Jekyll Diagrams
9
- #
10
- # @param context [Liquid::Context, :registers] Parsed context
11
- # @return Configuration
12
- def configuration(context)
13
- site_config = context.registers[:site].config
14
- page_config = context.registers[:page]
15
-
16
- site_config.merge(page_config)
17
- end
18
-
19
- def config_for(context, name)
20
- configuration(context).dig(config_name, name) || {}
21
- end
22
-
23
- def error_mode(context)
24
- liquid_mode = configuration(context).dig('liquid', 'error_mode')
25
- custom_mode = configuration(context).dig(config_name, 'error_mode')
26
-
27
- (custom_mode || liquid_mode || :warn).to_sym
28
- end
29
-
30
- # Return file path under vendor path
31
- #
32
- # @param file [String] If not given, return directory path
33
- def vendor_path(file = '')
34
- File.join(File.expand_path('../vendor', __dir__), file)
35
- end
36
-
37
- # @param jar [String] Jar path to run
38
- def run_jar(jar)
39
- "java -Djava.awt.headless=true -jar #{jar} "
40
- end
41
-
42
- def normalized_attrs(attrs, prefix:, sep: '=')
43
- attrs =
44
- case attrs
45
- when String
46
- attrs
47
- when Array
48
- attrs.join(prefix)
49
- when Hash
50
- attrs.map { |k, v| "#{k}#{sep}#{v}" }.join(prefix)
51
- end
52
-
53
- "#{prefix}#{attrs}"
54
- end
55
-
56
- private
57
-
58
- def config_name
59
- 'jekyll-diagrams'
60
- end
61
- end
62
- end
63
- end
64
-
65
5
  require_relative 'jekyll-diagrams/errors'
6
+ require_relative 'jekyll-diagrams/utils'
66
7
  require_relative 'jekyll-diagrams/rendering'
67
- require_relative 'jekyll-diagrams/block'
8
+
9
+ require_relative 'jekyll-diagrams/basic_renderer'
10
+ require_relative 'jekyll-diagrams/basic_block'
68
11
 
69
12
  require_relative 'jekyll-diagrams/blockdiag'
70
13
  require_relative 'jekyll-diagrams/erd'
@@ -77,3 +20,21 @@ require_relative 'jekyll-diagrams/svgbob'
77
20
  require_relative 'jekyll-diagrams/syntrax'
78
21
  require_relative 'jekyll-diagrams/vega'
79
22
  require_relative 'jekyll-diagrams/wavedrom'
23
+
24
+ module Jekyll
25
+ module Diagrams
26
+ class << self
27
+ def config_name
28
+ 'jekyll-diagrams'
29
+ end
30
+
31
+ def logger_topic
32
+ 'Jekyll Diagrams:'
33
+ end
34
+
35
+ def default_error_mode
36
+ :warn
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,28 @@
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
@@ -0,0 +1,38 @@
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