rich_text_renderer 0.2.2 → 0.2.3

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.
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