crazy_harry 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +17 -1
- data/crazy_harry.gemspec +3 -1
- data/lib/crazy_harry/base.rb +1 -0
- data/lib/crazy_harry/truncate.rb +10 -0
- data/lib/crazy_harry/version.rb +1 -1
- data/lib/crazy_harry.rb +1 -1
- data/spec/integration/crazy_harry_spec.rb +4 -2
- data/spec/lib/crazy_harry_spec.rb +1 -4
- data/spec/lib/truncate_spec.rb +19 -0
- metadata +60 -27
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTcyY2M3ZDU3ODY3NmZhMjI5YmQzNTViOGJkNDU3OWZhNWZhZGRlMQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MjcyMDFmOWI4NzMxY2RiNzhlYjNlZWQzOGUzNWE3MzdhYmU5Y2MzOA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MjlhYjM5NjUyYWE1NDg2YzM1MGUwYjdiMzcxNTZhZWMzYTQzZjczNDUzMDdl
|
10
|
+
ZWVhZjMyYzdmYjRkNjBkMjJiYjFmNzdlOTliMzZiYzlhMzg0Mjg4MDQ0OWZm
|
11
|
+
MjZjODQyZjkwZTQ5MWY2NTMxNTU2NjQyMDRkM2JlOTc1MDM2OTI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZWUxMTEzN2ExYTIxMmI5YTVhMTViNjRjMzExMmVlODY5YWYwZjlhZjIxYzk3
|
14
|
+
OGU2MGU1NDg4NTQwMTdhMzEzNzQ3MzYyOTc4YjY4MTAyOThlOTU4YjQxNzYy
|
15
|
+
MWYwZjk0NGViMTljODkyM2M0ODEyOWM0YTBlOWRhYzExMjgzNzA=
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ CrazyHarry wraps up a number these tasks in a simple DSL, while adding commands
|
|
34
34
|
|
35
35
|
## Default Actions
|
36
36
|
|
37
|
-
It automatically removes blank tags, converts `<br
|
37
|
+
It automatically removes blank tags, converts `<br />` tags to wrapped
|
38
38
|
paragraphs and de-dupes content.
|
39
39
|
|
40
40
|
## Chaining
|
@@ -107,6 +107,22 @@ only works for li tag for now.**
|
|
107
107
|
|
108
108
|
CrazyHarry.fragment('<li>Flying list tag</li>').foster!.to_s
|
109
109
|
|
110
|
+
will return:
|
111
|
+
|
112
|
+
<ul><li>Flying list tag</li></ul>
|
113
|
+
|
114
|
+
## Truncating
|
115
|
+
|
116
|
+
The `.truncate!` command will truncate input preserving HTML tags.
|
117
|
+
|
118
|
+
CrazyHarry.fragment( '<p>Long <b>text goes here</b></p>' ).truncate!(3)
|
119
|
+
|
120
|
+
will return
|
121
|
+
|
122
|
+
<p>Long <b>text goes</b>…</p>
|
123
|
+
|
124
|
+
It accepts hash of options and passes it to [HTML_Truncator](https://github.com/nono/HTML-Truncator). It returns self and can be chained with other commands.
|
125
|
+
|
110
126
|
## Known Issues/TODO
|
111
127
|
|
112
128
|
* De-duping does not take account of whitespace. So, `<p>Some Content</p>` and `<p>Some Content </p>` will not be treated as duplicates.
|
data/crazy_harry.gemspec
CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_development_dependency 'guard-rspec', '>=1.0.1'
|
25
25
|
s.add_development_dependency 'simplecov', '>=0.6.4'
|
26
26
|
|
27
|
-
s.add_runtime_dependency 'loofah', '
|
27
|
+
s.add_runtime_dependency 'loofah', '~>1'
|
28
28
|
s.add_runtime_dependency 'nokogiri', '>=1.5.5'
|
29
|
+
|
30
|
+
s.add_dependency 'html_truncator', '~>0.3'
|
29
31
|
end
|
data/lib/crazy_harry/base.rb
CHANGED
data/lib/crazy_harry/version.rb
CHANGED
data/lib/crazy_harry.rb
CHANGED
@@ -5,11 +5,12 @@ describe CrazyHarry do
|
|
5
5
|
let(:harry) { CrazyHarry }
|
6
6
|
|
7
7
|
it "should allow method chaining" do
|
8
|
-
harry.fragment('<script>STEAL COOKIE!</script><em>Place</em><p>Lodging</p><b>Location:</b>')
|
8
|
+
harry.fragment('<script>STEAL COOKIE!</script><em>Place</em><p>Lodging</p><b>Location:</b> Warsaw')
|
9
9
|
.redact!( unsafe: true, tags: 'em' )
|
10
10
|
.change!( from: 'b', to: 'h3' )
|
11
|
+
.truncate!(3, ellipsis: '...')
|
11
12
|
.translate!( from_text: 'Lodging', to_text: 'Hotel', add_attributes: { class: 'partner' } )
|
12
|
-
.to_s.should == 'Place <p class="partner">Hotel</p><h3 class="partner">Location:</h3
|
13
|
+
.to_s.should == 'Place <p class="partner">Hotel</p><h3 class="partner">Location:</h3>...'
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should not care about the chain order" do
|
@@ -17,6 +18,7 @@ describe CrazyHarry do
|
|
17
18
|
.translate!( from_text: 'Lodging', to_text: 'Hotel', add_attributes: { class: 'partner' } )
|
18
19
|
.redact!( unsafe: true, tags: 'em' )
|
19
20
|
.change!( from: 'b', to: 'h3' )
|
21
|
+
.truncate!(3)
|
20
22
|
.to_s.should == 'Place <p class="partner">Hotel</p><h3 class="partner">Location:</h3>'
|
21
23
|
end
|
22
24
|
|
@@ -75,10 +75,7 @@ describe CrazyHarry do
|
|
75
75
|
harry.fragment('<h3>Here</h3><p>Yep, here.</p><h3>Here</h3><p>Here again.</p>').to_s.should == '<h3>Here</h3><p>Yep, here.</p><p>Here again.</p>'
|
76
76
|
end
|
77
77
|
|
78
|
-
it "should de-dupe if the only content difference is whitespace"
|
79
|
-
pending "Too complicated for the first cut."
|
80
|
-
end
|
81
|
-
|
78
|
+
it "should de-dupe if the only content difference is whitespace"
|
82
79
|
end
|
83
80
|
|
84
81
|
context 'with default br processing overridden' do
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe CrazyHarry::Truncate do
|
5
|
+
let(:harry){ CrazyHarry }
|
6
|
+
|
7
|
+
it "truncate by number of words" do
|
8
|
+
harry.fragment('<p>text goes here</p>').truncate!(2).to_s.should == '<p>text goes…</p>'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "closes html tags properly" do
|
12
|
+
harry.fragment('<p>text <b>goes here</b></p>').truncate!(2).to_s.should == '<p>text <b>goes</b>…</p>'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "passes extra options to HTML_Truncator" do
|
16
|
+
harry.fragment('<p>text goes here</p>').truncate!(10, length_in_chars: true, ellipsis: ' (...)').to_s
|
17
|
+
.should == '<p>text goes (...)</p>'
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,82 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crazy_harry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- TA Tyree
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-09-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 2.10.0
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.10.0
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: guard
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ! '>='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 1.1.1
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.1
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: guard-rspec
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
45
|
- - ! '>='
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: 1.0.1
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.1
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: simplecov
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: 0.6.4
|
55
62
|
type: :development
|
56
63
|
prerelease: false
|
57
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.6.4
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: loofah
|
60
|
-
requirement:
|
61
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
62
72
|
requirements:
|
63
|
-
- -
|
73
|
+
- - ~>
|
64
74
|
- !ruby/object:Gem::Version
|
65
|
-
version: 1
|
75
|
+
version: '1'
|
66
76
|
type: :runtime
|
67
77
|
prerelease: false
|
68
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: nokogiri
|
71
|
-
requirement:
|
72
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
73
86
|
requirements:
|
74
87
|
- - ! '>='
|
75
88
|
- !ruby/object:Gem::Version
|
76
89
|
version: 1.5.5
|
77
90
|
type: :runtime
|
78
91
|
prerelease: false
|
79
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.5.5
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: html_truncator
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.3'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.3'
|
80
111
|
description: CrazyHarry is a high-level html fragment sanitiser/cleaner based on Loofah.
|
81
112
|
email:
|
82
113
|
- todd.tyree@lonelyplanet.co.uk
|
@@ -98,6 +129,7 @@ files:
|
|
98
129
|
- lib/crazy_harry/foster.rb
|
99
130
|
- lib/crazy_harry/redact.rb
|
100
131
|
- lib/crazy_harry/translate.rb
|
132
|
+
- lib/crazy_harry/truncate.rb
|
101
133
|
- lib/crazy_harry/version.rb
|
102
134
|
- rvmrc.example
|
103
135
|
- spec/fixtures/golden_nugget.html
|
@@ -108,30 +140,30 @@ files:
|
|
108
140
|
- spec/lib/foster_spec.rb
|
109
141
|
- spec/lib/redact_spec.rb
|
110
142
|
- spec/lib/translate_spec.rb
|
143
|
+
- spec/lib/truncate_spec.rb
|
111
144
|
- spec/spec_helper.rb
|
112
145
|
homepage: https://github.com/lonelyplanet/crazy_harry
|
113
146
|
licenses: []
|
147
|
+
metadata: {}
|
114
148
|
post_install_message:
|
115
149
|
rdoc_options: []
|
116
150
|
require_paths:
|
117
151
|
- lib
|
118
152
|
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
153
|
requirements:
|
121
154
|
- - ! '>='
|
122
155
|
- !ruby/object:Gem::Version
|
123
156
|
version: '0'
|
124
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
158
|
requirements:
|
127
159
|
- - ! '>='
|
128
160
|
- !ruby/object:Gem::Version
|
129
161
|
version: '0'
|
130
162
|
requirements: []
|
131
163
|
rubyforge_project: crazy_harry
|
132
|
-
rubygems_version:
|
164
|
+
rubygems_version: 2.2.1
|
133
165
|
signing_key:
|
134
|
-
specification_version:
|
166
|
+
specification_version: 4
|
135
167
|
summary: A High level HTML fragment sanitizer.
|
136
168
|
test_files:
|
137
169
|
- spec/fixtures/golden_nugget.html
|
@@ -142,4 +174,5 @@ test_files:
|
|
142
174
|
- spec/lib/foster_spec.rb
|
143
175
|
- spec/lib/redact_spec.rb
|
144
176
|
- spec/lib/translate_spec.rb
|
177
|
+
- spec/lib/truncate_spec.rb
|
145
178
|
- spec/spec_helper.rb
|