govspeak 0.8.6 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/govspeak.rb +5 -0
- data/test/govspeak_test.rb +56 -26
- metadata +46 -43
data/lib/govspeak.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'kramdown'
|
2
2
|
require 'govspeak/header_extractor'
|
3
|
+
require 'htmlentities'
|
3
4
|
|
4
5
|
module Govspeak
|
5
6
|
|
@@ -22,6 +23,10 @@ module Govspeak
|
|
22
23
|
@doc.to_html
|
23
24
|
end
|
24
25
|
|
26
|
+
def to_text
|
27
|
+
HTMLEntities.new.decode(to_html.gsub(/(?:<[^>]+>|\s)+/, " ").strip)
|
28
|
+
end
|
29
|
+
|
25
30
|
def headers
|
26
31
|
Govspeak::HeaderExtractor.convert(@doc).first
|
27
32
|
end
|
data/test/govspeak_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
require 'simplecov'
|
2
4
|
require 'simplecov-rcov'
|
3
5
|
|
@@ -46,48 +48,61 @@ class GovspeakTest < Test::Unit::TestCase
|
|
46
48
|
], document.headers
|
47
49
|
end
|
48
50
|
|
51
|
+
test "extracts text with no HTML and normalised spacing" do
|
52
|
+
input = "# foo\n\nbar baz "
|
53
|
+
doc = Govspeak::Document.new(input)
|
54
|
+
assert_equal "foo bar baz", doc.to_text
|
55
|
+
end
|
56
|
+
|
49
57
|
test "govspark extensions" do
|
50
58
|
markdown_regression_tests = [
|
51
59
|
{
|
52
60
|
input: "^ I am very informational ^",
|
53
61
|
output: %{<div class="application-notice info-notice">
|
54
62
|
<p>I am very informational</p>
|
55
|
-
</div>}
|
63
|
+
</div>},
|
64
|
+
text: "I am very informational"
|
56
65
|
}, {
|
57
66
|
input: "The following is very informational\n^ I am very informational ^",
|
58
67
|
output: %{<p>The following is very informational</p>
|
59
68
|
|
60
69
|
<div class="application-notice info-notice">
|
61
70
|
<p>I am very informational</p>
|
62
|
-
</div>}
|
71
|
+
</div>},
|
72
|
+
text: "The following is very informational I am very informational"
|
63
73
|
}, {
|
64
74
|
input: "^ I am very informational",
|
65
75
|
output: %{<div class="application-notice info-notice">
|
66
76
|
<p>I am very informational</p>
|
67
|
-
</div>}
|
77
|
+
</div>},
|
78
|
+
text: "I am very informational"
|
68
79
|
}, {
|
69
80
|
input: "@ I am very important @",
|
70
81
|
output: %{<div class="advisory"><p><strong>I am very important</strong></p>
|
71
|
-
</div>}
|
82
|
+
</div>},
|
83
|
+
text: "I am very important"
|
72
84
|
}, {
|
73
85
|
input: "The following is very important
|
74
86
|
@ I am very important @",
|
75
87
|
output: %{<p>The following is very important</p>
|
76
88
|
|
77
89
|
<div class="advisory"><p><strong>I am very important</strong></p>
|
78
|
-
</div>}
|
90
|
+
</div>},
|
91
|
+
text: "The following is very important I am very important"
|
79
92
|
}, {
|
80
93
|
input: "% I am very helpful %",
|
81
94
|
output: %{<div class="application-notice help-notice">
|
82
95
|
<p>I am very helpful</p>
|
83
|
-
</div>}
|
96
|
+
</div>},
|
97
|
+
text: "I am very helpful"
|
84
98
|
}, {
|
85
99
|
input: "The following is very helpful\n% I am very helpful %",
|
86
100
|
output: %{<p>The following is very helpful</p>
|
87
101
|
|
88
102
|
<div class="application-notice help-notice">
|
89
103
|
<p>I am very helpful</p>
|
90
|
-
</div>}
|
104
|
+
</div>},
|
105
|
+
text: "The following is very helpful I am very helpful"
|
91
106
|
}, {
|
92
107
|
input: "## Hello ##\n\n% I am very helpful %\r\n### Young Workers ###\n\n",
|
93
108
|
output: %{<h2 id="hello">Hello</h2>
|
@@ -96,38 +111,46 @@ class GovspeakTest < Test::Unit::TestCase
|
|
96
111
|
<p>I am very helpful</p>
|
97
112
|
</div>
|
98
113
|
|
99
|
-
<h3 id="young-workers">Young Workers</h3>}
|
114
|
+
<h3 id="young-workers">Young Workers</h3>},
|
115
|
+
text: "Hello I am very helpful Young Workers"
|
100
116
|
}, {
|
101
117
|
input: "% I am very helpful",
|
102
118
|
output: %{<div class="application-notice help-notice">
|
103
119
|
<p>I am very helpful</p>
|
104
|
-
</div>}
|
120
|
+
</div>},
|
121
|
+
text: "I am very helpful"
|
105
122
|
}, {
|
106
123
|
input: "This is a [link](http://www.google.com) isn't it?",
|
107
|
-
output: '<p>This is a <a href="http://www.google.com">link</a> isn’t it?</p>'
|
124
|
+
output: '<p>This is a <a href="http://www.google.com">link</a> isn’t it?</p>',
|
125
|
+
text: "This is a link isn’t it?"
|
108
126
|
}, {
|
109
127
|
input: "This is a [link with an at sign in it](http://www.google.com/@dg/@this) isn't it?",
|
110
|
-
output: '<p>This is a <a href="http://www.google.com/@dg/@this">link with an at sign in it</a> isn’t it?</p>'
|
128
|
+
output: '<p>This is a <a href="http://www.google.com/@dg/@this">link with an at sign in it</a> isn’t it?</p>',
|
129
|
+
text: "This is a link with an at sign in it isn’t it?"
|
111
130
|
}, {
|
112
131
|
input: "HTML
|
113
132
|
|
114
133
|
*[HTML]: Hyper Text Markup Language",
|
115
|
-
output: %{<p><abbr title="Hyper Text Markup Language">HTML</abbr></p>}
|
134
|
+
output: %{<p><abbr title="Hyper Text Markup Language">HTML</abbr></p>},
|
135
|
+
text: "HTML"
|
116
136
|
}, {
|
117
137
|
input: "x[a link](http://rubyforge.org)x",
|
118
|
-
output: '<p><a href="http://rubyforge.org" rel="external">a link</a></p>'
|
138
|
+
output: '<p><a href="http://rubyforge.org" rel="external">a link</a></p>',
|
139
|
+
text: "a link"
|
119
140
|
}, {
|
120
141
|
input: "$!
|
121
142
|
rainbow
|
122
143
|
$!",
|
123
144
|
output: %{<div class="summary">
|
124
145
|
<p>rainbow</p>
|
125
|
-
</div>}
|
146
|
+
</div>},
|
147
|
+
text: "rainbow"
|
126
148
|
}, {
|
127
149
|
input: "$C help, send cake $C",
|
128
150
|
output: %{<div class="contact">
|
129
151
|
<p>help, send cake</p>
|
130
|
-
</div>}
|
152
|
+
</div>},
|
153
|
+
text: "help, send cake"
|
131
154
|
}, {
|
132
155
|
input: "$A
|
133
156
|
street
|
@@ -135,31 +158,36 @@ road
|
|
135
158
|
$A",
|
136
159
|
output: %{<div class="address vcard"><div class="adr org fn"><p>
|
137
160
|
street<br />road<br />
|
138
|
-
</p></div></div>}
|
161
|
+
</p></div></div>},
|
162
|
+
text: "street road"
|
139
163
|
}, {
|
140
164
|
input: "$P
|
141
165
|
$I
|
142
166
|
help
|
143
167
|
$I
|
144
168
|
$P",
|
145
|
-
output: %{<div class="place">\n<div class="information">\n<p>help</p>\n</div>\n</div>}
|
169
|
+
output: %{<div class="place">\n<div class="information">\n<p>help</p>\n</div>\n</div>},
|
170
|
+
text: "help"
|
146
171
|
}, {
|
147
172
|
input: "$D
|
148
173
|
can you tell me how to get to...
|
149
174
|
$D",
|
150
175
|
output: %{<div class="form-download">
|
151
|
-
<p>can you tell me how to get to
|
152
|
-
</div>}
|
176
|
+
<p>can you tell me how to get to…</p>
|
177
|
+
</div>},
|
178
|
+
text: "can you tell me how to get to…"
|
153
179
|
}, {
|
154
180
|
input: "1. rod
|
155
181
|
2. jane
|
156
182
|
3. freddy",
|
157
|
-
output: "<ol>\n <li>rod</li>\n <li>jane</li>\n <li>freddy</li>\n</ol>"
|
183
|
+
output: "<ol>\n <li>rod</li>\n <li>jane</li>\n <li>freddy</li>\n</ol>",
|
184
|
+
text: "rod jane freddy"
|
158
185
|
}, {
|
159
186
|
input: "
|
160
187
|
((http://maps.google.co.uk/maps?q=Winkfield+Rd,+Windsor,+Berkshire+SL4+4AY&hl=en&sll=53.800651,-4.064941&sspn=17.759517,42.055664&vpsrc=0&z=14))
|
161
188
|
",
|
162
|
-
output: %{<div class="map"><iframe width="200" height="200" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?q=Winkfield+Rd,+Windsor,+Berkshire+SL4+4AY&hl=en&sll=53.800651,-4.064941&sspn=17.759517,42.055664&vpsrc=0&z=14&output=embed"></iframe><br /><small><a href="http://maps.google.co.uk/maps?q=Winkfield+Rd,+Windsor,+Berkshire+SL4+4AY&hl=en&sll=53.800651,-4.064941&sspn=17.759517,42.055664&vpsrc=0&z=14">View Larger Map</a></small></div>}
|
189
|
+
output: %{<div class="map"><iframe width="200" height="200" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?q=Winkfield+Rd,+Windsor,+Berkshire+SL4+4AY&hl=en&sll=53.800651,-4.064941&sspn=17.759517,42.055664&vpsrc=0&z=14&output=embed"></iframe><br /><small><a href="http://maps.google.co.uk/maps?q=Winkfield+Rd,+Windsor,+Berkshire+SL4+4AY&hl=en&sll=53.800651,-4.064941&sspn=17.759517,42.055664&vpsrc=0&z=14">View Larger Map</a></small></div>},
|
190
|
+
text: "View Larger Map"
|
163
191
|
}, {
|
164
192
|
input: "s1. zippy
|
165
193
|
s2. bungle
|
@@ -169,14 +197,16 @@ s3. george
|
|
169
197
|
<li><p>zippy</p>\n</li>
|
170
198
|
<li><p>bungle</p>\n</li>
|
171
199
|
<li><p>george</p>\n</li>
|
172
|
-
</ol>}
|
200
|
+
</ol>},
|
201
|
+
text: "zippy bungle george"
|
173
202
|
}
|
174
203
|
]
|
175
204
|
|
176
|
-
markdown_regression_tests.each do |t|
|
177
|
-
|
178
|
-
|
179
|
-
|
205
|
+
markdown_regression_tests.each do |t|
|
206
|
+
doc = Govspeak::Document.new(t[:input])
|
207
|
+
assert_equal t[:output].strip, doc.to_html.strip
|
208
|
+
assert_equal t[:text], doc.to_text
|
209
|
+
end
|
180
210
|
|
181
211
|
end
|
182
212
|
|
metadata
CHANGED
@@ -1,53 +1,59 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: govspeak
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.7
|
4
5
|
prerelease:
|
5
|
-
version: 0.8.6
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Ben Griffiths
|
9
9
|
- James Stewart
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-01-11 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: kramdown
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &20300980 !ruby/object:Gem::Requirement
|
20
18
|
none: false
|
21
|
-
requirements:
|
19
|
+
requirements:
|
22
20
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
21
|
+
- !ruby/object:Gem::Version
|
24
22
|
version: 0.13.3
|
25
23
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
24
|
prerelease: false
|
30
|
-
|
25
|
+
version_requirements: *20300980
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: htmlentities
|
28
|
+
requirement: &20299900 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *20299900
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rake
|
39
|
+
requirement: &20299160 !ruby/object:Gem::Requirement
|
31
40
|
none: false
|
32
|
-
requirements:
|
41
|
+
requirements:
|
33
42
|
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
43
|
+
- !ruby/object:Gem::Version
|
35
44
|
version: 0.8.0
|
36
45
|
type: :development
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
email:
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *20299160
|
48
|
+
description: ! "A set of extensions to markdown layered on top of the kramdown \nlibrary
|
49
|
+
for use in the UK Government Single Domain project"
|
50
|
+
email:
|
42
51
|
- ben@alphagov.co.uk
|
43
52
|
- james.stewart@digital.cabinet-office.gov.uk
|
44
53
|
executables: []
|
45
|
-
|
46
54
|
extensions: []
|
47
|
-
|
48
55
|
extra_rdoc_files: []
|
49
|
-
|
50
|
-
files:
|
56
|
+
files:
|
51
57
|
- lib/govspeak/header_extractor.rb
|
52
58
|
- lib/govspeak.rb
|
53
59
|
- Gemfile
|
@@ -56,31 +62,28 @@ files:
|
|
56
62
|
- test/test_helper.rb
|
57
63
|
homepage: http://github.com/alphagov/govspeak
|
58
64
|
licenses: []
|
59
|
-
|
60
65
|
post_install_message:
|
61
66
|
rdoc_options: []
|
62
|
-
|
63
|
-
require_paths:
|
67
|
+
require_paths:
|
64
68
|
- lib
|
65
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
70
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version:
|
71
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
76
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version:
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
77
81
|
requirements: []
|
78
|
-
|
79
82
|
rubyforge_project:
|
80
|
-
rubygems_version: 1.8.
|
83
|
+
rubygems_version: 1.8.11
|
81
84
|
signing_key:
|
82
85
|
specification_version: 3
|
83
86
|
summary: Markup language for single domain
|
84
|
-
test_files:
|
87
|
+
test_files:
|
85
88
|
- test/govspeak_test.rb
|
86
89
|
- test/test_helper.rb
|