nanoc-tidy.rb 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc9b28f3f15fbbf7cfa46c1111b7d8c5a0b6c31f6363a7c90d74e08ce6894d8b
4
- data.tar.gz: b57bd052f6d65a3c04edf7f145ee53ec60594df0caa8cd3c4f1b8f0259fd7449
3
+ metadata.gz: baa9bd78c6f407c7050903ec46fe89c19a702dc788eb556438078d43f10c2adf
4
+ data.tar.gz: 5bd8b9fd26eb7eb0a6831eaee86d0da38e02ceee4589cfbdef4881f29f52b6a7
5
5
  SHA512:
6
- metadata.gz: 26938031e1f797cbdcdc7ccada9b57c516c80c5ef9250c23dd36d4791b68e01e3f9f9262b37345f5cf76c89092c43730efd15f1546028b185e6a7d5e34ef36fd
7
- data.tar.gz: 4e64a7be6793e07884f54455a3a447793ec1eb35852ffb2e96e058f345156a902107472aeeb1b852b3d12ecf4c303c3bf54639b8fe02901dbe08e14c707f8973
6
+ metadata.gz: 3acb6eb29a332c6013cdaa878f54327abfc96ec87fbd36c8a439afe153469b724713cea1a77572ab02b069c24e6f3dac25c1b05e00aeac146e304f9637c6766e
7
+ data.tar.gz: 83f346f2273873f02015065cc8701d8693e6cfd8a26686a767789a9dcd2f4cd46b084b452b928807758141ac4e3f312afb0f80d63bc6f355cdbd1663db9ab03d
data/Rakefile.rb CHANGED
@@ -1,5 +1,11 @@
1
1
  require "rake/testtask"
2
2
 
3
+ desc "Run CI tasks"
4
+ task :ci do
5
+ sh "rake test"
6
+ sh "bundle exec rubocop"
7
+ end
8
+
3
9
  Rake::TestTask.new do |t|
4
10
  t.test_files = FileList['test/*_test.rb']
5
11
  t.verbose = true
@@ -4,6 +4,7 @@ module Nanoc::Tidy
4
4
  class Filter < Nanoc::Filter
5
5
  require "fileutils"
6
6
  require_relative "spawn"
7
+
7
8
  include Spawn
8
9
  include FileUtils
9
10
 
@@ -34,14 +35,15 @@ module Nanoc::Tidy
34
35
  # @return [String]
35
36
  # Returns HTML content (modified)
36
37
  def run(content, options = {})
37
- path = temporary_file(content).path
38
+ file = temporary_file(
39
+ File.basename(item.identifier.to_s),
40
+ content
41
+ )
38
42
  spawn tidy,
39
- [*default_argv, *(options[:argv] || []), "-modify", path],
40
- err: File.join(tmpdir, "stderr"),
41
- out: File.join(tmpdir, "stdout")
42
- File.read(path)
43
+ [*default_argv, *(options[:argv] || []), "-modify", file.path]
44
+ File.read(file.path)
43
45
  ensure
44
- rm(path) if File.exist?(path)
46
+ file&.unlink
45
47
  end
46
48
 
47
49
  private
@@ -50,23 +52,25 @@ module Nanoc::Tidy
50
52
  self.class.default_argv
51
53
  end
52
54
 
53
- def temporary_file(content)
54
- mkdir_p(tmpdir)
55
- file = Tempfile.new(File.basename(item.identifier.to_s), tmpdir)
56
- file.write(content)
57
- file.tap(&:flush)
55
+ def temporary_file(basename, content)
56
+ tempname = [
57
+ ".nanoc.tidy.#{basename}.#{object_id}",
58
+ SecureRandom.alphanumeric(3)
59
+ ]
60
+ Tempfile.new(tempname).tap do
61
+ _1.write(content)
62
+ _1.flush
63
+ end
58
64
  end
59
65
 
60
66
  def tidy
61
- case
62
- when system("which tidy > /dev/null 2>&1") then "tidy"
63
- when system("which tidy5 > /dev/null 2>&1") then "tidy5"
64
- else nil
67
+ if system("which tidy > /dev/null 2>&1")
68
+ "tidy"
69
+ elsif system("which tidy5 > /dev/null 2>&1")
70
+ "tidy5"
71
+ else
72
+ raise Nanoc::Tidy::Error, "tidy executable not found on $PATH"
65
73
  end
66
74
  end
67
-
68
- def tmpdir
69
- File.join(Dir.getwd, "tmp", "tidy-html5")
70
- end
71
75
  end
72
76
  end
@@ -1,8 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nanoc::Tidy
2
4
  module Spawn
3
- require "securerandom"
4
5
  require "fileutils"
5
- Error = Class.new(RuntimeError)
6
6
 
7
7
  ##
8
8
  # Spawns a process
@@ -13,20 +13,10 @@ module Nanoc::Tidy
13
13
  # @param [Array<String>] argv
