Class: Slack::Messenger::Util::LinkFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/slack-messenger/util/link_formatter.rb

Constant Summary collapse

HTML_PATTERN =
%r{
  <a
  (?:.*?)
  href=['"](.+?)['"]
  (?:.*?)>
  (.+?)
  </a>
}x
VALID_URI_CHARS =
'\w\-\.\~\:\/\?\#\[\]\@\!\$\&\'\*\+\,\;\='
MARKDOWN_PATTERN =

Attempt at only matching pairs of parens per the markdown spec spec.commonmark.org/0.27/#links

rubular.com/r/WfdZ1arvF6PNWO

%r{
    \[ ([^\[\]]*?) \]
    \(
      ( (?:https?:\/\/|mailto:)
      (?:[#{VALID_URI_CHARS}]*?|[#{VALID_URI_CHARS}]*?\([#{VALID_URI_CHARS}]*?\)[#{VALID_URI_CHARS}]*?) )
    \)
}x

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(string, formats: %i[html markdown]) ⇒ LinkFormatter

Returns a new instance of LinkFormatter.



39
40
41
42
# File 'lib/slack-messenger/util/link_formatter.rb', line 39

def initialize string, formats: %i[html markdown]
  @formats = formats
  @orig    = string.respond_to?(:scrub) ? string.scrub : string
end

Instance Attribute Details

#formatsObject (readonly)

Returns the value of attribute formats.



37
38
39
# File 'lib/slack-messenger/util/link_formatter.rb', line 37

def formats
  @formats
end

Class Method Details

.format(string, opts = {}) ⇒ Object



32
33
34
# File 'lib/slack-messenger/util/link_formatter.rb', line 32

def format string, opts={}
  LinkFormatter.new(string, opts).formatted
end

Instance Method Details

#formattedObject

rubocop:disable Lint/RescueWithoutErrorClass



45
46
47
48
49
50
51
52
# File 'lib/slack-messenger/util/link_formatter.rb', line 45

def formatted
  return @orig unless @orig.respond_to?(:gsub)

  sub_markdown_links(sub_html_links(@orig))
rescue => e
  raise e unless RUBY_VERSION < "2.1" && e.message.include?("invalid byte sequence")
  raise e, "#{e.message}. Consider including the 'string-scrub' gem to strip invalid characters"
end