slack_mrkdwn 2.0.0 → 2.1.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.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/lib/slack_mrkdwn.rb +61 -24
  3. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: b38208ce080dffeea4bbdacfcc5b455b78b91d872391cb96a0127d52feb98be7
4
- data.tar.gz: aea90c46698e27b6b5d2290352773bd60b6e5446cdfe3932babdab647038c027
2
+ SHA1:
3
+ metadata.gz: 877c12bc0b46fa2981153e30dc6e9de24eb7ffd8
4
+ data.tar.gz: f2fa6d26df6fa513b5d3765242658fee957f7ba4
5
5
  SHA512:
6
- metadata.gz: 8ce667a87b45df0569e24ee3af209ceae51b2ef7108d95ed211c521ed6fa1e6a836f10bc0bcbd1c54474f68363665f14a50a824bdde6807a188c5a6139db3523
7
- data.tar.gz: b2f82329e82c219743f6cdf418eb0ed00310988424e0b5b10b1014044c124abb8289c9f26b6ad84ab8e9e5a1d656b9a48e7f094bd64a501fcea0880ce2303460
6
+ metadata.gz: 6f0544a7dbd781eb5d4f72e775f07859990bd31ee0de89f13cc5c26bab179decec645cfa6618124f5c094f3d438fb980f4da54f5b64dedafb4d32d6af01c340f
7
+ data.tar.gz: 23d95a4c135e33696534b95068139236e990c1c3ff8bcbd7f4d1fedd9f52f565434a18aef12a7798abb67f8d379b740ae952ce145ba783cc68be5256cd0d47bd
data/lib/slack_mrkdwn.rb CHANGED
@@ -2,6 +2,13 @@
2
2
  require 'redcarpet'
3
3
 
4
4
  class SlackMrkdwn < Redcarpet::Render::Base
5
+ class << self
6
+ def from(markdown)
7
+ renderer = SlackMrkdwn.new
8
+ Redcarpet::Markdown.new(renderer, strikethrough: true, underline: true, fenced_code_blocks: true).render(markdown)
9
+ end
10
+ end
11
+
5
12
  # Methods where the first argument is the text content
6
13
  [
7
14
  # block-level calls
@@ -28,7 +35,7 @@ class SlackMrkdwn < Redcarpet::Render::Base
28
35
  args.first
29
36
  end
30
37
  end
31
-
38
+
32
39
  # Encode Slack restricted characters
33
40
  def preprocess(content)
34
41
  content.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;')
@@ -83,48 +90,78 @@ class SlackMrkdwn < Redcarpet::Render::Base
83
90
  "<#{link}|#{content}>"
84
91
  end
85
92
 
86
- # lists
87
- def list(entries, list_type)
88
- reset_list(list_type)
93
+ # list. Called when all list items have been consumed
94
+ def list(entries, style)
95
+ entries = format_list(entries, style)
96
+ remember_last_list_entries(entries)
89
97
  entries
90
98
  end
91
99
 
92
- def reset_list(list_type)
93
- @list_item_count = 0 if list_type == :ordered
100
+ # list item
101
+ def list_item(entry, _style)
102
+ if @last_entries && entry.end_with?(@last_entries)
103
+ entry = indent_list_items(entry)
104
+ @last_entries = nil
105
+ end
106
+ entry
94
107
  end
95
108
 
96
- def list_prefix(list_type)
97
- return "-" if list_type == :unordered
98
- @list_item_count = 0 unless @list_item_count
99
- @list_item_count += 1
100
- "#{@list_item_count}."
109
+ # ![](image)
110
+ def image(link, _title, _content)
111
+ link
101
112
  end
102
113
 
103
- def list_item(entry, list_type)
104
- "#{list_prefix(list_type)} #{entry}"
114
+ def paragraph(text)
115
+ clear_last_list_entries
116
+ "#{text}\n"
105
117
  end
106
118
 
107
- # ![](image)
108
- def image(link, _title, _alt_text)
109
- link
119
+ # # Header
120
+ def header(text, _header_level)
121
+ "*#{text}*\n"
110
122
  end
111
123
 
112
124
  def linebreak()
113
125
  "\n"
114
126
  end
115
127
 
116
- def paragraph(text)
117
- "#{text}\n"
128
+ private
129
+
130
+ def format_list(entries, style)
131
+ case style
132
+ when :ordered
133
+ number_list(entries)
134
+ when :unordered
135
+ add_dashes(entries)
136
+ end
118
137
  end
119
138
 
120
- def header(text, _header_level)
121
- "*#{text}*\n"
139
+ def add_dashes(entries)
140
+ entries.gsub(/^(\S+.*)$/, '- \1')
122
141
  end
123
142
 
124
- class << self
125
- def from(markdown)
126
- renderer = SlackMrkdwn.new
127
- Redcarpet::Markdown.new(renderer, strikethrough: true, underline: true, fenced_code_blocks: true).render(markdown)
143
+ def number_list(entries)
144
+ count = 0
145
+ entries.gsub(/^(\S+.*)$/) do
146
+ match = Regexp.last_match
147
+ count += 1
148
+ "#{count}. #{match[0]}"
128
149
  end
129
150
  end
151
+
152
+ def remember_last_list_entries(entries)
153
+ @last_entries = entries
154
+ end
155
+
156
+ def clear_last_list_entries
157
+ @last_entries = nil
158
+ end
159
+
160
+ def nest_list_entries(entries)
161
+ entries.gsub(/^(.+)$/, ' \1')
162
+ end
163
+
164
+ def indent_list_items(entry)
165
+ entry.gsub(@last_entries, nest_list_entries(@last_entries))
166
+ end
130
167
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack_mrkdwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Cousineau
@@ -92,7 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubygems_version: 3.0.4
95
+ rubyforge_project:
96
+ rubygems_version: 2.5.2.3
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: Convert markdown to Slack's message format 'mrkdwn'.