qiita-markdown 0.12.0 → 0.13.0
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.
Potentially problematic release.
This version of qiita-markdown might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +0 -16
- data/CHANGELOG.md +3 -0
- data/lib/qiita/markdown.rb +1 -0
- data/lib/qiita/markdown/filters/group_mention.rb +99 -0
- data/lib/qiita/markdown/processor.rb +1 -0
- data/lib/qiita/markdown/version.rb +1 -1
- data/qiita-markdown.gemspec +1 -1
- data/spec/qiita/markdown/processor_spec.rb +34 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c22f45ccf624ebe29068482764e35d462ab0e633
|
4
|
+
data.tar.gz: 34b99302fce125f03a8418eee4d981e0d19d71b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 967e0ef2ee7a811af3f175776772a6819578b9ce4c5a28e052bdc79fc41935ffee4c3ed27efd82a207b0d22a6fae178b4d1f029519c9732918b761bca54f6078
|
7
|
+
data.tar.gz: 15a8a37fc61191d93b2f1942208417bd67b68e1fdfb5113b218428c50155858394d07a1a61f9a32230911de7cb715717d9dac60f7200e53e02c5ef6bff7c4bd5
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -94,22 +94,6 @@ Style/PerlBackrefs:
|
|
94
94
|
Exclude:
|
95
95
|
- 'lib/qiita/markdown/filters/mention.rb'
|
96
96
|
|
97
|
-
# Offense count: 13
|
98
|
-
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
99
|
-
# NamePrefix: is_, has_, have_
|
100
|
-
# NamePrefixBlacklist: is_, has_, have_
|
101
|
-
# NameWhitelist: is_a?
|
102
|
-
Style/PredicateName:
|
103
|
-
Exclude:
|
104
|
-
- 'spec/**/*'
|
105
|
-
- 'benchmark/heading_anchor_rendering.rb'
|
106
|
-
- 'lib/qiita/markdown/filters/checkbox.rb'
|
107
|
-
- 'lib/qiita/markdown/filters/code.rb'
|
108
|
-
- 'lib/qiita/markdown/filters/mention.rb'
|
109
|
-
- 'lib/qiita/markdown/filters/sanitize.rb'
|
110
|
-
- 'lib/qiita/markdown/filters/syntax_highlight.rb'
|
111
|
-
- 'lib/qiita/markdown/greenmat/heading_rendering.rb'
|
112
|
-
|
113
97
|
# Offense count: 1
|
114
98
|
# Cop supports --auto-correct.
|
115
99
|
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
data/CHANGELOG.md
CHANGED
data/lib/qiita/markdown.rb
CHANGED
@@ -12,6 +12,7 @@ require "qiita/markdown/filters/code"
|
|
12
12
|
require "qiita/markdown/filters/emoji"
|
13
13
|
require "qiita/markdown/filters/footnote"
|
14
14
|
require "qiita/markdown/filters/greenmat"
|
15
|
+
require "qiita/markdown/filters/group_mention"
|
15
16
|
require "qiita/markdown/filters/image_link"
|
16
17
|
require "qiita/markdown/filters/mention"
|
17
18
|
require "qiita/markdown/filters/sanitize"
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Qiita
|
2
|
+
module Markdown
|
3
|
+
module Filters
|
4
|
+
class GroupMention < HTML::Pipeline::Filter
|
5
|
+
# @note Override
|
6
|
+
def call
|
7
|
+
if context[:group_mention_url_generator]
|
8
|
+
result[:mentioned_groups] ||= []
|
9
|
+
doc.search(".//text()").each do |node|
|
10
|
+
mentionable_node = MentionableNode.new(node, context[:group_mention_url_generator])
|
11
|
+
unless mentionable_node.ignorable?
|
12
|
+
result[:mentioned_groups] |= mentionable_node.groups
|
13
|
+
node.replace(mentionable_node.replaced_html)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
doc
|
18
|
+
end
|
19
|
+
|
20
|
+
class MentionableNode
|
21
|
+
GROUP_IDENTIFIER_PATTERN = %r{
|
22
|
+
(?:^|\W)
|
23
|
+
@((?>[a-z\d][a-z\d-]{2,31}))
|
24
|
+
\/
|
25
|
+
([A-Za-z\d][A-Za-z\d-]{0,14}[A-Za-z\d])
|
26
|
+
(?!\/)
|
27
|
+
(?=
|
28
|
+
\.+[ \t\W]|
|
29
|
+
\.+$|
|
30
|
+
[^0-9a-zA-Z_.]|
|
31
|
+
$
|
32
|
+
)
|
33
|
+
}x
|
34
|
+
|
35
|
+
IGNORED_ANCESTOR_ELEMENT_NAMES = %w(
|
36
|
+
a
|
37
|
+
blockquote
|
38
|
+
code
|
39
|
+
pre
|
40
|
+
style
|
41
|
+
).freeze
|
42
|
+
|
43
|
+
# @param node [Nokogiri::XML::Node]
|
44
|
+
# @param group_mention_url_generator [Proc]
|
45
|
+
def initialize(node, group_mention_url_generator)
|
46
|
+
@group_mention_url_generator = group_mention_url_generator
|
47
|
+
@node = node
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Array<Hash>]
|
51
|
+
def groups
|
52
|
+
@groups ||= []
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [false, true]
|
56
|
+
def ignorable?
|
57
|
+
!has_at_mark? || has_any_ignored_ancestor? || !replaced?
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def replaced_html
|
62
|
+
@replaced_html ||= html.gsub(GROUP_IDENTIFIER_PATTERN) do |_match|
|
63
|
+
team_url_name = ::Regexp.last_match(1)
|
64
|
+
group_url_name = ::Regexp.last_match(2)
|
65
|
+
group = { group_url_name: group_url_name, team_url_name: team_url_name }
|
66
|
+
groups << group
|
67
|
+
%(<a href="#{@group_mention_url_generator.call(group)}">) +
|
68
|
+
%(@#{team_url_name}/#{group_url_name}</a>)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
# @return [false, true]
|
75
|
+
def has_any_ignored_ancestor?
|
76
|
+
@node.ancestors.any? do |node|
|
77
|
+
IGNORED_ANCESTOR_ELEMENT_NAMES.include?(node.name.downcase)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [false, true]
|
82
|
+
def has_at_mark?
|
83
|
+
html.include?("@")
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [String]
|
87
|
+
def html
|
88
|
+
@html ||= @node.to_html
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [false, true]
|
92
|
+
def replaced?
|
93
|
+
html != replaced_html
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/qiita-markdown.gemspec
CHANGED
@@ -32,5 +32,5 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency "pry"
|
33
33
|
spec.add_development_dependency "rake", "~> 10.0"
|
34
34
|
spec.add_development_dependency "rspec", "~> 3.1"
|
35
|
-
spec.add_development_dependency "rubocop", "
|
35
|
+
spec.add_development_dependency "rubocop", "0.40.0"
|
36
36
|
end
|
@@ -457,6 +457,40 @@ describe Qiita::Markdown::Processor do
|
|
457
457
|
end
|
458
458
|
end
|
459
459
|
|
460
|
+
context "with group mention" do
|
461
|
+
let(:markdown) do
|
462
|
+
"@alice/bob"
|
463
|
+
end
|
464
|
+
|
465
|
+
it "does not replace it" do
|
466
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
467
|
+
<p>@alice/bob</p>
|
468
|
+
EOS
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
context "with group mention" do
|
473
|
+
let(:context) do
|
474
|
+
super().merge(group_mention_url_generator: lambda do |group|
|
475
|
+
"https://#{group[:team_url_name]}.example.com/groups/#{group[:group_url_name]}"
|
476
|
+
end)
|
477
|
+
end
|
478
|
+
|
479
|
+
let(:markdown) do
|
480
|
+
"@alice/bob"
|
481
|
+
end
|
482
|
+
|
483
|
+
it "replaces it with preferred link and updates :mentioned_groups" do
|
484
|
+
is_expected.to eq <<-EOS.strip_heredoc
|
485
|
+
<p><a href="https://alice.example.com/groups/bob">@alice/bob</a></p>
|
486
|
+
EOS
|
487
|
+
expect(result[:mentioned_groups]).to eq [{
|
488
|
+
group_url_name: "bob",
|
489
|
+
team_url_name: "alice",
|
490
|
+
}]
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
460
494
|
context "with normal link" do
|
461
495
|
let(:markdown) do
|
462
496
|
"[](/example)"
|
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.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gemoji
|
@@ -216,16 +216,16 @@ dependencies:
|
|
216
216
|
name: rubocop
|
217
217
|
requirement: !ruby/object:Gem::Requirement
|
218
218
|
requirements:
|
219
|
-
- -
|
219
|
+
- - '='
|
220
220
|
- !ruby/object:Gem::Version
|
221
|
-
version:
|
221
|
+
version: 0.40.0
|
222
222
|
type: :development
|
223
223
|
prerelease: false
|
224
224
|
version_requirements: !ruby/object:Gem::Requirement
|
225
225
|
requirements:
|
226
|
-
- -
|
226
|
+
- - '='
|
227
227
|
- !ruby/object:Gem::Version
|
228
|
-
version:
|
228
|
+
version: 0.40.0
|
229
229
|
description:
|
230
230
|
email:
|
231
231
|
- r7kamura@gmail.com
|
@@ -252,6 +252,7 @@ files:
|
|
252
252
|
- lib/qiita/markdown/filters/emoji.rb
|
253
253
|
- lib/qiita/markdown/filters/footnote.rb
|
254
254
|
- lib/qiita/markdown/filters/greenmat.rb
|
255
|
+
- lib/qiita/markdown/filters/group_mention.rb
|
255
256
|
- lib/qiita/markdown/filters/image_link.rb
|
256
257
|
- lib/qiita/markdown/filters/mention.rb
|
257
258
|
- lib/qiita/markdown/filters/sanitize.rb
|
@@ -290,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
291
|
version: '0'
|
291
292
|
requirements: []
|
292
293
|
rubyforge_project:
|
293
|
-
rubygems_version: 2.5
|
294
|
+
rubygems_version: 2.4.5
|
294
295
|
signing_key:
|
295
296
|
specification_version: 4
|
296
297
|
summary: Qiita-specified markdown processor.
|