qiita-markdown 0.26.0 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of qiita-markdown might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e2e556a9a6cfd7d44402fa85c90d9ef7b8fee58f61f7fd2cdb1e837bdbed4c1
4
- data.tar.gz: 3e5c460dcb2a8e732f8f6e52fc363991d2684f409ef74c9721136993a5fc4ea1
3
+ metadata.gz: 6dc488d1b11fcc036257f3af15d078c4c708fa5f53a0532fc441827e0a48ab8b
4
+ data.tar.gz: 540af5a59e96989cc6c5b4fc890803b91011ab9acb7b16f81e32c405406cebf8
5
5
  SHA512:
6
- metadata.gz: de3681b0c6a34adeb742e8d78ce1302429144855f33859ab918aca1696767c9b0606d5921480efe6e38b8e59faacdbb22fdb0df6b2f77d78c0f19ca569314960
7
- data.tar.gz: b3a76674697c8d6988c94c8523b1e7a04d07a093e93522cc8ef8f77004cf80175e4fbf9bd6c36995570ae87e587b4239417ad1f501605ae6f7d120b542fc4878
6
+ metadata.gz: add793f489cec5f024e8781afce29073996de60de601d7d4d2da941e06a6679f39b73a9aad317303b51fd78a3607c538a444c340e8314339cf89b9281e9f3cee
7
+ data.tar.gz: c56d7ff646cd8fb9c16d936199367d6a73c1be1c0e4a22734c8567aed6ab0b2789493537f05e7076dc7c5a6e1def4ce0d9d4bd4e41e1226d75b56756dfe8a968
data/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 0.31.0
4
+
5
+ - Use greenmat 3.5.1.1
6
+
7
+ ## 0.30.0
8
+
9
+ - Use greenmat 3.5.1.0
10
+
11
+ ## 0.29.0
12
+
13
+ - Accept new embeded script and iframes
14
+ - Gist
15
+ - Youtube
16
+ - SlideShare
17
+ - SpeekerDeck
18
+ - GoogleSlide
19
+
20
+ ## 0.28.0
21
+
22
+ - Accept new codepen script url (cpwebassets.codepen.io)
23
+
24
+ ## 0.27.0
25
+
26
+ - Support embed Asciinema
27
+
3
28
  ## 0.26.0
4
29
 
5
30
  - Use greenmat 3.2.2.4
@@ -9,8 +9,15 @@ require "sanitize"
9
9
 
10
10
  require "qiita/markdown/embed/code_pen"
11
11
  require "qiita/markdown/embed/tweet"
12
+ require "qiita/markdown/embed/asciinema"
13
+ require "qiita/markdown/embed/gist"
14
+ require "qiita/markdown/embed/youtube"
15
+ require "qiita/markdown/embed/slide_share"
16
+ require "qiita/markdown/embed/google_slide"
17
+ require "qiita/markdown/embed/speeker_deck"
12
18
  require "qiita/markdown/transformers/filter_attributes"
13
19
  require "qiita/markdown/transformers/filter_script"
20
+ require "qiita/markdown/transformers/filter_iframe"
14
21
  require "qiita/markdown/transformers/strip_invalid_node"
15
22
  require "qiita/markdown/filters/checkbox"
16
23
  require "qiita/markdown/filters/code_block"
@@ -0,0 +1,9 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module Asciinema
5
+ SCRIPT_HOST = "asciinema.org".freeze
6
+ end
7
+ end
8
+ end
9
+ end
@@ -5,6 +5,7 @@ module Qiita
5
5
  SCRIPT_URLS = [
6
6
  "https://production-assets.codepen.io/assets/embed/ei.js",
7
7
  "https://static.codepen.io/assets/embed/ei.js",
8
+ "https://cpwebassets.codepen.io/assets/embed/ei.js",
8
9
  ]
9
10
  CLASS_NAME = %w[codepen]
