soffes/quesadilla

View on GitHub
lib/quesadilla/extractor/emoji.rb

Summary

Maintainability
A
45 mins
Test Coverage
# encoding: UTF-8

module Quesadilla
  class Extractor
    # Extract named emoji.
    #
    # This module has no public methods.
    module Emoji
    private

      require 'named_emoji'

      # Emoji colon-syntax regex
      EMOJI_COLON_REGEX = %r{:([a-zA-Z0-9_\-\+]+):}.freeze

      def replace_emoji
        codes = {}

        # Replace codes with shas
        i = 0
        while match = @original_text.match(Markdown::CODE_REGEX)
          original = match[0]
          key = Digest::SHA1.hexdigest("#{original}-#{i}")
          codes[key] = original
          @original_text.sub!(original, key)
          i += 1
        end

        # Replace emojis
        match = @original_text.match(EMOJI_COLON_REGEX)
        match.captures.each do |match|
          sym = match.downcase.to_sym
          next unless NamedEmoji.emojis.keys.include?(sym)
          @original_text.sub!(":#{sym}:", NamedEmoji.emojis[sym])
        end if match && match.captures

        # Unreplace codes
        codes.each do |key, value|
          @original_text.sub!(key, value)
        end
      end
    end
  end
end