rich_text_renderer 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/lib/rich_text_renderer/version.rb +1 -1
  4. metadata +6 -167
  5. data/.gitignore +0 -7
  6. data/.rspec +0 -1
  7. data/.rubocop.yml +0 -27
  8. data/.rubocop_todo.yml +0 -35
  9. data/.travis.yml +0 -13
  10. data/.yardopts +0 -4
  11. data/Gemfile +0 -3
  12. data/Gemfile.lock +0 -110
  13. data/Guardfile +0 -24
  14. data/Rakefile +0 -33
  15. data/coverage/.last_run.json +0 -5
  16. data/coverage/.resultset.json +0 -1372
  17. data/coverage/.resultset.json.lock +0 -0
  18. data/coverage/assets/0.10.2/application.css +0 -799
  19. data/coverage/assets/0.10.2/application.js +0 -1707
  20. data/coverage/assets/0.10.2/colorbox/border.png +0 -0
  21. data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  22. data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  23. data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  24. data/coverage/assets/0.10.2/favicon_green.png +0 -0
  25. data/coverage/assets/0.10.2/favicon_red.png +0 -0
  26. data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  27. data/coverage/assets/0.10.2/loading.gif +0 -0
  28. data/coverage/assets/0.10.2/magnify.png +0 -0
  29. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  30. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  31. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  32. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  33. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  34. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  35. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  36. data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  37. data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  38. data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  39. data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  40. data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  41. data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  42. data/coverage/index.html +0 -9146
  43. data/doc/RichTextRenderer/BaseBlockRenderer.html +0 -242
  44. data/doc/RichTextRenderer/BaseInlineRenderer.html +0 -242
  45. data/doc/RichTextRenderer/BaseNodeRenderer.html +0 -300
  46. data/doc/RichTextRenderer/BlockQuoteRenderer.html +0 -169
  47. data/doc/RichTextRenderer/BoldRenderer.html +0 -169
  48. data/doc/RichTextRenderer/CodeRenderer.html +0 -169
  49. data/doc/RichTextRenderer/DocumentRenderer.html +0 -242
  50. data/doc/RichTextRenderer/EntryBlockRenderer.html +0 -239
  51. data/doc/RichTextRenderer/HeadingFiveRenderer.html +0 -169
  52. data/doc/RichTextRenderer/HeadingFourRenderer.html +0 -169
  53. data/doc/RichTextRenderer/HeadingOneRenderer.html +0 -169
  54. data/doc/RichTextRenderer/HeadingSixRenderer.html +0 -169
  55. data/doc/RichTextRenderer/HeadingThreeRenderer.html +0 -169
  56. data/doc/RichTextRenderer/HeadingTwoRenderer.html +0 -169
  57. data/doc/RichTextRenderer/HrRenderer.html +0 -238
  58. data/doc/RichTextRenderer/HyperlinkRenderer.html +0 -246
  59. data/doc/RichTextRenderer/ItalicRenderer.html +0 -169
  60. data/doc/RichTextRenderer/ListItemRenderer.html +0 -169
  61. data/doc/RichTextRenderer/NullRenderer.html +0 -238
  62. data/doc/RichTextRenderer/OrderedListRenderer.html +0 -169
  63. data/doc/RichTextRenderer/ParagraphRenderer.html +0 -169
  64. data/doc/RichTextRenderer/Renderer.html +0 -349
  65. data/doc/RichTextRenderer/TextRenderer.html +0 -254
  66. data/doc/RichTextRenderer/UnderlineRenderer.html +0 -169
  67. data/doc/RichTextRenderer/UnorderedListRenderer.html +0 -169
  68. data/doc/RichTextRenderer.html +0 -155
  69. data/doc/StructuredTextRenderer/BaseBlockRenderer.html +0 -242
  70. data/doc/StructuredTextRenderer/BaseInlineRenderer.html +0 -242
  71. data/doc/StructuredTextRenderer/BaseNodeRenderer.html +0 -300
  72. data/doc/StructuredTextRenderer/BoldRenderer.html +0 -169
  73. data/doc/StructuredTextRenderer/CodeRenderer.html +0 -169
  74. data/doc/StructuredTextRenderer/DocumentRenderer.html +0 -242
  75. data/doc/StructuredTextRenderer/EntryBlockRenderer.html +0 -239
  76. data/doc/StructuredTextRenderer/HeadingFiveRenderer.html +0 -169
  77. data/doc/StructuredTextRenderer/HeadingFourRenderer.html +0 -169
  78. data/doc/StructuredTextRenderer/HeadingOneRenderer.html +0 -169
  79. data/doc/StructuredTextRenderer/HeadingSixRenderer.html +0 -169
  80. data/doc/StructuredTextRenderer/HeadingThreeRenderer.html +0 -169
  81. data/doc/StructuredTextRenderer/HeadingTwoRenderer.html +0 -169
  82. data/doc/StructuredTextRenderer/HrRenderer.html +0 -238
  83. data/doc/StructuredTextRenderer/HyperlinkRenderer.html +0 -246
  84. data/doc/StructuredTextRenderer/ItalicRenderer.html +0 -169
  85. data/doc/StructuredTextRenderer/ListItemRenderer.html +0 -169
  86. data/doc/StructuredTextRenderer/NullRenderer.html +0 -238
  87. data/doc/StructuredTextRenderer/OrderedListRenderer.html +0 -169
  88. data/doc/StructuredTextRenderer/ParagraphRenderer.html +0 -169
  89. data/doc/StructuredTextRenderer/QuoteRenderer.html +0 -169
  90. data/doc/StructuredTextRenderer/Renderer.html +0 -349
  91. data/doc/StructuredTextRenderer/TextRenderer.html +0 -254
  92. data/doc/StructuredTextRenderer/UnderlineRenderer.html +0 -169
  93. data/doc/StructuredTextRenderer/UnorderedListRenderer.html +0 -169
  94. data/doc/StructuredTextRenderer.html +0 -155
  95. data/doc/_index.html +0 -387
  96. data/doc/class_list.html +0 -51
  97. data/doc/css/common.css +0 -1
  98. data/doc/css/full_list.css +0 -58
  99. data/doc/css/style.css +0 -496
  100. data/doc/file.CHANGELOG.html +0 -91
  101. data/doc/file.LICENSE.html +0 -70
  102. data/doc/file.README.html +0 -170
  103. data/doc/file_list.html +0 -66
  104. data/doc/frames.html +0 -17
  105. data/doc/index.html +0 -170
  106. data/doc/js/app.js +0 -292
  107. data/doc/js/full_list.js +0 -216
  108. data/doc/js/jquery.js +0 -4
  109. data/doc/method_list.html +0 -147
  110. data/doc/top-level-namespace.html +0 -110
  111. data/rich_text_renderer.gemspec +0 -30
  112. data/spec/lib/rich_text_renderer/block_renderers/asset_block_renderer_spec.rb +0 -101
  113. data/spec/lib/rich_text_renderer/block_renderers/asset_hyperlink_renderer_spec.rb +0 -32
  114. data/spec/lib/rich_text_renderer/block_renderers/base_block_renderer_spec.rb +0 -26
  115. data/spec/lib/rich_text_renderer/block_renderers/blockquote_renderer_spec.rb +0 -25
  116. data/spec/lib/rich_text_renderer/block_renderers/entry_block_renderer_spec.rb +0 -15
  117. data/spec/lib/rich_text_renderer/block_renderers/heading_five_renderer_spec.rb +0 -24
  118. data/spec/lib/rich_text_renderer/block_renderers/heading_four_renderer_spec.rb +0 -24
  119. data/spec/lib/rich_text_renderer/block_renderers/heading_one_renderer_spec.rb +0 -24
  120. data/spec/lib/rich_text_renderer/block_renderers/heading_six_renderer_spec.rb +0 -24
  121. data/spec/lib/rich_text_renderer/block_renderers/heading_three_renderer_spec.rb +0 -24
  122. data/spec/lib/rich_text_renderer/block_renderers/heading_two_renderer_spec.rb +0 -24
  123. data/spec/lib/rich_text_renderer/block_renderers/hr_renderer_spec.rb +0 -13
  124. data/spec/lib/rich_text_renderer/block_renderers/hyperlink_renderer_spec.rb +0 -24
  125. data/spec/lib/rich_text_renderer/block_renderers/list_item_renderer_spec.rb +0 -24
  126. data/spec/lib/rich_text_renderer/block_renderers/ordered_list_renderer_spec.rb +0 -56
  127. data/spec/lib/rich_text_renderer/block_renderers/paragraph_renderer_spec.rb +0 -30
  128. data/spec/lib/rich_text_renderer/block_renderers/unordered_list_renderer_spec.rb +0 -56
  129. data/spec/lib/rich_text_renderer/document_renderers/document_renderer_spec.rb +0 -42
  130. data/spec/lib/rich_text_renderer/null_renderer_spec.rb +0 -19
  131. data/spec/lib/rich_text_renderer/renderer_spec.rb +0 -308
  132. data/spec/lib/rich_text_renderer/text_renderers/base_inline_renderer_spec.rb +0 -11
  133. data/spec/lib/rich_text_renderer/text_renderers/bold_renderer_spec.rb +0 -11
  134. data/spec/lib/rich_text_renderer/text_renderers/code_renderer_spec.rb +0 -11
  135. data/spec/lib/rich_text_renderer/text_renderers/italic_renderer_spec.rb +0 -11
  136. data/spec/lib/rich_text_renderer/text_renderers/text_renderer_spec.rb +0 -65
  137. data/spec/lib/rich_text_renderer/text_renderers/underline_renderer_spec.rb +0 -11
  138. data/spec/spec_helper.rb +0 -105
