class SlackMrkdwn

Public Class Methods

from(markdown) click to toggle source
# File lib/slack_mrkdwn.rb, line 6
def from(markdown)
  renderer = SlackMrkdwn.new
  Redcarpet::Markdown.new(renderer, strikethrough: true, underline: true, fenced_code_blocks: true).render(markdown)
end

Public Instance Methods

block_code(content, _language) click to toggle source

“` code block “`

# File lib/slack_mrkdwn.rb, line 74
def block_code(content, _language)
  "```\n#{content}```\n\n"
end
block_quote(content) click to toggle source

> quote

# File lib/slack_mrkdwn.rb, line 79
def block_quote(content)
  "> #{content}"
end
codespan(content) click to toggle source

`code`

# File lib/slack_mrkdwn.rb, line 84
def codespan(content)
  "`#{content}`"
end
double_emphasis(content) click to toggle source

bold

# File lib/slack_mrkdwn.rb, line 64
def double_emphasis(content)
  "*#{content}*"
end
emphasis(content) click to toggle source

italic

# File lib/slack_mrkdwn.rb, line 59
def emphasis(content)
  "_#{content}_"
end
header(text, _header_level) click to toggle source

Header

# File lib/slack_mrkdwn.rb, line 121
def header(text, _header_level)
  "*#{text}*\n"
end
image(link, _title, _content) click to toggle source

![](image)

# File lib/slack_mrkdwn.rb, line 110
def image(link, _title, _content)
  link
end
linebreak() click to toggle source
# File lib/slack_mrkdwn.rb, line 125
def linebreak()
  "\n"
end
list(entries, style) click to toggle source

list. Called when all list items have been consumed

# File lib/slack_mrkdwn.rb, line 94
def list(entries, style)
  entries = format_list(entries, style)
  remember_last_list_entries(entries)
  entries
end
list_item(entry, _style) click to toggle source

list item

# File lib/slack_mrkdwn.rb, line 101
def list_item(entry, _style)
  if @last_entries && entry.end_with?(@last_entries)
    entry = indent_list_items(entry)
    @last_entries = nil
  end
  entry
end
paragraph(text) click to toggle source
# File lib/slack_mrkdwn.rb, line 114
def paragraph(text)
  pre_spacing = @last_entries ? "\n" : nil
  clear_last_list_entries
  "#{pre_spacing}#{text}\n\n"
end
postprocess(content) click to toggle source
# File lib/slack_mrkdwn.rb, line 44
def postprocess(content)
  content.rstrip
end
preprocess(content) click to toggle source

Encode Slack restricted characters

# File lib/slack_mrkdwn.rb, line 40
def preprocess(content)
  content.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;')
end
strikethrough(content) click to toggle source

~~strikethrough~~

# File lib/slack_mrkdwn.rb, line 49
def strikethrough(content)
  "~#{content}~"
end
triple_emphasis(content) click to toggle source

***bold and italic***

# File lib/slack_mrkdwn.rb, line 69
def triple_emphasis(content)
  "*_#{content}_*"
end
underline(content) click to toggle source

italic

# File lib/slack_mrkdwn.rb, line 54
def underline(content)
  "_#{content}_"
end

Private Instance Methods

add_dashes(entries) click to toggle source
# File lib/slack_mrkdwn.rb, line 140
def add_dashes(entries)
  entries.gsub(/^(\S+.*)$/, '- \1')
end
clear_last_list_entries() click to toggle source
# File lib/slack_mrkdwn.rb, line 157
def clear_last_list_entries
  @last_entries = nil
end
format_list(entries, style) click to toggle source
# File lib/slack_mrkdwn.rb, line 131
def format_list(entries, style)
  case style
  when :ordered
    number_list(entries)
  when :unordered
    add_dashes(entries)
  end
end
indent_list_items(entry) click to toggle source
# File lib/slack_mrkdwn.rb, line 165
def indent_list_items(entry)
  entry.gsub(@last_entries, nest_list_entries(@last_entries))
end
nest_list_entries(entries) click to toggle source
# File lib/slack_mrkdwn.rb, line 161
def nest_list_entries(entries)
  entries.gsub(/^(.+)$/, '   \1')
end
number_list(entries) click to toggle source
# File lib/slack_mrkdwn.rb, line 144
def number_list(entries)
  count = 0
  entries.gsub(/^(\S+.*)$/) do
    match = Regexp.last_match
    count += 1
    "#{count}. #{match[0]}"
  end
end
remember_last_list_entries(entries) click to toggle source
# File lib/slack_mrkdwn.rb, line 153
def remember_last_list_entries(entries)
  @last_entries = entries
end