qiita-markdown 0.12.0 → 0.13.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
  SHA1:
3
- metadata.gz: ff7146b861299953ada5127646c21a9cffb3b2ed
4
- data.tar.gz: 1efaba3aa4ded077adec7894e0fc6b22c7377c06
3
+ metadata.gz: c22f45ccf624ebe29068482764e35d462ab0e633
4
+ data.tar.gz: 34b99302fce125f03a8418eee4d981e0d19d71b6
5
5
  SHA512:
6
- metadata.gz: d0d94503283fe41276b338bab864bd0f449adbf1d93417d46ae4187754197e957319bb551e6122a562972545d5313104cb753646239ff2aac9c953f6aae974c0
7
- data.tar.gz: 4c67bdc61902c94a21ef233d1725e7e14b4cbac14cf8cbdb24f6700ebaf80449228c7215ee8c2375382459f2be1aa3dcccc938cbd4b41a853c7389fc4d51da1a
6
+ metadata.gz: 967e0ef2ee7a811af3f175776772a6819578b9ce4c5a28e052bdc79fc41935ffee4c3ed27efd82a207b0d22a6fae178b4d1f029519c9732918b761bca54f6078
7
+ data.tar.gz: 15a8a37fc61191d93b2f1942208417bd67b68e1fdfb5113b218428c50155858394d07a1a61f9a32230911de7cb715717d9dac60f7200e53e02c5ef6bff7c4bd5
data/.rubocop.yml CHANGED
@@ -16,6 +16,10 @@ Style/EmptyCaseCondition:
16
16
  Style/GuardClause:
17
17
  Enabled: false
18
18
 
19
+ Style/PredicateName:
20
+ NamePrefixBlacklist:
21
+ - is_
22
+
19
23
  Style/StringLiterals:
20
24
  EnforcedStyle: double_quotes
21
25
 
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
@@ -1,3 +1,6 @@
1
+ ## 0.13.0
2
+ - Support group mention
3
+
1
4
  ## 0.12.0
2
5
  - Add custom emoji support via `:emoji_names` and `:emoji_url_generator` contexts
3
6
 
@@ -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
@@ -14,6 +14,7 @@ module Qiita
14
14
  Filters::Emoji,
15
15
  Filters::SyntaxHighlight,
16
16
  Filters::Mention,
17
+ Filters::GroupMention,
17
18
  Filters::Sanitize,
18
19
  ]
19
20
 
@@ -1,5 +1,5 @@
1
1
  module Qiita
2
2
  module Markdown
3
- VERSION = "0.12.0"
3
+ VERSION = "0.13.0"
4
4
  end
5
5
  end
@@ -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", "~> 0.29"
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.12.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-05-25 00:00:00.000000000 Z
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: '0.29'
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: '0.29'
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.1
294
+ rubygems_version: 2.4.5
294
295
  signing_key:
295
296
  specification_version: 4
296
297
  summary: Qiita-specified markdown processor.