crazy_harry 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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
 
@@ -4,6 +4,7 @@ module CrazyHarry
4
4
  include CrazyHarry::Change
5
5
  include CrazyHarry::Redact
6
6
  include CrazyHarry::Translate
7
+ include CrazyHarry::Foster
7
8
 
8
9
  attr_accessor :fragment, :scope, :steps, :text
9
10
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module CrazyHarry
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/crazy_harry.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'loofah'
2
2
 
3
- %w(default change redact translate base version).each do |load_lib|
3
+ %w(default foster change redact translate base version).each do |load_lib|
4
4
  require_relative "crazy_harry/#{load_lib}"
5
5
  end
6
6
 
@@ -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.0
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-08-14 00:00:00.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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.22
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