|
|
@ -0,0 +1,40 @@ |
|
|
|
# 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?('-') |
|
|
|
codepoint.split('-').map(&:hex).pack('U') |
|
|
|
else |
|
|
|
[codepoint.hex].pack('U') |
|
|
|
end |
|
|
|
end |
|
|
|
end |