trenni-sanitize 0.2.0 → 0.3.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 +5 -5
- data/.travis.yml +19 -14
- data/README.md +16 -11
- data/lib/trenni/sanitize/version.rb +1 -1
- data/spec/spec_helper.rb +2 -19
- data/spec/trenni/sanitize/benchmark_spec.rb +2 -2
- data/trenni-sanitize.gemspec +2 -1
- metadata +19 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 692099586ce2e3dfb2e1ff3911cafa0e39a22d5dac957ef4401f3fd31be32565
|
4
|
+
data.tar.gz: d0a4d9ff3f8e5937119f08638b188c6d7c386fa428fb3c98fe64334d8fd8e705
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4668acf3447f634251f01a4b3ffef72592552ff6da12178b7201a221e25b6dc1f0f6115903201ad75532e73d6df93dda13cb8e4cb68a890e651569710700852c
|
7
|
+
data.tar.gz: bde8b725c3a2455b3eb762eb25036538d4a591aa77e3e6e5c30642a8680f3907fd4f429c906e893b70401b1e7b9b1616dd4153f38d7c0533dfc698351658aebe
|
data/.travis.yml
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
- 2.2
|
6
|
-
- 2.3
|
7
|
-
- 2.4
|
8
|
-
- ruby-head
|
9
|
-
- jruby-head
|
10
|
-
- rbx-2
|
11
|
-
env:
|
12
|
-
- COVERAGE=true
|
2
|
+
dist: xenial
|
3
|
+
cache: bundler
|
4
|
+
|
13
5
|
matrix:
|
6
|
+
include:
|
7
|
+
- rvm: 2.3
|
8
|
+
- rvm: 2.4
|
9
|
+
- rvm: 2.5
|
10
|
+
- rvm: 2.6
|
11
|
+
- rvm: 2.6
|
12
|
+
os: osx
|
13
|
+
- rvm: 2.6
|
14
|
+
env: COVERAGE=BriefSummary,Coveralls
|
15
|
+
- rvm: truffleruby
|
16
|
+
- rvm: jruby-head
|
17
|
+
env: JRUBY_OPTS="--debug -X+O"
|
18
|
+
- rvm: ruby-head
|
14
19
|
allow_failures:
|
15
|
-
- rvm:
|
16
|
-
- rvm:
|
17
|
-
- rvm:
|
20
|
+
- rvm: truffleruby
|
21
|
+
- rvm: ruby-head
|
22
|
+
- rvm: jruby-head
|
data/README.md
CHANGED
@@ -1,31 +1,36 @@
|
|
1
|
-
#
|
1
|
+
# Trenni::Sanitize
|
2
2
|
|
3
|
-
Sanitize markup by adding, changing or removing tags.
|
3
|
+
Sanitize markup by adding, changing or removing tags, using the [trenni] stream processor (which has a naive C implementation).
|
4
4
|
|
5
5
|
[](http://travis-ci.org/ioquatix/trenni-sanitize)
|
6
6
|
[](https://codeclimate.com/github/ioquatix/trenni-sanitize)
|
7
7
|
[](https://coveralls.io/r/ioquatix/trenni-sanitize)
|
8
8
|
|
9
|
+
[trenni]: https://github.com/ioquatix/trenni
|
10
|
+
|
9
11
|
## Motivation
|
10
12
|
|
11
|
-
I use the [sanitize] gem and generally it's great. However, it's performance can be an issue and additionally, it doesn't preserve tag namespaces when parsing fragments due to how Nokogiri works internally.
|
13
|
+
I use the [sanitize] gem and generally it's great. However, it's performance can be an issue and additionally, it doesn't preserve tag namespaces when parsing fragments due to how Nokogiri works internally. This is a problem when processing content destined for [utopia] since it heavily depends on tag namespaces.
|
12
14
|
|
13
15
|
[sanitize]: https://github.com/rgrove/sanitize/
|
16
|
+
[utopia]: https://github.com/ioquatix/utopia
|
14
17
|
|
15
18
|
## Is it fast?
|
16
19
|
|
17
20
|
In my informal testing, this gem is about ~50x faster than the [sanitize] gem when generating plain text.
|
18
21
|
|
22
|
+
```
|
19
23
|
Warming up --------------------------------------
|
20
|
-
|
24
|
+
Sanitize 96.000 i/100ms
|
21
25
|
Trenni::Sanitize 4.447k i/100ms
|
22
26
|
Calculating -------------------------------------
|
23
|
-
|
27
|
+
Sanitize 958.020 (± 4.5%) i/s - 4.800k in 5.020564s
|
24
28
|
Trenni::Sanitize 44.718k (± 4.2%) i/s - 226.797k in 5.080756s
|
25
29
|
|
26
30
|
Comparison:
|
27
31
|
Trenni::Sanitize: 44718.1 i/s
|
28
|
-
|
32
|
+
Sanitize: 958.0 i/s - 46.68x slower
|
33
|
+
```
|
29
34
|
|
30
35
|
## Installation
|
31
36
|
|
@@ -52,7 +57,7 @@ You can extract text using something similar to the following parser delegate:
|
|
52
57
|
```ruby
|
53
58
|
class Text < Trenni::Sanitize::Filter
|
54
59
|
def filter(node)
|
55
|
-
skip!(TAG)
|
60
|
+
node.skip!(TAG)
|
56
61
|
end
|
57
62
|
|
58
63
|
def doctype(string)
|
@@ -78,16 +83,16 @@ class Fragment < Trenni::Sanitize::Filter
|
|
78
83
|
'em' => [],
|
79
84
|
'strong' => [],
|
80
85
|
'p' => [],
|
81
|
-
'img' => [
|
82
|
-
'a' => ['href'
|
86
|
+
'img' => ['src', 'alt', 'width', 'height'],
|
87
|
+
'a' => ['href']
|
83
88
|
}.freeze
|
84
89
|
|
85
90
|
def filter(node)
|
86
91
|
if attributes = ALLOWED_TAGS[node.name]
|
87
|
-
node.tag.attributes.slice!(attributes)
|
92
|
+
node.tag.attributes.slice!(*attributes)
|
88
93
|
else
|
89
94
|
# Skip the tag, and all contents
|
90
|
-
skip!(ALL)
|
95
|
+
node.skip!(ALL)
|
91
96
|
end
|
92
97
|
end
|
93
98
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,23 +1,6 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
require 'simplecov'
|
5
|
-
|
6
|
-
SimpleCov.start do
|
7
|
-
add_filter "/spec/"
|
8
|
-
end
|
9
|
-
|
10
|
-
if ENV['TRAVIS']
|
11
|
-
require 'coveralls'
|
12
|
-
Coveralls.wear!
|
13
|
-
end
|
14
|
-
rescue LoadError
|
15
|
-
warn "Could not load simplecov: #{$!}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
require "bundler/setup"
|
20
|
-
require "trenni/sanitize"
|
2
|
+
require 'covered/rspec'
|
3
|
+
require 'bundler/setup'
|
21
4
|
|
22
5
|
begin
|
23
6
|
require 'ruby-prof'
|
@@ -18,8 +18,8 @@ RSpec.describe Trenni::Sanitize do
|
|
18
18
|
|
19
19
|
text = buffer.read
|
20
20
|
|
21
|
-
puts Sanitize.fragment(text).inspect
|
22
|
-
puts Trenni::Sanitize::Text.parse(buffer).output.inspect
|
21
|
+
# puts Sanitize.fragment(text).inspect
|
22
|
+
# puts Trenni::Sanitize::Text.parse(buffer).output.inspect
|
23
23
|
|
24
24
|
Benchmark.ips do |x|
|
25
25
|
x.report("Sanitize") do
|
data/trenni-sanitize.gemspec
CHANGED
@@ -17,8 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
spec.required_ruby_version = '~> 2.1'
|
19
19
|
|
20
|
-
spec.add_dependency "trenni", '~> 3.5
|
20
|
+
spec.add_dependency "trenni", '~> 3.5'
|
21
21
|
|
22
|
+
spec.add_development_dependency "covered"
|
22
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
24
|
spec.add_development_dependency "rspec", "~> 3.4"
|
24
25
|
spec.add_development_dependency "rake"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trenni-sanitize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trenni
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.5
|
19
|
+
version: '3.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.5
|
26
|
+
version: '3.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: covered
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,8 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '0'
|
113
127
|
requirements: []
|
114
|
-
|
115
|
-
rubygems_version: 2.6.12
|
128
|
+
rubygems_version: 3.0.3
|
116
129
|
signing_key:
|
117
130
|
specification_version: 4
|
118
131
|
summary: Sanitize markdown according to a set of rules.
|