nanoc-tidy.rb 0.2.0
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 +7 -0
- data/.bundle/config +2 -0
- data/.github/workflows/tests.yml +24 -0
- data/.gitignore +2 -0
- data/.projectile +6 -0
- data/Gemfile +2 -0
- data/LICENSE +15 -0
- data/README.md +68 -0
- data/Rakefile.rb +8 -0
- data/lib/nanoc/tidy/filter.rb +52 -0
- data/lib/nanoc/tidy/version.rb +5 -0
- data/lib/nanoc/tidy.rb +7 -0
- data/lib/nanoc-tidy.rb +2 -0
- data/nanoc-tidy.rb.gemspec +22 -0
- data/test/fixtures/fixture.html +11 -0
- data/test/results/default_options.html +9 -0
- data/test/results/upper_option.html +9 -0
- data/test/setup.rb +3 -0
- data/test/tidy_filter_test.rb +41 -0
- metadata +159 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 82bb7fbdab23c96d587126887440424d6952c7e083fafb48385d1daad72459ab
|
4
|
+
data.tar.gz: 72960c21694c0a722fac6c6a3c09b2b78250fc3033dac85b6c11ed838f001726
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 48d64352f129d1593b0e6f787a53a15cf3dc72b1700d7dc82d8c60aaf6b8895345f54f612305d67f1868a95adfd3cdecd544343b91844adc1bab47dbdd4c0d59
|
7
|
+
data.tar.gz: feb6516507e522d664dfb9194efb2897f0bdea0bf9515276e3be84ee27ab493f4281d16c723048c88e9033d203f532af449bae803912bdc14b6f31c6e716b2ea
|
data/.bundle/config
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
name: nanoc-tidy.rb
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
specs:
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
os: [ubuntu-latest]
|
15
|
+
ruby: [3.1, 3.2]
|
16
|
+
runs-on: ${{ matrix.os }}
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby }}
|
22
|
+
- run: sudo apt-get install tidy
|
23
|
+
- run: bundle install
|
24
|
+
- run: rake
|
data/.gitignore
ADDED
data/.projectile
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Copyright (C) 2023 by 0x1eef <0x1eef@protonmail.com>
|
2
|
+
|
3
|
+
Permission to use, copy, modify, and/or distribute this
|
4
|
+
software for any purpose with or without fee is hereby
|
5
|
+
granted.
|
6
|
+
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS
|
8
|
+
ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
9
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
|
10
|
+
EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
12
|
+
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
13
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
14
|
+
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
15
|
+
OF THIS SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
## About
|
2
|
+
|
3
|
+
nanoc-tidy.rb is a
|
4
|
+
[nanoc](https://nanoc.app)
|
5
|
+
filter that utilizes
|
6
|
+
[tidy-html5](https://github.com/htacg/tidy-html5)
|
7
|
+
to nicely format, and detect / correct markup
|
8
|
+
errors in HTML produced by template languages such as ERB -
|
9
|
+
where misaligned indentation and other whitespace issues
|
10
|
+
are often commonplace.
|
11
|
+
|
12
|
+
## Examples
|
13
|
+
|
14
|
+
__Defaults__
|
15
|
+
|
16
|
+
The following is an example with the
|
17
|
+
[default options](https://0x1eef.github.io/x/nanoc-tidy.rb/Nanoc/Tidy/Filter#default_options-class_method)
|
18
|
+
being used:
|
19
|
+
|
20
|
+
``` ruby
|
21
|
+
# Rules
|
22
|
+
require "nanoc-tidy"
|
23
|
+
compile "/index.html.erb" do
|
24
|
+
filter(:erb)
|
25
|
+
filter(:tidy)
|
26
|
+
write("/index.html")
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
__Options__
|
31
|
+
|
32
|
+
The following example forwards command-line options to
|
33
|
+
[tidy-html5](https://github.com/htacg/tidy-html5):
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
# Rules
|
37
|
+
require "nanoc-tidy"
|
38
|
+
compile "/index.html.erb" do
|
39
|
+
filter(:erb)
|
40
|
+
filter(:tidy, "-upper" => true)
|
41
|
+
write("/index.html")
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
## Sources
|
46
|
+
|
47
|
+
* [Source code (GitHub)](https://github.com/0x1eef/nanoc-tidy.rb)
|
48
|
+
* [Source code (GitLab)](https://gitlab.com/0x1eef/nanoc-tidy.rb)
|
49
|
+
|
50
|
+
## <a id='install'>Install</a>
|
51
|
+
|
52
|
+
nanoc-tidy.rb is distributed as a RubyGem through its git repositories. <br>
|
53
|
+
[GitHub](https://github.com/0x1eef/nanoc-tidy.rb),
|
54
|
+
and
|
55
|
+
[GitLab](https://gitlab.com/0x1eef/nanoc-tidy.rb)
|
56
|
+
are available as sources.
|
57
|
+
|
58
|
+
**Gemfile**
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
gem "nanoc-tidy.rb", github: "0x1eef/nanoc-tidy.rb"
|
62
|
+
```
|
63
|
+
|
64
|
+
## License
|
65
|
+
|
66
|
+
[BSD Zero Clause](https://choosealicense.com/licenses/0bsd/).
|
67
|
+
<br>
|
68
|
+
See [LICENSE](./LICENSE).
|
data/Rakefile.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Nanoc::Tidy::Filter < Nanoc::Filter
|
4
|
+
require "fileutils"
|
5
|
+
include FileUtils
|
6
|
+
Error = Class.new(RuntimeError)
|
7
|
+
|
8
|
+
identifier :tidy
|
9
|
+
type text: :text
|
10
|
+
|
11
|
+
##
|
12
|
+
# @return [{"-wrap" => 120, "-indent" => true}]
|
13
|
+
# Returns the default options forwarded as command-line
|
14
|
+
# arguments to tidy-html5.
|
15
|
+
def self.default_options
|
16
|
+
@default_options ||= {"-wrap" => 120, "-indent" => true}
|
17
|
+
end
|
18
|
+
|
19
|
+
def run(content, options = {})
|
20
|
+
file = temporary_file_for(content)
|
21
|
+
tidy file, self.class.default_options.merge(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def tidy(file, options)
|
27
|
+
system "tidy", "-modify", "-quiet", *tidy_args(options), file.path
|
28
|
+
if $?.success?
|
29
|
+
File.read(file.path).tap { file.tap(&:unlink).close }
|
30
|
+
else
|
31
|
+
raise Error, "tidy exited unsuccessfully (exit code: #{$?.exitstatus})", []
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def tidy_args(options)
|
36
|
+
options.each_with_object([]) do |(key, value), ary|
|
37
|
+
if value.equal?(true)
|
38
|
+
ary << key
|
39
|
+
else
|
40
|
+
ary.concat [key, value.to_s]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def temporary_file_for(content)
|
46
|
+
dir = File.join(Dir.getwd, "tmp", "nanoc-tidy.rb")
|
47
|
+
mkdir_p(dir) unless Dir.exist?(dir)
|
48
|
+
file = Tempfile.new(File.basename(item.identifier.to_s), dir)
|
49
|
+
file.write(content)
|
50
|
+
file.tap(&:flush)
|
51
|
+
end
|
52
|
+
end
|
data/lib/nanoc/tidy.rb
ADDED
data/lib/nanoc-tidy.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "./lib/nanoc/tidy/version"
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "nanoc-tidy.rb"
|
6
|
+
gem.authors = ["0x1eef"]
|
7
|
+
gem.email = ["0x1eef@protonmail.com"]
|
8
|
+
gem.homepage = "https://github.com/0x1eef/nanoc-tidy.rb#readme"
|
9
|
+
gem.version = Nanoc::Tidy::VERSION
|
10
|
+
gem.licenses = ["0BSD"]
|
11
|
+
gem.files = `git ls-files`.split($/)
|
12
|
+
gem.require_paths = ["lib"]
|
13
|
+
gem.summary = "nanoc-tidy.rb integrates tidy-html5 into nanoc."
|
14
|
+
gem.description = gem.summary
|
15
|
+
gem.add_development_dependency "yard", "~> 0.9"
|
16
|
+
gem.add_development_dependency "redcarpet", "~> 3.5"
|
17
|
+
gem.add_development_dependency "test-unit", "~> 3.6"
|
18
|
+
gem.add_development_dependency "standard", "~> 1.13"
|
19
|
+
gem.add_development_dependency "nanoc", "~> 4.12"
|
20
|
+
gem.add_development_dependency "rack", "~> 3.0"
|
21
|
+
gem.add_development_dependency "rackup", "~> 2.1"
|
22
|
+
end
|
data/test/setup.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative "setup"
|
2
|
+
|
3
|
+
class FilterTest < Test::Unit::TestCase
|
4
|
+
def test_default_options
|
5
|
+
options = { "--tidy-mark" => false }
|
6
|
+
assert_equal filter_for("fixture.html").run(html, options),
|
7
|
+
read_result("default_options.html")
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_upper_option
|
11
|
+
options = { "-upper" => true, "--tidy-mark" => false }
|
12
|
+
assert_equal filter_for("fixture.html").run(html, options),
|
13
|
+
read_result("upper_option.html")
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def filter_for(basename)
|
20
|
+
@filter ||= begin
|
21
|
+
filter = Nanoc::Tidy::Filter.new
|
22
|
+
filter.extend module_for(basename)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def module_for(basename)
|
27
|
+
Module.new do
|
28
|
+
define_method(:item) do
|
29
|
+
OpenStruct.new(identifier: basename)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_result(basename)
|
35
|
+
File.binread File.join("test", "results", basename)
|
36
|
+
end
|
37
|
+
|
38
|
+
def html
|
39
|
+
File.binread "./test/fixtures/fixture.html"
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nanoc-tidy.rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- '0x1eef'
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yard
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redcarpet
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.5'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: standard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.13'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.13'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nanoc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.12'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.12'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rackup
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.1'
|
111
|
+
description: nanoc-tidy.rb integrates tidy-html5 into nanoc.
|
112
|
+
email:
|
113
|
+
- 0x1eef@protonmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".bundle/config"
|
119
|
+
- ".github/workflows/tests.yml"
|
120
|
+
- ".gitignore"
|
121
|
+
- ".projectile"
|
122
|
+
- Gemfile
|
123
|
+
- LICENSE
|
124
|
+
- README.md
|
125
|
+
- Rakefile.rb
|
126
|
+
- lib/nanoc-tidy.rb
|
127
|
+
- lib/nanoc/tidy.rb
|
128
|
+
- lib/nanoc/tidy/filter.rb
|
129
|
+
- lib/nanoc/tidy/version.rb
|
130
|
+
- nanoc-tidy.rb.gemspec
|
131
|
+
- test/fixtures/fixture.html
|
132
|
+
- test/results/default_options.html
|
133
|
+
- test/results/upper_option.html
|
134
|
+
- test/setup.rb
|
135
|
+
- test/tidy_filter_test.rb
|
136
|
+
homepage: https://github.com/0x1eef/nanoc-tidy.rb#readme
|
137
|
+
licenses:
|
138
|
+
- 0BSD
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubygems_version: 3.4.10
|
156
|
+
signing_key:
|
157
|
+
specification_version: 4
|
158
|
+
summary: nanoc-tidy.rb integrates tidy-html5 into nanoc.
|
159
|
+
test_files: []
|