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