crazy_harry 0.1.0 → 0.1.2
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.
- data/README.md +8 -0
- data/lib/crazy_harry/base.rb +1 -0
- data/lib/crazy_harry/change.rb +23 -0
- data/lib/crazy_harry/foster.rb +25 -0
- data/lib/crazy_harry/version.rb +1 -1
- data/lib/crazy_harry.rb +1 -1
- data/spec/lib/change_spec.rb +5 -0
- data/spec/lib/foster_spec.rb +12 -0
- metadata +18 -45
data/README.md
CHANGED
@@ -100,12 +100,20 @@ will return:
|
|
100
100
|
|
101
101
|
<h3>Hotel</h3> lodging
|
102
102
|
|
103
|
+
## Fostering orphaned tags.
|
104
|
+
|
105
|
+
The `.foster!` command will wrap orphaned li tags in a ul tag. **This
|
106
|
+
only works for li tag for now.**
|
107
|
+
|
108
|
+
CrazyHarry.fragment('<li>Flying list tag</li>').foster!.to_s
|
109
|
+
|
103
110
|
## Known Issues/TODO
|
104
111
|
|
105
112
|
* De-duping does not take account of whitespace. So, `<p>Some Content</p>` and `<p>Some Content </p>` will not be treated as duplicates.
|
106
113
|
* Be able to turn off default actions.
|
107
114
|
* It should be able to work on documents as well as fragments.
|
108
115
|
* Merge `.translate!` with `.change!`
|
116
|
+
* Foster other orphaned tags besides just li.
|
109
117
|
|
110
118
|
## Contributing
|
111
119
|
|
data/lib/crazy_harry/base.rb
CHANGED
data/lib/crazy_harry/change.rb
CHANGED
@@ -16,6 +16,7 @@ module CrazyHarry
|
|
16
16
|
|
17
17
|
self.steps << generic_from_to
|
18
18
|
self.steps << unwrap_unnecessary_paragraphs
|
19
|
+
self.steps << foster_orphaned_nodes
|
19
20
|
|
20
21
|
run!
|
21
22
|
|
@@ -55,5 +56,27 @@ module CrazyHarry
|
|
55
56
|
Loofah::Elements::BLOCK_LEVEL.include?(node.children.first.name)
|
56
57
|
end
|
57
58
|
|
59
|
+
def foster_orphaned_nodes
|
60
|
+
Loofah::Scrubber.new do |node|
|
61
|
+
node.extend(FosterModule)
|
62
|
+
node.foster!
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
module FosterModule
|
68
|
+
def foster!
|
69
|
+
if orphaned_li?
|
70
|
+
self.replace wrap_li
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def orphaned_li?
|
75
|
+
name == 'li' && parent.name !~ /ol|ul/
|
76
|
+
end
|
77
|
+
|
78
|
+
def wrap_li
|
79
|
+
Nokogiri.make("<ul>#{self}</ul>")
|
80
|
+
end
|
58
81
|
end
|
59
82
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CrazyHarry
|
2
|
+
module Foster
|
3
|
+
|
4
|
+
def foster!
|
5
|
+
self.steps << foster_orphaned_li
|
6
|
+
|
7
|
+
run!
|
8
|
+
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def foster_orphaned_li
|
15
|
+
Loofah::Scrubber.new do |node|
|
16
|
+
node.replace("<ul>#{node}</ul>") if orphaned_li?(node)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def orphaned_li?(node)
|
21
|
+
node.name == 'li' && node.parent.name !~ /ol|ul/
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/crazy_harry/version.rb
CHANGED
data/lib/crazy_harry.rb
CHANGED
data/spec/lib/change_spec.rb
CHANGED
@@ -29,6 +29,11 @@ describe CrazyHarry::Change do
|
|
29
29
|
'<p><h3>Header</h3>Content</p>'
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should wrap orphaned list items" do
|
33
|
+
harry.fragment('<p><li>orphan</li><ul><li>item</li></p>').change!(from: 'b', to: 'h3').to_s.should ==
|
34
|
+
'<ul><li>orphan</li></ul><ul><li>item</li></ul>'
|
35
|
+
end
|
36
|
+
|
32
37
|
context "chaining" do
|
33
38
|
|
34
39
|
it "should be able to chain calls" do
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CrazyHarry::Foster do
|
4
|
+
|
5
|
+
let(:harry){ CrazyHarry }
|
6
|
+
|
7
|
+
it "should wrap orphaned list items" do
|
8
|
+
harry.fragment('<p><li>orphan</li><ul><li>item</li></p>').foster!.to_s.should ==
|
9
|
+
'<ul><li>orphan</li></ul><ul><li>item</li></ul>'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crazy_harry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2155892060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.10.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 2.10.0
|
24
|
+
version_requirements: *2155892060
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: guard
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &2155891280 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 1.1.1
|
38
33
|
type: :development
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.1.1
|
35
|
+
version_requirements: *2155891280
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: guard-rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &2155890600 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: 1.0.1
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.1
|
46
|
+
version_requirements: *2155890600
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: simplecov
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &2155889820 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: 0.6.4
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 0.6.4
|
57
|
+
version_requirements: *2155889820
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: loofah
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &2155889320 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: 1.2.1
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 1.2.1
|
68
|
+
version_requirements: *2155889320
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: nokogiri
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &2155888760 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,12 +76,7 @@ dependencies:
|
|
101
76
|
version: 1.5.5
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 1.5.5
|
79
|
+
version_requirements: *2155888760
|
110
80
|
description: CrazyHarry is a high-level html fragment sanitiser/cleaner based on Loofah.
|
111
81
|
email:
|
112
82
|
- todd.tyree@lonelyplanet.co.uk
|
@@ -125,6 +95,7 @@ files:
|
|
125
95
|
- lib/crazy_harry/base.rb
|
126
96
|
- lib/crazy_harry/change.rb
|
127
97
|
- lib/crazy_harry/default.rb
|
98
|
+
- lib/crazy_harry/foster.rb
|
128
99
|
- lib/crazy_harry/redact.rb
|
129
100
|
- lib/crazy_harry/translate.rb
|
130
101
|
- lib/crazy_harry/version.rb
|
@@ -134,6 +105,7 @@ files:
|
|
134
105
|
- spec/integration/crazy_harry_spec.rb
|
135
106
|
- spec/lib/change_spec.rb
|
136
107
|
- spec/lib/crazy_harry_spec.rb
|
108
|
+
- spec/lib/foster_spec.rb
|
137
109
|
- spec/lib/redact_spec.rb
|
138
110
|
- spec/lib/translate_spec.rb
|
139
111
|
- spec/spec_helper.rb
|
@@ -157,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
129
|
version: '0'
|
158
130
|
requirements: []
|
159
131
|
rubyforge_project: crazy_harry
|
160
|
-
rubygems_version: 1.8.
|
132
|
+
rubygems_version: 1.8.10
|
161
133
|
signing_key:
|
162
134
|
specification_version: 3
|
163
135
|
summary: A High level HTML fragment sanitizer.
|
@@ -167,6 +139,7 @@ test_files:
|
|
167
139
|
- spec/integration/crazy_harry_spec.rb
|
168
140
|
- spec/lib/change_spec.rb
|
169
141
|
- spec/lib/crazy_harry_spec.rb
|
142
|
+
- spec/lib/foster_spec.rb
|
170
143
|
- spec/lib/redact_spec.rb
|
171
144
|
- spec/lib/translate_spec.rb
|
172
145
|
- spec/spec_helper.rb
|