@@ -1,308 +0,0 @@
1
- require 'spec_helper'
2
-
3
- full_document = {
4
- "content" => [
5
- {
6
- "data" => {},
7
- "content" => [
8
- {
9
- "marks" => [],
10
- "value" => "Some heading",
11
- "nodeType" => "text",
12
- "nodeClass" => "text",
13
- }
14
- ],
15
- "nodeType" => "heading-1",
16
- "nodeClass" => "block",
17
- },
18
- {
19
- "data" => {},
20
- "content" => [
21
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
22
- ],
23
- "nodeType" => "paragraph",
24
- "nodeClass" => "block",
25
- },
26
- {
27
- "data" => {
28
- "target" => {
29
- "sys" => {
30
- "id" => "49rofLvvxCOiIMIi6mk8ai",
31
- "type" => "Link",
32
- "linkType" => "Entry",
33
- }
34
- }
35
- },
36
- "content" => [
37
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
38
- ],
39
- "nodeType" => "embedded-entry-block",
40
- "nodeClass" => "block",
41
- },
42
- {
43
- "data" => {},
44
- "content" => [
45
- {
46
- "marks" => [],
47
- "value" => "Some subheading",
48
- "nodeType" => "text",
49
- "nodeClass" => "text",
50
- }
51
- ],
52
- "nodeType" => "heading-2",
53
- "nodeClass" => "block",
54
- },
55
- {
56
- "data" => {},
57
- "content" => [
58
- {
59
- "marks" => [{"data" => {}, "type" => "bold", "object" => "mark"}],
60
- "value" => "Some bold",
61
- "nodeType" => "text",
62
- "nodeClass" => "text",
63
- }
64
- ],
65
- "nodeType" => "paragraph",
66
- "nodeClass" => "block",
67
- },
68
- {
69
- "data" => {},
70
- "content" => [
71
- {
72
- "marks" => [{"data" => {}, "type" => "italic", "object" => "mark"}],
73
- "value" => "Some italics",
74
- "nodeType" => "text",
75
- "nodeClass" => "text",
76
- }
77
- ],
78
- "nodeType" => "paragraph",
79
- "nodeClass" => "block",
80
- },
81
- {
82
- "data" => {},
83
- "content" => [
84
- {
85
- "marks" => [{"data" => {}, "type" => "underline", "object" => "mark"}],
86
- "value" => "Some underline",
87
- "nodeType" => "text",
88
- "nodeClass" => "text",
89
- }
90
- ],
91
- "nodeType" => "paragraph",
92
- "nodeClass" => "block",
93
- },
94
- {
95
- "data" => {},
96
- "content" => [
97
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
98
- ],
99
- "nodeType" => "paragraph",
100
- "nodeClass" => "block",
101
- },
102
- {
103
- "data" => {},
104
- "content" => [
105
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
106
- ],
107
- "nodeType" => "paragraph",
108
- "nodeClass" => "block",
109
- },
110
- {
111
- "data" => {
112
- "target" => {
113
- "sys" => {
114
- "id" => "5ZF9Q4K6iWSYIU2OUs0UaQ",
115
- "type" => "Link",
116
- "linkType" => "Entry",
117
- }
118
- }
119
- },
120
- "content" => [
121
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
122
- ],
123
- "nodeType" => "embedded-entry-block",
124
- "nodeClass" => "block",
125
- },
126
- {
127
- "data" => {},
128
- "content" => [
129
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
130
- ],
131
- "nodeType" => "paragraph",
132
- "nodeClass" => "block",
133
- },
134
- {
135
- "data" => {},
136
- "content" => [
137
- {
138
- "marks" => [],
139
- "value" => "Some raw content",
140
- "nodeType" => "text",
141
- "nodeClass" => "text",
142
- }
143
- ],
144
- "nodeType" => "paragraph",
145
- "nodeClass" => "block",
146
- },
147
- {
148
- "data" => {},
149
- "content" => [
150
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
151
- ],
152
- "nodeType" => "paragraph",
153
- "nodeClass" => "block",
154
- },
155
- {
156
- "data" => {},
157
- "content" => [
158
- {
159
- "marks" => [],
160
- "value" => "An unpublished embed:",
161
- "nodeType" => "text",
162
- "nodeClass" => "text",
163
- }
164
- ],
165
- "nodeType" => "paragraph",
166
- "nodeClass" => "block",
167
- },
168
- {
169
- "data" => {},
170
- "content" => [
171
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
172
- ],
173
- "nodeType" => "paragraph",
174
- "nodeClass" => "block",
175
- },
176
- {
177
- "data" => {
178
- "target" => {
179
- "sys" => {
180
- "id" => "q2hGXkd5tICym64AcgeKK",
181
- "type" => "Link",
182
- "linkType" => "Entry",
183
- }
184
- }
185
- },
186
- "content" => [
187
- {"marks" => [], "value" => "", "nodeType" => "text", "nodeClass" => "text"}
188
- ],
189
- "nodeType" => "embedded-entry-block",
190
- "nodeClass" => "block",
191
- },
192
- {
193
- "data" => {},
194
- "content" => [
195
- {
196
- "marks" => [],
197
- "value" => "Some more content",
198
- "nodeType" => "text",
199
- "nodeClass" => "text",
200
- }
201
- ],
202
- "nodeType" => "paragraph",
203
- "nodeClass" => "block",
204
- },
205
- ],
206
- "nodeType" => "document",
207
- "nodeClass" => "document",
208
- }
209
-
210
- describe RichTextRenderer::Renderer do
211
- subject { described_class.new }
212
-
213
- describe '#render' do
214
- it 'by default renders html' do
215
- expect(subject.render(full_document)).to eq [
216
- "<h1>Some heading</h1>",
217
- "<p></p>",
218
- '<div>{"sys"=>{"id"=>"49rofLvvxCOiIMIi6mk8ai", "type"=>"Link", "linkType"=>"Entry"}}</div>',
219
- "<h2>Some subheading</h2>",
220
- "<p><b>Some bold</b></p>",
221
- "<p><i>Some italics</i></p>",
222
- "<p><u>Some underline</u></p>",
223
- "<p></p>",
224
- "<p></p>",
225
- '<div>{"sys"=>{"id"=>"5ZF9Q4K6iWSYIU2OUs0UaQ", "type"=>"Link", "linkType"=>"Entry"}}</div>',
226
- "<p></p>",
227
- "<p>Some raw content</p>",
228
- "<p></p>",
229
- "<p>An unpublished embed:</p>",
230
- "<p></p>",
231
- '<div>{"sys"=>{"id"=>"q2hGXkd5tICym64AcgeKK", "type"=>"Link", "linkType"=>"Entry"}}</div>',
232
- "<p>Some more content</p>",
233
- ].join("\n")
234
- end
235
- end
236
-
237
- describe 'with all renderers overridden' do
238
- subject do
239
- described_class.new(
240
- 'heading-1' => HeadingOneMarkdownRenderer,
241
- 'heading-2' => HeadingTwoMarkdownRenderer,
242
- 'paragraph' => ParagraphMarkdownRenderer,
243
- 'embedded-entry-block' => EntryBlockMarkdownRenderer,
244
- 'bold' => BoldMarkdownRenderer,
245
- 'italic' => ItalicMarkdownRenderer,
246
- 'underline' => UnderlineMarkdownRenderer
247
- )
248
- end
249
-
250
- it 'renders with the overridden renderers' do
251
- expect(subject.render(full_document)).to eq [
252
- "# Some heading",
253
- "",
254
- "",
255
- "",
256
- "",
257
- "```",
258
- '{"sys"=>{"id"=>"49rofLvvxCOiIMIi6mk8ai", "type"=>"Link", "linkType"=>"Entry"}}',
259
- "```",
260
- "",
261
- "## Some subheading",
262
- "",
263
- "**Some bold**",
264
- "",
265
- "",
266
- "*Some italics*",
267
- "",
268
- "",
269
- "__Some underline__",
270
- "",
271
- "",
272
- "",
273
- "",
274
- "",
275
- "",
276
- "",
277
- "",
278
- "```",
279
- '{"sys"=>{"id"=>"5ZF9Q4K6iWSYIU2OUs0UaQ", "type"=>"Link", "linkType"=>"Entry"}}',
280
- "```",
281
- "",
282
- "",
283
- "",
284
- "",
285
- "",
286
- "Some raw content",
287
- "",
288
- "",
289
- "",
290
- "",
291
- "",
292
- "An unpublished embed:",
293
- "",
294
- "",
295
- "",
296
- "",
297
- "",
298
- "```",
299
- '{"sys"=>{"id"=>"q2hGXkd5tICym64AcgeKK", "type"=>"Link", "linkType"=>"Entry"}}',
300
- "```",
301
- "",
302
- "",
303
- "Some more content",
304
- ""
305
- ].join("\n")
306
- end
307
- end
308
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node = {"value" => "foo"}
4
-
5
- describe RichTextRenderer::BaseInlineRenderer do
6
- subject { described_class.new }
7
-
8
- it 'renders as a span' do
9
- expect(subject.render(mock_node)).to eq "<span>foo</span>"
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node = {"value" => "foo"}
4
-
5
- describe RichTextRenderer::BoldRenderer do
6
- subject { described_class.new }
7
-
8
- it 'renders as a b' do
9
- expect(subject.render(mock_node)).to eq "<b>foo</b>"
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node = {"value" => "foo"}
4
-
5
- describe RichTextRenderer::CodeRenderer do
6
- subject { described_class.new }
7
-
8
- it 'renders as a code' do
9
- expect(subject.render(mock_node)).to eq "<code>foo</code>"
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node = {"value" => "foo"}
4
-
5
- describe RichTextRenderer::ItalicRenderer do
6
- subject { described_class.new }
7
-
8
- it 'renders as a i' do
9
- expect(subject.render(mock_node)).to eq "<i>foo</i>"
10
- end
11
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node_underline_only = {"value" => "foo", "nodeType" => "text", "marks" => [{"type" => "underline"}]}
4
-
5
- mock_node_italic_only = {"value" => "foo", "nodeType" => "text", "marks" => [{"type" => "italic"}]}
6
-
7
- mock_node_bold_only = {"value" => "foo", "nodeType" => "text", "marks" => [{"type" => "bold"}]}
8
-
9
- mock_node_multiple_marks = {
10
- "value" => "foo",
11
- "nodeType" => "text",
12
- "marks" => [{"type" => "underline"}, {"type" => "italic"}, {"type" => "bold"}],
13
- }
14
-
15
- mock_node_unsupported_mark = {"value" => "foo", "nodeType" => "text", "marks" => [{"type" => "foobar"}]}
16
-
17
- mock_node_unsafe_value = {"value" => "<script>alert('XSS!');</script>", "nodeType" => "text", "marks" => []}
18
-
19
- mock_node_unsafe_value_with_marks = {"value" => "<script>alert('XSS!');</script>", "nodeType" => "text", "marks" => [{"type" => "underline"}, {"type" => "italic"}, {"type" => "bold"}]}
20
-
21
- describe RichTextRenderer::TextRenderer do
22
- subject do
23
- described_class.new(
24
- 'text' => RichTextRenderer::TextRenderer,
25
- 'bold' => RichTextRenderer::BoldRenderer,
26
- 'italic' => RichTextRenderer::ItalicRenderer,
27
- 'underline' => RichTextRenderer::UnderlineRenderer,
28
- nil => RichTextRenderer::NullRenderer
29
- )
30
- end
31
-
32
- describe '#render' do
33
- it 'can render with a single mark' do
34
- expect(subject.render(mock_node_bold_only)).to eq "<b>foo</b>"
35
- expect(subject.render(mock_node_italic_only)).to eq "<i>foo</i>"
36
- expect(subject.render(mock_node_underline_only)).to eq "<u>foo</u>"
37
- end
38
-
39
- it 'can render multiple marks' do
40
- expect(subject.render(mock_node_multiple_marks)).to eq "<b><i><u>foo</u></i></b>"
41
- end
42
-
43
- it 'raises an error for unsupported marks' do
44
- expect { subject.render(mock_node_unsupported_mark) }.to raise_error "No renderer defined for 'foobar' nodes"
45
- end
46
-
47
- it 'supports custom renderers' do
48
- subject = described_class.new(
49
- 'text' => RichTextRenderer::TextRenderer,
50
- 'bold' => BoldMarkdownRenderer,
51
- nil => RichTextRenderer::NullRenderer
52
- )
53
-
54
- expect(subject.render(mock_node_bold_only)).to eq "**foo**"
55
- end
56
-
57
- it 'escapes value' do
58
- expect(subject.render(mock_node_unsafe_value)).to eq "&lt;script&gt;alert(&#39;XSS!&#39;);&lt;/script&gt;"
59
- end
60
-
61
- it 'renders marks but keeps value escaped' do
62
- expect(subject.render(mock_node_unsafe_value_with_marks)).to eq "<b><i><u>&lt;script&gt;alert(&#39;XSS!&#39;);&lt;/script&gt;</u></i></b>"
63
- end
64
- end
65
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- mock_node = {"value" => "foo"}
4
-
5
- describe RichTextRenderer::UnderlineRenderer do
6
- subject { described_class.new }
7
-
8
- it 'renders as a u' do
9
- expect(subject.render(mock_node)).to eq "<u>foo</u>"
10
- end
11
- end
data/spec/spec_helper.rb DELETED
@@ -1,105 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start unless RUBY_PLATFORM == 'java'
3
-
4
- require 'rspec'
5
- require 'rich_text_renderer'
6
-
7
- RSpec.configure do |config|
8
- config.filter_run :focus => true
9
- config.run_all_when_everything_filtered = true
10
- end
11
-
12
- class MockFile
13
- attr_reader :content_type, :url
14
-
15
- def initialize(json)
16
- @url = json['url']
17
- @content_type = json['contentType']
18
- end
19
- end
20
-
21
- class MockAsset
22
- attr_reader :fields, :file, :title
23
-
24
- def initialize(json)
25
- @fields = json['fields']
26
- @file = MockFile.new(@fields['file'])
27
- @title = @fields['title']
28
- end
29
-
30
- def url
31
- file.url
32
- end
33
- end
34
-
35
- class NodeRenderer
36
- attr_reader :mappings
37
-
38
- def initialize(mappings = {})
39
- @mappings = mappings
40
- end
41
-
42
- protected
43
-
44
- def find_renderer(node)
45
- renderer = mappings[node['nodeType']]
46
- return if renderer.nil?
47
- renderer.new(mappings)
48
- end
49
- end
50
-
51
- class HeadingOneMarkdownRenderer < NodeRenderer
52
- def render(node)
53
- node['content'].each_with_object([]) do |c, res|
54
- renderer = find_renderer(c)
55
- next if renderer.nil?
56
- res << "# #{renderer.render(c)}"
57
- end.join("\n")
58
- end
59
- end
60
-
61
- class HeadingTwoMarkdownRenderer < NodeRenderer
62
- def render(node)
63
- node['content'].each_with_object([]) do |c, res|
64
- renderer = find_renderer(c)
65
- next if renderer.nil?
66
- res << "## #{renderer.render(c)}"
67
- end.join("\n")
68
- end
69
- end
70
-
71
- class ParagraphMarkdownRenderer < NodeRenderer
72
- def render(node)
73
- paragraphs = node['content'].each_with_object([]) do |c, res|
74
- renderer = find_renderer(c)
75
- next if renderer.nil?
76
- res << "#{renderer.render(c)}"
77
- end.join("\n")
78
-
79
- "\n#{paragraphs}\n"
80
- end
81
- end
82
-
83
- class EntryBlockMarkdownRenderer < NodeRenderer
84
- def render(node)
85
- "\n```\n#{node['data']['target']}\n```\n"
86
- end
87
- end
88
-
89
- class BoldMarkdownRenderer < NodeRenderer
90
- def render(node)
91
- "**#{node['value']}**"
92
- end
93
- end
94
-
95
- class ItalicMarkdownRenderer < NodeRenderer
96
- def render(node)
97
- "*#{node['value']}*"
98
- end
99
- end
100
-
101
- class UnderlineMarkdownRenderer < NodeRenderer
102
- def render(node)
103
- "__#{node['value']}__"
104
- end
105
- end