devcenter-parser 1.2.1 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/devcenter-parser.rb +8 -6
- data/test/devcenter-parser_test.rb +53 -39
- metadata +2 -2
data/lib/devcenter-parser.rb
CHANGED
@@ -6,7 +6,7 @@ require 'sanitize'
|
|
6
6
|
|
7
7
|
module DevcenterParser
|
8
8
|
|
9
|
-
VERSION = '1.
|
9
|
+
VERSION = '1.3.1'
|
10
10
|
|
11
11
|
AVAILABLE_FLAVOURS = [:github, :maruku]
|
12
12
|
|
@@ -90,20 +90,22 @@ module DevcenterParser
|
|
90
90
|
|
91
91
|
def self.maruku_underscores_to_dashes_in_subheader_anchors(doc)
|
92
92
|
doc.css("h2,h3,h4,h5,h6").each do |node|
|
93
|
-
|
94
|
-
node.attributes['id'].value = node.attributes['id'].value.gsub(/_+/,'-')
|
95
|
-
end
|
93
|
+
node['id'] = subheader_id(node.content)
|
96
94
|
end
|
97
95
|
doc
|
98
96
|
end
|
99
97
|
|
100
98
|
def self.github_underscores_to_dashes_in_subheader_anchors(doc)
|
101
99
|
doc.css("h2,h3,h4,h5,h6").each do |node|
|
102
|
-
node['id'] = node.content
|
100
|
+
node['id'] = subheader_id(node.content)
|
103
101
|
end
|
104
102
|
doc
|
105
103
|
end
|
106
104
|
|
105
|
+
def self.subheader_id(content)
|
106
|
+
content.to_s.downcase.gsub(/\W+/, '-').gsub(/\A-+|-+\Z/, '')
|
107
|
+
end
|
108
|
+
|
107
109
|
def self.github_parse_special_blocks(doc)
|
108
110
|
doc.css('blockquote>p:first').each do |node|
|
109
111
|
if match = node.inner_html.match(/\A\W*(callout|warning|note)\W/)
|
@@ -116,7 +118,7 @@ module DevcenterParser
|
|
116
118
|
|
117
119
|
def self.convert_to_article_links_all_relative_links_with_missing_initial_slashes(doc)
|
118
120
|
doc.css('a').each do |node|
|
119
|
-
unless node['href'] =~ /\Ahttp|\A\/|\Amailto\:|\A#/
|
121
|
+
unless node['href'].nil? || node['href'] =~ /\Ahttp|\A\/|\Amailto\:|\A#/
|
120
122
|
node['href'] = "/articles/#{node['href']}"
|
121
123
|
end
|
122
124
|
end
|
@@ -24,33 +24,40 @@ describe 'DevcenterParser' do
|
|
24
24
|
it 'respects existing ids' do
|
25
25
|
md = '<strong id="foo">clean</strong>'
|
26
26
|
assert_maruku_result md, '<strong id="foo">clean</strong>'
|
27
|
+
assert_github_result md, '<p><strong id="foo">clean</strong></p>'
|
27
28
|
end
|
28
29
|
|
29
30
|
it 'removes script tags and their content' do
|
30
31
|
md = '<strong>clean<script>alert("hack!")</script></strong>'
|
31
32
|
assert_maruku_result md, '<strong>clean</strong>'
|
33
|
+
assert_github_result md, '<p><strong>clean</strong></p>'
|
32
34
|
end
|
33
35
|
|
34
|
-
it '
|
36
|
+
it 'includes ids in subheaders' do
|
35
37
|
md = <<-MARKDOWN
|
36
38
|
## Foo Bar Header 123
|
37
39
|
|
38
40
|
Foo bar content
|
39
41
|
MARKDOWN
|
40
42
|
assert DevcenterParser.to_html(md, :github).include?('<h2 id="foo-bar-header-123">Foo Bar Header 123</h2>')
|
43
|
+
assert DevcenterParser.to_html(md, :maruku).include?('<h2 id="foo-bar-header-123">Foo Bar Header 123</h2>')
|
41
44
|
end
|
42
45
|
|
43
|
-
it '
|
44
|
-
|
45
|
-
|
46
|
+
it 'generates ids replacing inner non-alphanum chars with dashes' do
|
47
|
+
['Foo Bar', 'Foo-Bar', 'Foo#bar', 'Foo##Bar', 'Foo##Bar', '-$Foo##Bar$-'].each do |title|
|
48
|
+
md = <<-MARKDOWN
|
49
|
+
## #{title}
|
46
50
|
|
47
51
|
Foo bar content
|
48
|
-
|
49
|
-
assert DevcenterParser.to_html(md, :
|
52
|
+
MARKDOWN
|
53
|
+
assert DevcenterParser.to_html(md, :github).include?("<h2 id=\"foo-bar\">#{title}</h2>"), "GitHub with title #{title}: " + DevcenterParser.to_html(md, :github)
|
54
|
+
assert DevcenterParser.to_html(md, :maruku).include?("<h2 id=\"foo-bar\">#{title}</h2>"), "Maruku: " + DevcenterParser.to_html(md, :maruku)
|
55
|
+
end
|
50
56
|
end
|
51
57
|
|
52
|
-
|
53
|
-
|
58
|
+
describe 'github markdown' do
|
59
|
+
it 'github markdown supports regular block quotes without callout|warning|note' do
|
60
|
+
md = <<-MARKDOWN
|
54
61
|
Testing
|
55
62
|
|
56
63
|
> not a callout
|
@@ -58,9 +65,9 @@ Testing
|
|
58
65
|
> normal
|
59
66
|
|
60
67
|
And that's it.
|
61
|
-
|
68
|
+
MARKDOWN
|
62
69
|
|
63
|
-
|
70
|
+
html = <<-HTML
|
64
71
|
<p>Testing</p>
|
65
72
|
|
66
73
|
<blockquote>
|
@@ -70,11 +77,11 @@ normal</p>
|
|
70
77
|
</blockquote>
|
71
78
|
|
72
79
|
<p>And that's it.</p>
|
73
|
-
|
80
|
+
HTML
|
74
81
|
|
75
|
-
|
82
|
+
assert_github_result(md, html)
|
76
83
|
|
77
|
-
|
84
|
+
md = <<-MARKDOWN
|
78
85
|
Testing
|
79
86
|
|
80
87
|
> calloutnonono
|
@@ -82,9 +89,9 @@ Testing
|
|
82
89
|
> normal
|
83
90
|
|
84
91
|
And that's it.
|
85
|
-
|
92
|
+
MARKDOWN
|
86
93
|
|
87
|
-
|
94
|
+
html = <<-HTML
|
88
95
|
<p>Testing</p>
|
89
96
|
|
90
97
|
<blockquote>
|
@@ -94,14 +101,14 @@ normal</p>
|
|
94
101
|
</blockquote>
|
95
102
|
|
96
103
|
<p>And that's it.</p>
|
97
|
-
|
104
|
+
HTML
|
98
105
|
|
99
|
-
|
100
|
-
|
106
|
+
assert_github_result(md, html)
|
107
|
+
end
|
101
108
|
|
102
|
-
|
103
|
-
|
104
|
-
|
109
|
+
it 'github markdown supports "> callout" and ">callout" and parses inner markdown' do
|
110
|
+
mds = []
|
111
|
+
mds << <<-MARKDOWN
|
105
112
|
Testing
|
106
113
|
|
107
114
|
> callout
|
@@ -109,9 +116,9 @@ Testing
|
|
109
116
|
> normal
|
110
117
|
|
111
118
|
And that's it.
|
112
|
-
|
119
|
+
MARKDOWN
|
113
120
|
|
114
|
-
|
121
|
+
mds << <<-MARKDOWN
|
115
122
|
Testing
|
116
123
|
|
117
124
|
>callout
|
@@ -119,9 +126,9 @@ Testing
|
|
119
126
|
>normal
|
120
127
|
|
121
128
|
And that's it.
|
122
|
-
|
129
|
+
MARKDOWN
|
123
130
|
|
124
|
-
|
131
|
+
html = <<-HTML
|
125
132
|
<p>Testing</p>
|
126
133
|
|
127
134
|
<div class="callout">
|
@@ -130,16 +137,16 @@ normal</p>
|
|
130
137
|
</div>
|
131
138
|
|
132
139
|
<p>And that's it.</p>
|
133
|
-
|
140
|
+
HTML
|
134
141
|
|
135
|
-
|
136
|
-
|
142
|
+
mds.each do |md|
|
143
|
+
assert_github_result(md, html)
|
144
|
+
end
|
137
145
|
end
|
138
|
-
end
|
139
146
|
|
140
|
-
|
141
|
-
|
142
|
-
|
147
|
+
it 'github markdown supports "> callout" and ">callout", parses inner markdown and allows paragraphs' do
|
148
|
+
mds = []
|
149
|
+
mds << <<-MARKDOWN
|
143
150
|
Testing
|
144
151
|
|
145
152
|
> callout
|
@@ -148,9 +155,9 @@ Testing
|
|
148
155
|
> normal
|
149
156
|
|
150
157
|
And that's it.
|
151
|
-
|
158
|
+
MARKDOWN
|
152
159
|
|
153
|
-
|
160
|
+
mds << <<-MARKDOWN
|
154
161
|
Testing
|
155
162
|
|
156
163
|
>callout
|
@@ -159,9 +166,9 @@ Testing
|
|
159
166
|
>normal
|
160
167
|
|
161
168
|
And that's it.
|
162
|
-
|
169
|
+
MARKDOWN
|
163
170
|
|
164
|
-
|
171
|
+
html = <<-HTML
|
165
172
|
<p>Testing</p>
|
166
173
|
|
167
174
|
<div class="callout">
|
@@ -171,10 +178,11 @@ And that's it.
|
|
171
178
|
</div>
|
172
179
|
|
173
180
|
<p>And that's it.</p>
|
174
|
-
|
181
|
+
HTML
|
175
182
|
|
176
|
-
|
177
|
-
|
183
|
+
mds.each do |md|
|
184
|
+
assert_github_result(md, html)
|
185
|
+
end
|
178
186
|
end
|
179
187
|
end
|
180
188
|
|
@@ -202,6 +210,12 @@ And that's it.
|
|
202
210
|
end
|
203
211
|
end
|
204
212
|
|
213
|
+
it 'does not add href attribute to links where it does not exist' do
|
214
|
+
md = '<a name="heh"></a>'
|
215
|
+
assert_maruku_result md, md
|
216
|
+
assert_github_result md, "<p>#{md}</p>"
|
217
|
+
end
|
218
|
+
|
205
219
|
end
|
206
220
|
|
207
221
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devcenter-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: maruku
|