hologram 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/CHANGELOG.md +37 -0
- data/README.md +243 -5
- data/hologram.gemspec +2 -0
- data/lib/hologram.rb +2 -0
- data/lib/hologram/block_code_renderer.rb +45 -0
- data/lib/hologram/code_example_renderer.rb +73 -0
- data/lib/hologram/code_example_renderer/example.rb +27 -0
- data/lib/hologram/code_example_renderer/factory.rb +60 -0
- data/lib/hologram/code_example_renderer/renderers/haml_renderer.rb +17 -0
- data/lib/hologram/code_example_renderer/renderers/html_renderer.rb +6 -0
- data/lib/hologram/code_example_renderer/renderers/js_renderer.rb +5 -0
- data/lib/hologram/code_example_renderer/renderers/jsx_renderer.rb +4 -0
- data/lib/hologram/code_example_renderer/renderers/react_renderer.rb +21 -0
- data/lib/hologram/code_example_renderer/renderers/slim_renderer.rb +16 -0
- data/lib/hologram/code_example_renderer/template.rb +33 -0
- data/lib/hologram/display_message.rb +13 -0
- data/lib/hologram/doc_block_collection.rb +5 -1
- data/lib/hologram/doc_builder.rb +58 -7
- data/lib/hologram/doc_parser.rb +20 -4
- data/lib/hologram/document_block.rb +22 -4
- data/lib/hologram/link_helper.rb +18 -0
- data/lib/hologram/markdown_renderer.rb +56 -35
- data/lib/hologram/version.rb +1 -1
- data/lib/template/code_example_templates/js_example_template.html.erb +7 -0
- data/lib/template/code_example_templates/jsx_example_template.html.erb +7 -0
- data/lib/template/code_example_templates/markup_example_template.html.erb +10 -0
- data/lib/template/code_example_templates/markup_table_template.html.erb +23 -0
- data/lib/template/hologram_config.yml +23 -0
- data/spec/block_code_renderer_spec.rb +279 -0
- data/spec/code_example_renderer/example_spec.rb +26 -0
- data/spec/code_example_renderer/factory_spec.rb +102 -0
- data/spec/code_example_renderer/template_spec.rb +50 -0
- data/spec/display_message_spec.rb +18 -0
- data/spec/doc_block_collection_spec.rb +26 -1
- data/spec/doc_builder_spec.rb +28 -5
- data/spec/doc_parser_spec.rb +67 -7
- data/spec/document_block_spec.rb +33 -2
- data/spec/fixtures/source/components/button/buttons.css +8 -6
- data/spec/fixtures/source/components/button/skin/buttonSkins.css +17 -0
- data/spec/fixtures/styleguide/base_css.html +176 -52
- data/spec/fixtures/styleguide/index.html +6 -14
- data/spec/link_helper_spec.rb +57 -0
- data/spec/markdown_renderer_spec.rb +82 -0
- metadata +75 -19
@@ -1,6 +1,6 @@
|
|
1
1
|
module Hologram
|
2
2
|
class DocumentBlock
|
3
|
-
COMMENT_REGEX = /^\s*---\s(.*?)\s
|
3
|
+
COMMENT_REGEX = /^\s*---\s(.*?)\s---[\r]?$/m
|
4
4
|
|
5
5
|
attr_accessor :name, :parent, :children, :title, :categories, :markdown, :config, :heading, :errors
|
6
6
|
|
@@ -26,7 +26,7 @@ module Hologram
|
|
26
26
|
@config = config
|
27
27
|
@name = config['name']
|
28
28
|
@categories = Array(config['category'] || config['categories'])
|
29
|
-
@title = config['title']
|
29
|
+
@title = h(config['title'])
|
30
30
|
@parent = config['parent']
|
31
31
|
@markdown = markdown
|
32
32
|
|
@@ -51,8 +51,26 @@ module Hologram
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# sets the header tag based on how deep your nesting is
|
54
|
-
|
55
|
-
|
54
|
+
|
55
|
+
def markdown_with_heading(heading = 1, opts={})
|
56
|
+
include_sub_nav = opts[:include_sub_nav] || false
|
57
|
+
|
58
|
+
output = "\n\n<h#{heading.to_s} id=\"#{@name}\" class=\"#{css_class_name}\">#{@title}</h#{heading.to_s}>"
|
59
|
+
if include_sub_nav && !children.empty?
|
60
|
+
output += "\n<ul class=\"section-nav\">"
|
61
|
+
children.values.each do |child|
|
62
|
+
output += "\n <li><a href=\"\##{child.name}\">#{child.title}</a></li>"
|
63
|
+
end
|
64
|
+
output += "\n</ul>\n"
|
65
|
+
end
|
66
|
+
output += @markdown
|
67
|
+
output
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def css_class_name
|
73
|
+
'styleguide'
|
56
74
|
end
|
57
75
|
end
|
58
76
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Hologram
|
2
|
+
class LinkHelper
|
3
|
+
def initialize(pages)
|
4
|
+
@all_links = {}
|
5
|
+
pages.each do |page|
|
6
|
+
page[:component_names].each do |component_name|
|
7
|
+
@all_links[component_name] ||= "#{page[:name]}\##{component_name}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :all_links
|
13
|
+
|
14
|
+
def link_for(component_name)
|
15
|
+
all_links[component_name]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,52 +1,73 @@
|
|
1
|
+
require 'hologram/block_code_renderer'
|
2
|
+
|
3
|
+
include ERB::Util
|
4
|
+
|
1
5
|
module Hologram
|
2
6
|
class MarkdownRenderer < Redcarpet::Render::HTML
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
'<div class="codeExample">' + '<div class="exampleOutput">' + render_html(code, language) + '</div>' + '<div class="codeBlock"><div class="highlight"><pre>' + formatter.format(lexer.lex(code)) + '</pre></div></div>' + '</div>'
|
13
|
-
end
|
7
|
+
def initialize(opts={})
|
8
|
+
super(opts)
|
9
|
+
@link_helper = opts[:link_helper]
|
10
|
+
end
|
11
|
+
|
12
|
+
def list(contents, list_type)
|
13
|
+
case list_type
|
14
|
+
when :ordered
|
15
|
+
"<ol class=\"#{css_class_name}\">#{contents}</ol>"
|
14
16
|
else
|
15
|
-
|
16
|
-
'<div class="codeBlock"><div class="highlight"><pre>' + formatter.format(lexer.lex(code)) + '</pre></div></div>'
|
17
|
+
"<ul class=\"#{css_class_name}\">#{contents}</ul>"
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
def paragraph(text)
|
22
|
+
"<p class=\"#{css_class_name}\">#{text}</p>"
|
23
|
+
end
|
24
|
+
|
25
|
+
def table(header, body)
|
26
|
+
"<table class=\"#{css_class_name}\"> #{header} #{body} </table>"
|
27
|
+
end
|
28
|
+
|
29
|
+
def codespan(code)
|
30
|
+
"<code class=\"#{css_class_name}\">#{html_escape(code)}</code>"
|
31
|
+
end
|
32
|
+
|
33
|
+
def link(link, title, content)
|
34
|
+
"<a class=\"#{css_class_name}\" href=\"#{link}\" title=\"#{title || link}\">#{content}</a>"
|
29
35
|
end
|
30
36
|
|
31
|
-
def
|
32
|
-
|
37
|
+
def block_code(code, language)
|
38
|
+
BlockCodeRenderer.new(code, language).render
|
33
39
|
end
|
34
40
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
'html'
|
41
|
+
def preprocess(full_document)
|
42
|
+
if link_helper
|
43
|
+
link_defs + "\n" + full_document
|
44
|
+
else
|
45
|
+
full_document
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
def postprocess(full_document)
|
50
|
+
invalid_links = full_document.scan(/(?: \[ [\s\w]+ \]){2}/x)
|
51
|
+
|
52
|
+
invalid_links.each do |invalid_link|
|
53
|
+
component = /\[.+\]/.match(invalid_link)[1]
|
54
|
+
DisplayMessage.warning("Invalid reference link - #{invalid_link}." +
|
55
|
+
"Presumably the component #{component} does not exist.")
|
49
56
|
end
|
57
|
+
|
58
|
+
full_document
|
59
|
+
end
|
60
|
+
|
61
|
+
def css_class_name
|
62
|
+
'styleguide'
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
attr_reader :link_helper
|
68
|
+
|
69
|
+
def link_defs
|
70
|
+
@_link_defs ||= link_helper.all_links.map { |c_name, link| "[#{c_name}]: #{link}" }.join("\n")
|
50
71
|
end
|
51
72
|
end
|
52
73
|
end
|
data/lib/hologram/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
<div class="codeTable">
|
2
|
+
<table>
|
3
|
+
<tbody>
|
4
|
+
<% examples.each do |example| %>
|
5
|
+
<tr>
|
6
|
+
<th>
|
7
|
+
<div class="exampleOutput">
|
8
|
+
<%= example.rendered_example %>
|
9
|
+
</div>
|
10
|
+
</th>
|
11
|
+
<td>
|
12
|
+
<div class="codeBlock">
|
13
|
+
<div class="highlight">
|
14
|
+
<pre><%= example.code_example %></pre>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</tbody>
|
21
|
+
</table>
|
22
|
+
</div>
|
23
|
+
|
@@ -12,6 +12,17 @@ destination: ./docs
|
|
12
12
|
# You may put doc related assets here too: images, css, etc.
|
13
13
|
documentation_assets: ./doc_assets
|
14
14
|
|
15
|
+
# The folder that contains templates for rendering code examples.
|
16
|
+
# If you want to change the way code examples appear in the styleguide,
|
17
|
+
# modify the files in this folder
|
18
|
+
code_example_templates: ./code_example_templates
|
19
|
+
|
20
|
+
# The folder that contains custom code example renderers.
|
21
|
+
# If you want to create additional renderers that are not provided
|
22
|
+
# by Hologram (i.e. coffeescript renderer, jade renderer, etc)
|
23
|
+
# place them in this folder
|
24
|
+
code_example_renderers: ./code_example_renderers
|
25
|
+
|
15
26
|
# Any other asset folders that need to be copied to the destination
|
16
27
|
# folder. Typically this will include the css that you are trying to
|
17
28
|
# document. May also include additional folders as needed.
|
@@ -22,3 +33,15 @@ dependencies:
|
|
22
33
|
# Alternatively, you may have an index.md in the documentation assets
|
23
34
|
# folder instead of specifying this config.
|
24
35
|
index: basics
|
36
|
+
|
37
|
+
# To additionally output navigation for top level sections, set the value to
|
38
|
+
# 'section'. To output navigation for sub-sections,
|
39
|
+
# set the value to `all`
|
40
|
+
nav_level: all
|
41
|
+
|
42
|
+
# Hologram displays warnings when there are issues with your docs
|
43
|
+
# (e.g. if a component's parent is not found, if the _header.html and/or
|
44
|
+
# _footer.html files aren't found)
|
45
|
+
# If you want Hologram to exit on these warnings, set the value to 'true'
|
46
|
+
# (Default value is 'false')
|
47
|
+
exit_on_warnings: false
|
@@ -0,0 +1,279 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'hologram/block_code_renderer'
|
3
|
+
require 'haml'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
Hologram::CodeExampleRenderer.load_renderers_and_templates
|
7
|
+
|
8
|
+
describe Hologram::BlockCodeRenderer do
|
9
|
+
describe '#render' do
|
10
|
+
subject { Hologram::BlockCodeRenderer.new(code, markdown_language).render.strip }
|
11
|
+
|
12
|
+
context 'expected language' do
|
13
|
+
context 'react' do
|
14
|
+
let(:language) { 'react' }
|
15
|
+
let(:code) { '<ReactExample property="value">Example</ReactExample>' }
|
16
|
+
|
17
|
+
context 'when the language is a react_example' do
|
18
|
+
let(:markdown_language) { 'react_example' }
|
19
|
+
let(:div_id) { 'randomId' }
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
SecureRandom.stub('hex').and_return(div_id);
|
23
|
+
end
|
24
|
+
|
25
|
+
it { is_expected.to eq [
|
26
|
+
"<div class=\"codeExample\">",
|
27
|
+
" <div class=\"exampleOutput\">",
|
28
|
+
" <div id=\"#{div_id}\"></div>",
|
29
|
+
"<script type=\"text/jsx\">",
|
30
|
+
" React.render(",
|
31
|
+
" <ReactExample property=\"value\">Example</ReactExample>,",
|
32
|
+
" document.getElementById('#{div_id}')",
|
33
|
+
" );",
|
34
|
+
"</script>",
|
35
|
+
" </div>",
|
36
|
+
" <div class=\"codeBlock\">",
|
37
|
+
" <div class=\"highlight\">",
|
38
|
+
" <pre><span class=\"nt\"><ReactExample</span> <span class=\"na\">property=</span><span class=\"s\">\"value\"</span><span class=\"nt\">></span>Example<span class=\"nt\"></ReactExample></span></pre>",
|
39
|
+
" </div>",
|
40
|
+
" </div>",
|
41
|
+
"</div>"
|
42
|
+
].join("\n") }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'slim' do
|
47
|
+
let(:language) { 'slim' }
|
48
|
+
let(:code) { 'h1 Markup Example' }
|
49
|
+
|
50
|
+
context 'when the language is a slim_example' do
|
51
|
+
let(:markdown_language) { 'slim_example' }
|
52
|
+
|
53
|
+
it { is_expected.to eq [
|
54
|
+
"<div class=\"codeExample\">",
|
55
|
+
" <div class=\"exampleOutput\">",
|
56
|
+
" <h1>Markup Example</h1>",
|
57
|
+
" </div>",
|
58
|
+
" <div class=\"codeBlock\">",
|
59
|
+
" <div class=\"highlight\">",
|
60
|
+
" <pre><span class=\"nt\">h1</span><span class=\"w\"> </span>Markup<span class=\"w\"> </span>Example</pre>",
|
61
|
+
" </div>",
|
62
|
+
" </div>",
|
63
|
+
"</div>",
|
64
|
+
].join("\n") }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'haml' do
|
69
|
+
let(:language) { 'haml' }
|
70
|
+
let(:code) { '%h1 Example' }
|
71
|
+
|
72
|
+
context 'when the language is a haml_example' do
|
73
|
+
let(:markdown_language) { 'haml_example' }
|
74
|
+
|
75
|
+
it { is_expected.to eq [
|
76
|
+
"<div class=\"codeExample\">",
|
77
|
+
" <div class=\"exampleOutput\">",
|
78
|
+
" <h1>Example</h1>\n",
|
79
|
+
" </div>",
|
80
|
+
" <div class=\"codeBlock\">",
|
81
|
+
" <div class=\"highlight\">",
|
82
|
+
" <pre><span class=\"nt\">%h1</span> Example</pre>",
|
83
|
+
" </div>",
|
84
|
+
" </div>",
|
85
|
+
"</div>",
|
86
|
+
].join("\n") }
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when the language is a haml_example_table' do
|
90
|
+
let(:markdown_language) { 'haml_example_table' }
|
91
|
+
let(:code) { [
|
92
|
+
".spinner-lg",
|
93
|
+
" %i.fa.fa-spin",
|
94
|
+
"",
|
95
|
+
"%h1 Example"
|
96
|
+
].join("\n") }
|
97
|
+
|
98
|
+
it { is_expected.to eq [
|
99
|
+
"<div class=\"codeTable\">",
|
100
|
+
" <table>",
|
101
|
+
" <tbody>",
|
102
|
+
" ",
|
103
|
+
" <tr>",
|
104
|
+
" <th>",
|
105
|
+
" <div class=\"exampleOutput\">",
|
106
|
+
" <div class='spinner-lg'>",
|
107
|
+
" <i class='fa fa-spin'></i>",
|
108
|
+
"</div>",
|
109
|
+
"",
|
110
|
+
" </div>",
|
111
|
+
" </th>",
|
112
|
+
" <td>",
|
113
|
+
" <div class=\"codeBlock\">",
|
114
|
+
" <div class=\"highlight\">",
|
115
|
+
" <pre><span class=\"nc\">.spinner-lg</span>",
|
116
|
+
" <span class=\"nt\">%i</span><span class=\"nc\">.fa.fa-spin</span></pre>",
|
117
|
+
" </div>",
|
118
|
+
" </div>",
|
119
|
+
" </td>",
|
120
|
+
" </tr>",
|
121
|
+
" ",
|
122
|
+
" <tr>",
|
123
|
+
" <th>",
|
124
|
+
" <div class=\"exampleOutput\">",
|
125
|
+
" <h1>Example</h1>",
|
126
|
+
"",
|
127
|
+
" </div>",
|
128
|
+
" </th>",
|
129
|
+
" <td>",
|
130
|
+
" <div class=\"codeBlock\">",
|
131
|
+
" <div class=\"highlight\">",
|
132
|
+
" <pre><span class=\"nt\">%h1</span> Example</pre>",
|
133
|
+
" </div>",
|
134
|
+
" </div>",
|
135
|
+
" </td>",
|
136
|
+
" </tr>",
|
137
|
+
" ",
|
138
|
+
" </tbody>",
|
139
|
+
" </table>",
|
140
|
+
"</div>"
|
141
|
+
].join("\n") }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context 'html' do
|
146
|
+
let(:language) { 'html' }
|
147
|
+
let(:code) { '<h2></h2>' }
|
148
|
+
let(:formatted_code) { 'formatted h2' }
|
149
|
+
context 'when the language is html_example' do
|
150
|
+
let(:markdown_language) { 'html_example' }
|
151
|
+
|
152
|
+
it { is_expected.to eq [
|
153
|
+
"<div class=\"codeExample\">",
|
154
|
+
" <div class=\"exampleOutput\">",
|
155
|
+
" <h2></h2>",
|
156
|
+
" </div>",
|
157
|
+
" <div class=\"codeBlock\">",
|
158
|
+
" <div class=\"highlight\">",
|
159
|
+
" <pre><span class=\"nt\"><h2></h2></span></pre>",
|
160
|
+
" </div>",
|
161
|
+
" </div>",
|
162
|
+
"</div>",
|
163
|
+
].join("\n") }
|
164
|
+
end
|
165
|
+
|
166
|
+
context 'when the language is a html_example_table' do
|
167
|
+
let(:markdown_language) { 'html_example_table' }
|
168
|
+
let(:code) { [
|
169
|
+
"<div class='spinner-lg'></div>",
|
170
|
+
"",
|
171
|
+
"<h1>Example</h1>"
|
172
|
+
].join("\n") }
|
173
|
+
|
174
|
+
it { is_expected.to eq [
|
175
|
+
"<div class=\"codeTable\">",
|
176
|
+
" <table>",
|
177
|
+
" <tbody>",
|
178
|
+
" ",
|
179
|
+
" <tr>",
|
180
|
+
" <th>",
|
181
|
+
" <div class=\"exampleOutput\">",
|
182
|
+
" <div class='spinner-lg'></div>",
|
183
|
+
" </div>",
|
184
|
+
" </th>",
|
185
|
+
" <td>",
|
186
|
+
" <div class=\"codeBlock\">",
|
187
|
+
" <div class=\"highlight\">",
|
188
|
+
" <pre><span class=\"nt\"><div</span> <span class=\"na\">class=</span><span class=\"s\">'spinner-lg'</span><span class=\"nt\">></div></span></pre>",
|
189
|
+
" </div>",
|
190
|
+
" </div>",
|
191
|
+
" </td>",
|
192
|
+
" </tr>",
|
193
|
+
" ",
|
194
|
+
" <tr>",
|
195
|
+
" <th>",
|
196
|
+
" <div class=\"exampleOutput\">",
|
197
|
+
" <h1>Example</h1>",
|
198
|
+
" </div>",
|
199
|
+
" </th>",
|
200
|
+
" <td>",
|
201
|
+
" <div class=\"codeBlock\">",
|
202
|
+
" <div class=\"highlight\">",
|
203
|
+
" <pre><span class=\"nt\"><h1></span>Example<span class=\"nt\"></h1></span></pre>",
|
204
|
+
" </div>",
|
205
|
+
" </div>",
|
206
|
+
" </td>",
|
207
|
+
" </tr>",
|
208
|
+
" ",
|
209
|
+
" </tbody>",
|
210
|
+
" </table>",
|
211
|
+
"</div>"
|
212
|
+
].join("\n") }
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
context 'js_example' do
|
217
|
+
let(:language) { 'js' }
|
218
|
+
let(:markdown_language) { 'js_example' }
|
219
|
+
let(:code) { '$(document).ready(function() {});' }
|
220
|
+
|
221
|
+
it "inserts the code into the docs so that it will run and make the example work" do
|
222
|
+
expect(subject).to include "<script>$(document).ready(function() {});</script>"
|
223
|
+
end
|
224
|
+
|
225
|
+
it { is_expected.to include [
|
226
|
+
"<div class=\"codeBlock jsExample\">",
|
227
|
+
" <div class=\"highlight\">",
|
228
|
+
" <pre><span class=\"nx\">$</span><span class=\"p\">(</span><span class=\"nb\">document</span><span class=\"p\">).</span><span class=\"nx\">ready</span><span class=\"p\">(</span><span class=\"kd\">function</span><span class=\"p\">()</span> <span class=\"p\">{});</span></pre>",
|
229
|
+
" </div>",
|
230
|
+
"</div>",
|
231
|
+
].join("\n") }
|
232
|
+
end
|
233
|
+
|
234
|
+
context 'jsx_example' do
|
235
|
+
let(:language) { 'jsx' }
|
236
|
+
let(:markdown_language) { 'jsx_example' }
|
237
|
+
let(:code) { '$(document).ready(function () { React.render(<div className="foo"></div>) });' }
|
238
|
+
|
239
|
+
it "inserts the code into the docs so that it will run and make the example work" do
|
240
|
+
expect(subject).to include "<script type='text/jsx'>$(document).ready(function () { React.render(<div className=\"foo\"></div>) });</script>"
|
241
|
+
end
|
242
|
+
|
243
|
+
it { is_expected.to include [
|
244
|
+
"<div class=\"codeBlock jsExample\">",
|
245
|
+
" <div class=\"highlight\">",
|
246
|
+
" <pre>$(document).ready(function () { React.render(<span class=\"nt\"><div</span> <span class=\"na\">className=</span><span class=\"s\">\"foo\"</span><span class=\"nt\">></div></span>) });</pre>",
|
247
|
+
" </div>",
|
248
|
+
"</div>",
|
249
|
+
].join("\n") }
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'unexpected language' do
|
254
|
+
let(:markdown_language) { 'fortran' }
|
255
|
+
let(:code) { 'goto 12' }
|
256
|
+
|
257
|
+
it { is_expected.to eq [
|
258
|
+
"<div class=\"codeBlock\">",
|
259
|
+
" <div class=\"highlight\">",
|
260
|
+
" <pre>goto 12</pre>",
|
261
|
+
" </div>",
|
262
|
+
"</div>",
|
263
|
+
].join("\n") }
|
264
|
+
end
|
265
|
+
|
266
|
+
context 'no language' do
|
267
|
+
let(:markdown_language) { nil }
|
268
|
+
let(:code) { 'unknown code' }
|
269
|
+
|
270
|
+
it { is_expected.to eq [
|
271
|
+
"<div class=\"codeBlock\">",
|
272
|
+
" <div class=\"highlight\">",
|
273
|
+
" <pre>unknown code</pre>",
|
274
|
+
" </div>",
|
275
|
+
"</div>",
|
276
|
+
].join("\n") }
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|