kramdown-plantuml 1.1.3 → 1.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 51cbb0be0b06278afe3b3d1eb572190a9f7a04fc869454b023854d5d8012e596
4
- data.tar.gz: 0e7cb4345aeab6972d3b0009b71ddc714f046f5b558ae1d37b334697af39575b
3
+ metadata.gz: beba25f229338deced9900f7a611c9040846e562c966de164e88dbb040acadde
4
+ data.tar.gz: 8c2aa7aa04a1a6e59a98032e1cc325544a2be7c3bc3cd407cbb3af09babe390c
5
5
  SHA512:
6
- metadata.gz: c18e9c35a4fef278f506106c1365839e7f58b0b45c8b352912187cd324df373b342400e56f51b9c13278ab199fd5fb6101c63cd02aa25ce9efef07722d7c517a
7
- data.tar.gz: d822db2c31c38db0f7ce0a5b92221ebf30a55be1f5d011141199d07d94a01b5ddba99a1ba127d13b88219f6135a384d90741315b6e00b88d0e72c20fa1220d2f
6
+ metadata.gz: fcdfa9c61a9b2c751aeae743edfb58d81c3602e1eb62f6b8993fd11b2372dd6ee271f77737f655967a093c03a90d0ebf3b4865c703b7a5ed2d7b806c5a4d19d5
7
+ data.tar.gz: d35a3daea2ab515d0fd788d8b2fb0575c4993e4f25ba3c7ebda02631b8ae8d397dc88917b3809cf732e9b9a5d16bbbfa52cdfa2095a682c68de8d6ed8fba3377
@@ -101,8 +101,6 @@ test_gem() {
101
101
 
102
102
  cd "${workdir}"
103
103
 
104
- gem install bundler
105
-
106
104
  if [[ -n "${token}" ]]; then
107
105
  # A non-empty $token means we should install the Gem from GPR
108
106
  repository="https://rubygems.pkg.github.com/swedbankpay"
@@ -91,14 +91,20 @@ jobs:
91
91
  - name: rubocop
92
92
  run: bundle exec rubocop --fail-level warning --display-only-fail-level-offenses
93
93
 
94
- - name: Test with Rake
95
- run: bundle exec rake
96
-
97
94
  - name: RSPec (debug)
98
95
  env:
99
96
  DEBUG: 1
100
97
  run: bundle exec rspec --tag debug
101
98
 
99
+ - name: Test with Rake
100
+ run: bundle exec rake
101
+
102
+ - name: Upload code coverage
103
+ uses: actions/upload-artifact@v2
104
+ with:
105
+ name: coverage
106
+ path: ./coverage
107
+
102
108
  - name: Codecov upload
103
109
  run: bundle exec rake codecov:upload || echo 'Codecov upload failed'
104
110
 
@@ -1,40 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'version'
4
- require_relative 'themer'
4
+ require_relative 'theme'
5
5
  require_relative 'plantuml_error'
6
6
  require_relative 'logger'
7
7
  require_relative 'executor'
8
8
 
9
9
  module Kramdown
10
10
  module PlantUml
11
- # Converts PlantUML markup to SVG
12
- class Converter
13
- def initialize(options = {})
14
- @themer = Themer.new(options)
11
+ # Represents a PlantUML diagram that can be converted to SVG.
12
+ class Diagram
13
+ attr_reader :theme, :plantuml, :result
14
+
15
+ def initialize(plantuml, options = {})
16
+ @plantuml = plantuml
17
+ @theme = Theme.new(options || {})
15
18
  @logger = Logger.init
16
19
  @executor = Executor.new
17
20
  end
18
21
 
19
- def convert_plantuml_to_svg(plantuml)
20
- if plantuml.nil? || plantuml.empty?
22
+ def convert_to_svg
23
+ return @svg unless @svg.nil?
24
+
25
+ if @plantuml.nil? || @plantuml.empty?
21
26
  @logger.warn ' kramdown-plantuml: PlantUML diagram is empty'
22
- return plantuml
27
+ return @plantuml
23
28
  end
24
29
 
25
- plantuml = @themer.apply_theme(plantuml)
26
- plantuml = plantuml.strip
30
+ @plantuml = @theme.apply(@plantuml)
31
+ @plantuml = plantuml.strip
27
32
  log(plantuml)
28
- result = @executor.execute(plantuml)
29
- result.validate(plantuml)
30
- svg = result.without_xml_prologue
31
- wrap(svg)
33
+ @result = @executor.execute(self)
34
+ @result.validate
35
+ @svg = wrap(@result.without_xml_prologue)
36
+ @svg
32
37
  end
33
38
 
34
39
  private
35
40
 
36
41
  def wrap(svg)
37
- theme_class = @themer.theme_name ? "theme-#{@themer.theme_name}" : ''
42
+ theme_class = @theme.name ? "theme-#{@theme.name}" : ''
38
43
  class_name = "plantuml #{theme_class}".strip
39
44
 
40
45
  wrapper_element_start = "<div class=\"#{class_name}\">"
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'open3'
4
4
  require_relative '../which'
@@ -18,21 +18,19 @@ module Kramdown
18
18
  raise IOError, "'#{@plantuml_jar_file}' does not exist" unless File.exist? @plantuml_jar_file
19
19
  end
20
20
 
21
- def execute(stdin)
22
- cmd = "java -Djava.awt.headless=true -jar #{@plantuml_jar_file} -tsvg -failfast -pipe"
23
- cmd << if @logger.debug?
24
- ' -verbose'
25
- else
26
- ' -nometadata'
27
- end
21
+ def execute(diagram)
22
+ raise ArgumentError, 'diagram cannot be nil' if diagram.nil?
23
+ raise ArgumentError, "diagram must be a #{Diagram}" unless diagram.is_a?(Diagram)
24
+
25
+ cmd = "java -Djava.awt.headless=true -jar #{@plantuml_jar_file} -tsvg -failfast -pipe #{debug_args}"
28
26
 
29
27
  @logger.debug " kramdown-plantuml: Executing '#{cmd}'."
30
28
 
31
- stdout, stderr, status = Open3.capture3 cmd, stdin_data: stdin
29
+ stdout, stderr, status = Open3.capture3 cmd, stdin_data: diagram.plantuml
32
30
 
33
31
  @logger.debug " kramdown-plantuml: PlantUML exit code '#{status.exitstatus}'."
34
32
 
35
- PlantUmlResult.new(stdout, stderr, status)
33
+ PlantUmlResult.new(diagram, stdout, stderr, status.exitstatus)
36
34
  end
37
35
 
38
36
  private
@@ -43,6 +41,12 @@ module Kramdown
43
41
  first_jar = Dir[jar_glob].first
44
42
  File.expand_path first_jar unless first_jar.nil?
45
43
  end
44
+
45
+ def debug_args
46
+ return ' -verbose' if @logger.debug?
47
+
48
+ ' -nometadata'
49
+ end
46
50
  end
47
51
  end
48
52
  end
@@ -20,10 +20,10 @@ module Kramdown
20
20
  @logger.debug message
21
21
  end
22
22
 
23
- def debug_with_prefix(prefix, string)
24
- return if string.nil? || string.empty?
23
+ def debug_with_prefix(prefix, multiline_string)
24
+ return if multiline_string.nil? || multiline_string.empty?
25
25
 
26
- lines = string.lines
26
+ lines = multiline_string.lines
27
27
  lines.each do |line|
28
28
  @logger.debug "#{prefix}#{line.rstrip}"
29
29
  end
@@ -1,32 +1,69 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'plantuml_result'
4
+
3
5
  module Kramdown
4
6
  module PlantUml
5
7
  # PlantUML Error
6
8
  class PlantUmlError < StandardError
7
- def initialize(plantuml, stderr, exitcode)
9
+ def initialize(result)
10
+ raise ArgumentError, 'result cannot be nil' if result.nil?
11
+ raise ArgumentError, "result must be a #{PlantUmlResult}" unless result.is_a?(PlantUmlResult)
12
+
13
+ super create_message(result)
14
+ end
15
+
16
+ private
17
+
18
+ def create_message(result)
19
+ header = header(result).gsub("\n", ' ').strip
20
+ plantuml = plantuml(result)
21
+ result = result(result)
8
22
  message = <<~MESSAGE
9
- Conversion of the following PlantUML diagram failed:
23
+ #{header}
10
24
 
11
25
  #{plantuml}
12
26
 
13
- The error received from PlantUML was:
14
-
15
- Exit code: #{exitcode}
16
- #{stderr}
27
+ #{result}
17
28
  MESSAGE
18
29
 
19
- super message
30
+ message.strip
20
31
  end
21
32
 
22
- def self.should_raise?(exitcode, stderr)
23
- return false if exitcode.zero?
33
+ def header(result)
34
+ if theme_not_found?(result) && !result.diagram.nil? && !result.diagram.theme.nil?
35
+ return <<~HEADER
36
+ Conversion of the following PlantUML result failed because the
37
+ theme '#{result.diagram.theme.name}' can't be found in the directory
38
+ '#{result.diagram.theme.directory}':
39
+ HEADER
40
+ end
41
+
42
+ 'Conversion of the following PlantUML result failed:'
43
+ end
44
+
45
+ def theme_not_found?(result)
46
+ !result.nil? \
47
+ && !result.stderr.nil? \
48
+ && result.stderr.include?('NullPointerException') \
49
+ && result.stderr.include?('getTheme')
50
+ end
51
+
52
+ def plantuml(result)
53
+ return nil if result.nil? || result.diagram.nil?
54
+
55
+ result.diagram.plantuml
56
+ end
57
+
58
+ def result(result)
59
+ return nil if result.nil?
60
+
61
+ <<~RESULT
62
+ The error received from PlantUML was:
24
63
 
25
- !stderr.nil? && !stderr.empty? && \
26
- # If stderr is not empty, but contains the string 'CoreText note:',
27
- # the error is caused by a bug in Java, and should be ignored.
28
- # Circumvents https://bugs.openjdk.java.net/browse/JDK-8244621
29
- !stderr.include?('CoreText note:')
64
+ Exit code: #{result.exitcode}
65
+ #{result.stderr}
66
+ RESULT
30
67
  end
31
68
  end
32
69
  end
@@ -2,17 +2,24 @@
2
2
 
3
3
  require_relative 'logger'
4
4
  require_relative 'plantuml_error'
5
+ require_relative 'diagram'
5
6
 
6
7
  module Kramdown
7
8
  module PlantUml
8
9
  # Executes the PlantUML Java application.
9
10
  class PlantUmlResult
10
- attr_reader :stdout, :stderr, :exitcode
11
+ attr_reader :diagram, :stdout, :stderr, :exitcode
11
12
 
12
- def initialize(stdout, stderr, status)
13
+ def initialize(diagram, stdout, stderr, exitcode)
14
+ raise ArgumentError, 'diagram cannot be nil' if diagram.nil?
15
+ raise ArgumentError, "diagram must be a #{Diagram}" unless diagram.is_a?(Diagram)
16
+ raise ArgumentError, 'exitcode cannot be nil' if exitcode.nil?
17
+ raise ArgumentError, "exitcode must be a #{Integer}" unless exitcode.is_a?(Integer)
18
+
19
+ @diagram = diagram
13
20
  @stdout = stdout
14
21
  @stderr = stderr
15
- @exitcode = status.exitstatus
22
+ @exitcode = exitcode
16
23
  @logger = Logger.init
17
24
  end
18
25
 
@@ -37,8 +44,17 @@ module Kramdown
37
44
  @stdout
38
45
  end
39
46
 
40
- def validate(plantuml)
41
- raise PlantUmlError.new(plantuml, @stderr, @exitcode) if PlantUmlError.should_raise?(@exitcode, @stderr)
47
+ def valid?
48
+ return true if @exitcode.zero? || @stderr.nil? || @stderr.empty?
49
+
50
+ # If stderr is not empty, but contains the string 'CoreText note:',
51
+ # the error is caused by a bug in Java, and should be ignored.
52
+ # Circumvents https://bugs.openjdk.java.net/browse/JDK-8244621
53
+ @stderr.include?('CoreText note:')
54
+ end
55
+
56
+ def validate
57
+ raise PlantUmlError, self unless valid?
42
58
 
43
59
  return if @stderr.nil? || @stderr.empty?
44
60
 
@@ -5,21 +5,21 @@ require_relative 'logger'
5
5
  module Kramdown
6
6
  module PlantUml
7
7
  # Provides theming support for PlantUML
8
- class Themer
9
- attr_reader :theme_name, :theme_directory
8
+ class Theme
9
+ attr_reader :name, :directory
10
10
 
11
11
  def initialize(options = {})
12
12
  @logger = Logger.init
13
- @theme_name, @theme_directory = theme_options(options)
13
+ @name, @directory = theme_options(options)
14
14
  end
15
15
 
16
- def apply_theme(plantuml)
17
- if plantuml.nil? || plantuml.empty?
18
- @logger.debug ' kramdown-plantuml: Empty diagram.'
16
+ def apply(plantuml)
17
+ if plantuml.nil? || !plantuml.is_a?(String) || plantuml.empty?
18
+ @logger.debug ' kramdown-plantuml: Empty diagram or not a String.'
19
19
  return plantuml
20
20
  end
21
21
 
22
- if @theme_name.nil? || @theme_name.empty?
22
+ if @name.nil? || @name.empty?
23
23
  @logger.debug ' kramdown-plantuml: No theme to apply.'
24
24
  return plantuml
25
25
  end
@@ -37,10 +37,10 @@ module Kramdown
37
37
  return nil if options.nil? || !options.key?(:theme)
38
38
 
39
39
  theme = options[:theme] || {}
40
- theme_name = theme.key?(:name) ? theme[:name] : nil
41
- theme_directory = theme.key?(:directory) ? theme[:directory] : nil
40
+ name = theme.key?(:name) ? theme[:name] : nil
41
+ directory = theme.key?(:directory) ? theme[:directory] : nil
42
42
 
43
- [theme_name, theme_directory]
43
+ [name, directory]
44
44
  end
45
45
 
46
46
  def symbolize_keys(options)
@@ -60,8 +60,8 @@ module Kramdown
60
60
 
61
61
  return plantuml if startuml_index.nil?
62
62
 
63
- theme_string = "\n!theme #{@theme_name}"
64
- theme_string << " from #{@theme_directory}" unless @theme_directory.nil?
63
+ theme_string = "\n!theme #{@name}"
64
+ theme_string << " from #{@directory}" unless @directory.nil?
65
65
 
66
66
  @logger.debug " kramdown-plantuml: Applying #{theme_string.strip}"
67
67
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kramdown
4
4
  module PlantUml
5
- VERSION = '1.1.3'
5
+ VERSION = '1.1.4'
6
6
  end
7
7
  end
@@ -1,5 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'kramdown-plantuml/version'
4
- require_relative 'kramdown-plantuml/converter'
5
3
  require_relative 'kramdown_html'
data/lib/kramdown_html.rb CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  require 'kramdown'
4
4
  require 'kramdown-parser-gfm'
5
- require_relative 'kramdown-plantuml/converter'
6
5
  require_relative 'kramdown-plantuml/logger'
7
6
  require_relative 'kramdown-plantuml/plantuml_error'
7
+ require_relative 'kramdown-plantuml/diagram'
8
8
 
9
9
  module Kramdown
10
10
  module Converter
@@ -18,9 +18,8 @@ module Kramdown
18
18
 
19
19
  plantuml = element.value
20
20
  plantuml_options = @options.key?(:plantuml) ? @options[:plantuml] : {}
21
- converter = ::Kramdown::PlantUml::Converter.new(plantuml_options || {})
22
-
23
- converter.convert_plantuml_to_svg(plantuml)
21
+ diagram = ::Kramdown::PlantUml::Diagram.new(plantuml, plantuml_options)
22
+ diagram.convert_to_svg
24
23
  end
25
24
  end
26
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kramdown-plantuml
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Swedbank Pay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-04 00:00:00.000000000 Z
11
+ date: 2021-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -166,17 +166,17 @@ files:
166
166
  - LICENSE
167
167
  - README.md
168
168
  - Rakefile
169
- - bin/net/sourceforge/plantuml/plantuml/1.2021.8/plantuml-1.2021.8.jar
169
+ - bin/net/sourceforge/plantuml/plantuml/1.2021.9/plantuml-1.2021.9.jar
170
170
  - kramdown-plantuml.gemspec
171
171
  - lib/kramdown-plantuml.rb
172
172
  - lib/kramdown-plantuml/bool_env.rb
173
173
  - lib/kramdown-plantuml/console_logger.rb
174
- - lib/kramdown-plantuml/converter.rb
174
+ - lib/kramdown-plantuml/diagram.rb
175
175
  - lib/kramdown-plantuml/executor.rb
176
176
  - lib/kramdown-plantuml/logger.rb
177
177
  - lib/kramdown-plantuml/plantuml_error.rb
178
178
  - lib/kramdown-plantuml/plantuml_result.rb
179
- - lib/kramdown-plantuml/themer.rb
179
+ - lib/kramdown-plantuml/theme.rb
180
180
  - lib/kramdown-plantuml/version.rb
181
181
  - lib/kramdown_html.rb
182
182
  - lib/which.rb