10
11
  DATA_ATTRIBUTES = %w[
@@ -0,0 +1,9 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module Gist
5
+ SCRIPT_HOST = "gist.github.com".freeze
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module GoogleSlide
5
+ SCRIPT_HOST = "docs.google.com".freeze
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module SlideShare
5
+ SCRIPT_HOST = "www.slideshare.net".freeze
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module SpeekerDeck
5
+ SCRIPT_URLS = [
6
+ "//speakerdeck.com/assets/embed.js",
7
+ ].freeze
8
+ CLASS_NAME = %w[speakerdeck-embed].freeze
9
+ DATA_ATTRIBUTES = %w[
10
+ data-id data-ratio
11
+ ].freeze
12
+ ATTRIBUTES = %w[class] + DATA_ATTRIBUTES
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Embed
4
+ module Youtube
5
+ SCRIPT_HOSTS = [
6
+ "www.youtube-nocookie.com",
7
+ "www.youtube.com",
8
+ ].freeze
9
+ end
10
+ end
11
+ end
12
+ end
@@ -47,7 +47,9 @@ module Qiita
47
47
  "async",
48
48
  "src",
49
49
  "type",
50
- ],
50
+ ].concat(
51
+ Embed::SpeekerDeck::ATTRIBUTES,
52
+ ),
51
53
  "span" => [
52
54
  "style",
53
55
  ],
@@ -137,6 +139,7 @@ module Qiita
137
139
  "s",
138
140
  "samp",
139
141
  "script",
142
+ "iframe",
140
143
  "span",
141
144
  "strike",
142
145
  "strong",
@@ -186,14 +189,15 @@ module Qiita
186
189
  transformers: [
187
190
  Transformers::StripInvalidNode,
188
191
  Transformers::FilterScript,
192
+ Transformers::FilterIframe,
189
193
  ],
190
194
  }.freeze
191
195
 
192
196
  SCRIPTABLE_RULE = RULE.dup.tap do |rule|
193
197
  rule[:attributes] = RULE[:attributes].dup
194
198
  rule[:attributes][:all] = rule[:attributes][:all] + [:data]
195
- rule[:elements] = RULE[:elements] + ["iframe", "video"]
196
- rule[:transformers] = rule[:transformers] - [Transformers::FilterScript]
199
+ rule[:elements] = RULE[:elements] + ["video"]
200
+ rule[:transformers] = rule[:transformers] - [Transformers::FilterScript, Transformers::FilterIframe]
197
201
  end
198
202
 
199
203
  def call
