From a390abdefb5d741ba4375858a79fbf3eaf30f06d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 21 Jul 2017 04:27:40 +0200 Subject: Use the same emoji data on the frontend and backend (#4284) * Use the same emoji data on the frontend and backend * Move emoji.json to repository, add tests This way you don't need to install node dependencies if you only want to run Ruby code --- app/lib/emoji.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 app/lib/emoji.rb (limited to 'app/lib') diff --git a/app/lib/emoji.rb b/app/lib/emoji.rb new file mode 100644 index 000000000..e444b6893 --- /dev/null +++ b/app/lib/emoji.rb @@ -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 -- cgit