14
14
  # An array of command line arguments
15
15
  #
16
- # @param [String] err
17
- # A path where stderr is redirected to
18
- #
19
- # @param [String] out
20
- # A path where stdout is redirected to
21
- #
22
16
  # @return [void]
23
- def spawn(exe, argv, err:, out:)
24
- id = SecureRandom.hex
25
- err = "#{err}+#{id}"
26
- out = "#{out}+#{id}"
27
- Kernel.spawn(
28
- exe, *argv, { STDERR => err, STDOUT => out }
29
- )
17
+ def spawn(exe, argv, workdir: File.join(Dir.getwd, "tmp"))
18
+ logfile = File.join(workdir, ".#{Process.pid}.tidy")
19
+ Kernel.spawn(exe, *argv, {STDERR => logfile, STDOUT => logfile})
30
20
  Process.wait
31
21
  status = $?
32
22
  ##
@@ -34,24 +24,18 @@ module Nanoc::Tidy
34
24
  # * 0: no warnings, no errors
35
25
  # * 1: has warnings
36
26
  # * 2: has errors
37
- return if [0, 1].include?(status.exitstatus)
38
-
39
- msgs = [err, out].map do
40
- FileUtils.touch(_1)
41
- [_1.gsub(Dir.getwd, ''), ":", "\n", File.binread(_1)].join
42
- end.join("\n")
43
- raise Error,
44
- "#{File.basename(exe)} exited unsuccessfully " \
45
- "(" \
46
- "exit code: #{status.exitstatus}, " \
47
- "item: #{item.identifier}" \
48
- ")" \
49
- "\n#{msgs}",
50
- []
27
+ if [0, 1].include?(status.exitstatus)
28
+ status.exitstatus
29
+ else
30
+ raise Nanoc::Tidy::Error,
31
+ "#{File.basename(exe)} exited unsuccessfully\n" \
32
+ "(item: #{item.identifier})\n" \
33
+ "(exit code: #{status.exitstatus})\n" \
34
+ "output:\n#{File.binread(logfile)}\n",
35
+ []
36
+ end
51
37
  ensure
52
- [err, out]
53
- .select { File.exist?(_1) }
54
- .each { FileUtils.rm(_1) }
38
+ File.exist?(logfile) ? FileUtils.rm(logfile) : nil
55
39
  end
56
40
  end
57
41
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nanoc
2
4
  module Tidy
3
- VERSION = "0.6.2"
5
+ VERSION = "0.7.0"
4
6
  end
5
7
  end
data/lib/nanoc/tidy.rb CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  require "nanoc"
4
4
  module Nanoc::Tidy
5
+ ##
6
+ # Generic error
7
+ Error = Class.new(RuntimeError)
8
+
9
+ require "securerandom"
5
10
  require_relative "tidy/version"
6
11
  require_relative "tidy/filter"
7
12
 
data/lib/nanoc-tidy.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "nanoc/tidy"
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.licenses = ["0BSD"]
11
11
  gem.files = `git ls-files`.split($/).reject { _1.start_with?(".") }
12
12
  gem.require_paths = ["lib"]
13
- gem.summary = "nanoc-tidy.rb integrates tidy-html5 into nanoc"
13
+ gem.summary = "nanoc + tidy-html5"
14
14
  gem.description = gem.summary
15
15
  gem.add_development_dependency "yard", "~> 0.9"
16
16
  gem.add_development_dependency "redcarpet", "~> 3.5"
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative "setup"
2
4
 
3
5
  class FilterTest < Test::Unit::TestCase
4
6
  def test_default_options
5
- options = { argv: ["--tidy-mark", "false"] }
7
+ options = {argv: ["--tidy-mark", "false"]}
6
8
  assert_equal read_result("default_options.html"),
7
9
  filter_for("fixture.html").run(html, options)
8
10
  end
9
11
 
10
12
  def test_upper_option
11
- options = { argv: ["-upper", "--tidy-mark", "false"] }
13
+ options = {argv: ["-upper", "--tidy-mark", "false"]}
12
14
  assert_equal read_result("upper_option.html"),
13
15
  filter_for("fixture.html").run(html, options)
14
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nanoc-tidy.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - '0x1eef'
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-29 00:00:00.000000000 Z
11
+ date: 2024-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.6'
125
- description: nanoc-tidy.rb integrates tidy-html5 into nanoc
125
+ description: nanoc + tidy-html5
126
126
  email:
127
127
  - 0x1eef@protonmail.com
128
128
  executables: []
@@ -166,5 +166,5 @@ requirements: []
166
166
  rubygems_version: 3.5.9
167
167
  signing_key:
168
168
  specification_version: 4
169
- summary: nanoc-tidy.rb integrates tidy-html5 into nanoc
169
+ summary: nanoc + tidy-html5
170
170
  test_files: []