@@ -6,7 +6,7 @@ module Qiita
6
6
  RULE = {
7
7
  elements: %w[
8
8
  a b blockquote br code dd del details div dl dt em font h1 h2 h3 h4 h5 h6
9
- hr i img ins kbd li ol p pre q rp rt ruby s samp script strike strong sub
9
+ hr i img ins kbd li ol p pre q rp rt ruby s samp script iframe strike strong sub
10
10
  summary sup table tbody td tfoot th thead tr ul var
11
11
  ],
12
12
  attributes: {
@@ -26,7 +26,18 @@ module Qiita
26
26
  "li" => %w[id],
27
27
  "p" => Embed::CodePen::ATTRIBUTES,
28
28
  "q" => %w[cite],
29
- "script" => %w[async src],
29
+ "script" => %w[async src id].concat(Embed::SpeekerDeck::ATTRIBUTES),
30
+ "iframe" => %w[
31
+ allowfullscreen
32
+ frameborder
33
+ height
34
+ marginheight
35
+ marginwidth
36
+ scrolling
37
+ src
38
+ style
39
+ width
40
+ ],
30
41
  "sup" => %w[id],
31
42
  "td" => %w[colspan rowspan style],
32
43
  "th" => %w[colspan rowspan style],
@@ -42,6 +53,7 @@ module Qiita
42
53
  transformers: [
43
54
  Transformers::FilterAttributes,
44
55
  Transformers::FilterScript,
56
+ Transformers::FilterIframe,
45
57
  ],
46
58
  }.freeze
47
59
 
@@ -0,0 +1,50 @@
1
+ module Qiita
2
+ module Markdown
3
+ module Transformers
4
+ class FilterIframe
5
+ URL_WHITE_LIST = [
6
+ ].flatten.freeze
7
+
8
+ HOST_WHITE_LIST = [
9
+ Embed::Youtube::SCRIPT_HOSTS,
10
+ Embed::SlideShare::SCRIPT_HOST,
11
+ Embed::GoogleSlide::SCRIPT_HOST,
12
+ ].flatten.freeze
13
+
14
+ def self.call(*args)
15
+ new(*args).transform
16
+ end
17
+
18
+ def initialize(env)
19
+ @env = env
20
+ end
21
+
22
+ def transform
23
+ if name == "iframe"
24
+ if URL_WHITE_LIST.include?(node["src"]) || HOST_WHITE_LIST.include?(host_of(node["src"]))
25
+ node.children.unlink
26
+ else
27
+ node.unlink
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def name
35
+ @env[:node_name]
36
+ end
37
+
38
+ def node
39
+ @env[:node]
40
+ end
41
+
42
+ def host_of(url)
43
+ Addressable::URI.parse(url).host if url
44
+ rescue Addressable::URI::InvalidURIError
45
+ nil
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -2,9 +2,15 @@ module Qiita
2
2
  module Markdown
3
3
  module Transformers
4
4
  class FilterScript
5
- WHITE_LIST = [
5
+ URL_WHITE_LIST = [
6
6
  Embed::CodePen::SCRIPT_URLS,
7
7
  Embed::Tweet::SCRIPT_URL,
8
+ Embed::SpeekerDeck::SCRIPT_URLS,
9
+ ].flatten.freeze
10
+
11
+ HOST_WHITE_LIST = [
12
+ Embed::Asciinema::SCRIPT_HOST,
13
+ Embed::Gist::SCRIPT_HOST,
8
14
  ].flatten.freeze
9
15
 
10
16
  def self.call(*args)
@@ -17,7 +23,7 @@ module Qiita
17
23
 
18
24
  def transform
19
25
  if name == "script"
20
- if WHITE_LIST.include?(node["src"])
26
+ if URL_WHITE_LIST.include?(node["src"]) || HOST_WHITE_LIST.include?(host_of(node["src"]))
21
27
  node["async"] = "async" unless node.attributes.key?("async")
22
28
  node.children.unlink
23
29
  else
@@ -35,6 +41,12 @@ module Qiita
35
41
  def node
36
42
  @env[:node]
37
43
  end
44
+
45
+ def host_of(url)
46
+ Addressable::URI.parse(url).host if url
47
+ rescue Addressable::URI::InvalidURIError
48
+ nil
49
+ end
38
50
  end
39
51
  end
40
52
  end
@@ -1,5 +1,5 @@
1
1
  module Qiita
2
2
  module Markdown
3
- VERSION = "0.26.0"
3
+ VERSION = "0.31.0"
4
4
  end
5
5
  end
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "html-pipeline", "~> 2.0"
24
24
  spec.add_dependency "mem"
25
25
  spec.add_dependency "pygments.rb", "~> 1.0"
26
- spec.add_dependency "greenmat", "3.2.2.4"
26
+ spec.add_dependency "greenmat", "3.5.1.1"
27
27
  spec.add_dependency "sanitize"
28
28
  spec.add_dependency "addressable"
29
29
  spec.add_development_dependency "activesupport", "4.2.6"
30
30
  spec.add_development_dependency "benchmark-ips", "~> 1.2"
31
- spec.add_development_dependency "bundler", "~> 1.7"
31
+ spec.add_development_dependency "bundler"
32
32
  spec.add_development_dependency "codeclimate-test-reporter", "0.4.4"
33
33
  spec.add_development_dependency "pry"
34
34
  spec.add_development_dependency "rake", "~> 10.0"
@@ -740,7 +740,7 @@ describe Qiita::Markdown::Processor do
740
740
 
741
741
  it "generates footnotes elements" do
742
742
  should eq <<-HTML.strip_heredoc
743
- <p><sup id="fnref1"><a href="#fn1" rel="footnote" title="test">1</a></sup></p>
743
+ <p><sup id="fnref1"><a href="#fn1" title="test">1</a></sup></p>
744
744
 
745
745
  <div class="footnotes">
746
746
  <hr>
@@ -756,6 +756,25 @@ describe Qiita::Markdown::Processor do
756
756
  end
757
757
  end
758
758
 
759
+ context "with footenotes syntax with code block" do
760
+ let(:markdown) do
761
+ <<-MARKDOWN.strip_heredoc
762
+ ```
763
+ [^1]
764
+ [^1]: test
765
+ ```
766
+ MARKDOWN
767
+ end
768
+
769
+ it "generates only code blocks without footnotes" do
770
+ should eq <<-HTML.strip_heredoc
771
+ <div class="code-frame" data-lang="text"><div class="highlight"><pre><span></span>[^1]
772
+ [^1]: test
773
+ </pre></div></div>
774
+ HTML
775
+ end
776
+ end
777
+
759
778
  context "with manually written link inside of <sup> tag" do
760
779
  let(:markdown) do
761
780
  <<-MARKDOWN.strip_heredoc
@@ -1031,6 +1050,31 @@ describe Qiita::Markdown::Processor do
1031
1050
  end
1032
1051
  end
1033
1052
  end
1053
+
1054
+ context "with details tag" do
1055
+ let(:markdown) do
1056
+ <<-MARKDOWN.strip_heredoc
1057
+ <details><summary>Folding sample</summary><div>
1058
+
1059
+ ```rb
1060
+ puts "Hello, World"
1061
+ ```
1062
+ </div></details>
1063
+ MARKDOWN
1064
+ end
1065
+
1066
+ it "returns HTML output parsed as markdown" do
1067
+ expect(subject).to eq <<-HTML.strip_heredoc
1068
+ <p><details><summary>Folding sample</summary><div>
1069
+
1070
+ <div class="code-frame" data-lang="rb"><div class="highlight"><pre><span></span><span class="nb">puts</span> <span class="s2">"Hello, World"</span>
1071
+ </pre></div></div>
1072
+
1073
+ <p></p>
1074
+ </div></details></p>
1075
+ HTML
1076
+ end
1077
+ end
1034
1078
  end
1035
1079
 
1036
1080
  shared_examples_for "script element" do |allowed:|
@@ -1385,6 +1429,128 @@ describe Qiita::Markdown::Processor do
1385
1429
  end
1386
1430
  end
1387
1431
 
1432
+ context "with HTML embed code for Asciinema" do
1433
+ let(:markdown) do
1434
+ <<-MARKDOWN.strip_heredoc
1435
+ <script id="example" src="https://asciinema.org/a/example.js"></script>
1436
+ MARKDOWN
1437
+ end
1438
+
1439
+ if allowed
1440
+ it "does not sanitize embed code" do
1441
+ should eq <<-HTML.strip_heredoc
1442
+ <script id="example" src="https://asciinema.org/a/example.js"></script>
1443
+ HTML
1444
+ end
1445
+ else
1446
+ it "forces async attribute on script" do
1447
+ should eq <<-HTML.strip_heredoc
1448
+ <script id="example" src="https://asciinema.org/a/example.js" async="async"></script>
1449
+ HTML
1450
+ end
1451
+ end
1452
+ end
1453
+
1454
+ context "with HTML embed code for Gist" do
1455
+ let(:markdown) do
1456
+ <<-MARKDOWN.strip_heredoc
1457
+ <script id="example" src="https://gist.github.com/a/example.js"></script>
1458
+ MARKDOWN
1459
+ end
1460
+
1461
+ if allowed
1462
+ it "does not sanitize embed code" do
1463
+ should eq <<-HTML.strip_heredoc
1464
+ <script id="example" src="https://gist.github.com/a/example.js"></script>
1465
+ HTML
1466
+ end
1467
+ else
1468
+ it "forces async attribute on script" do
1469
+ should eq <<-HTML.strip_heredoc
1470
+ <script id="example" src="https://gist.github.com/a/example.js" async="async"></script>
1471
+ HTML
1472
+ end
1473
+ end
1474
+ end
1475
+
1476
+ context "with HTML embed code for Youtube" do
1477
+ let(:markdown) do
1478
+ <<-MARKDOWN.strip_heredoc
1479
+ <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1480
+ MARKDOWN
1481
+ end
1482
+
1483
+ it "does not sanitize embed code" do
1484
+ should eq <<-HTML.strip_heredoc
1485
+ <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1486
+ HTML
1487
+ end
1488
+
1489
+ context "when url is privacy enhanced mode" do
1490
+ let(:markdown) do
1491
+ <<-MARKDOWN.strip_heredoc
1492
+ <iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
1493
+ MARKDOWN
1494
+ end
1495
+
1496
+ it "does not sanitize embed code" do
1497
+ should eq <<-HTML.strip_heredoc
1498
+ <iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
1499
+ HTML
1500
+ end
1501
+ end
1502
+ end
1503
+
1504
+ context "with HTML embed code for SlideShare" do
1505
+ let(:markdown) do
1506
+ <<-MARKDOWN.strip_heredoc
1507
+ <iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
1508
+ MARKDOWN
1509
+ end
1510
+
1511
+ it "does not sanitize embed code" do
1512
+ should eq <<-HTML.strip_heredoc
1513
+ <iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
1514
+ HTML
1515
+ end
1516
+ end
1517
+
1518
+ context "with HTML embed code for GoogleSlide" do
1519
+ let(:markdown) do
1520
+ <<-MARKDOWN.strip_heredoc
1521
+ <iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
1522
+ MARKDOWN
1523
+ end
1524
+
1525
+ it "does not sanitize embed code" do
1526
+ should eq <<-HTML.strip_heredoc
1527
+ <iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true"></iframe>
1528
+ HTML
1529
+ end
1530
+ end
1531
+
1532
+ context "with HTML embed code for SpeekerDeck" do
1533
+ let(:markdown) do
1534
+ <<-MARKDOWN.strip_heredoc
1535
+ <script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
1536
+ MARKDOWN
1537
+ end
1538
+
1539
+ if allowed
1540
+ it "does not sanitize embed code" do
1541
+ should eq <<-HTML.strip_heredoc
1542
+ <script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
1543
+ HTML
1544
+ end
1545
+ else
1546
+ it "forces async attribute on script" do
1547
+ should eq <<-HTML.strip_heredoc
1548
+ <script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
1549
+ HTML
1550
+ end
1551
+ end
1552
+ end
1553
+
1388
1554
  context "with embed code for Tweet" do
1389
1555
  let(:markdown) do
1390
1556
  <<-MARKDOWN.strip_heredoc
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-11 00:00:00.000000000 Z
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gemoji
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 3.2.2.4
89
+ version: 3.5.1.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 3.2.2.4
96
+ version: 3.5.1.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: sanitize
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -154,16 +154,16 @@ dependencies:
154
154
  name: bundler
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '1.7'
159
+ version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: '1.7'
166
+ version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: codeclimate-test-reporter
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -234,7 +234,7 @@ dependencies:
234
234
  - - '='
235
235
  - !ruby/object:Gem::Version
236
236
  version: 0.49.1
237
- description:
237
+ description:
238
238
  email:
239
239
  - r7kamura@gmail.com
240
240
  executables: []
@@ -256,8 +256,14 @@ files:
256
256
  - lib/qiita-markdown.rb
257
257
  - lib/qiita/markdown.rb
258
258
  - lib/qiita/markdown/base_processor.rb
259
+ - lib/qiita/markdown/embed/asciinema.rb
259
260
  - lib/qiita/markdown/embed/code_pen.rb
261
+ - lib/qiita/markdown/embed/gist.rb
262
+ - lib/qiita/markdown/embed/google_slide.rb
263
+ - lib/qiita/markdown/embed/slide_share.rb
264
+ - lib/qiita/markdown/embed/speeker_deck.rb
260
265
  - lib/qiita/markdown/embed/tweet.rb
266
+ - lib/qiita/markdown/embed/youtube.rb
261
267
  - lib/qiita/markdown/filters/checkbox.rb
262
268
  - lib/qiita/markdown/filters/code_block.rb
263
269
  - lib/qiita/markdown/filters/emoji.rb
@@ -280,6 +286,7 @@ files:
280
286
  - lib/qiita/markdown/processor.rb
281
287
  - lib/qiita/markdown/summary_processor.rb
282
288
  - lib/qiita/markdown/transformers/filter_attributes.rb
289
+ - lib/qiita/markdown/transformers/filter_iframe.rb
283
290
  - lib/qiita/markdown/transformers/filter_script.rb
284
291
  - lib/qiita/markdown/transformers/strip_invalid_node.rb
285
292
  - lib/qiita/markdown/version.rb
@@ -294,7 +301,7 @@ homepage: https://github.com/increments/qiita-markdown
294
301
  licenses:
295
302
  - MIT
296
303
  metadata: {}
297
- post_install_message:
304
+ post_install_message:
298
305
  rdoc_options: []
299
306
  require_paths:
300
307
  - lib
@@ -309,9 +316,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
309
316
  - !ruby/object:Gem::Version
310
317
  version: '0'
311
318
  requirements: []
312
- rubyforge_project:
313
- rubygems_version: 2.7.4
314
- signing_key:
319
+ rubygems_version: 3.0.3
320
+ signing_key:
315
321
  specification_version: 4
316
322
  summary: Qiita-specified markdown processor.
317
323
  test_files: