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 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