devcenter-parser 1.2.1 → 1.3.1
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/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
|