2017-07-20 19:27:40 -07:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'singleton'
|
|
|
|
|
|
|
|
class Emoji
|
|
|
|
include Singleton
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
data = Oj.load(File.open(File.join(Rails.root, 'lib', 'assets', 'emoji.json')))
|
|
|
|
|
|
|
|
@map = {}
|
|
|
|
|
|
|
|
data.each do |_, emoji|
|
|
|
|
keys = [emoji['shortname']] + emoji['aliases']
|
|
|
|
unicode = codepoint_to_unicode(emoji['unicode'])
|
|
|
|
|
|
|
|
keys.each do |key|
|
|
|
|
@map[key] = unicode
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def unicode(shortcode)
|
|
|
|
@map[shortcode]
|
|
|
|
end
|
|
|
|
|
|
|
|
def names
|
|
|
|
@map.keys
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def codepoint_to_unicode(codepoint)
|
|
|
|
if codepoint.include?('-')
|
2017-07-26 16:02:15 -07:00
|
|
|
codepoint.split('-').map(&:hex).pack('U*')
|
2017-07-20 19:27:40 -07:00
|
|
|
else
|
|
|
|
[codepoint.hex].pack('U')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|