rumoji 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/Gemfile +5 -0
- data/lib/rumoji.rb +28 -26
- data/lib/rumoji/emoji.rb +2 -1
- data/lib/rumoji/emoji/people.rb +1 -1
- data/lib/rumoji/emoji/symbols.rb +11 -11
- data/lib/rumoji/version.rb +1 -1
- data/spec/rumoji_spec.rb +26 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 937596f7150b11e8edda58fb25ce551aa5a09c34
|
4
|
+
data.tar.gz: f030bc4df7e3f826c3a16bfab65fd1fc16d8cb9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69dd6d823624ed3b57903db1568aeb357c40f78d1c97ca44600d8afb16a15093233c6da5afdfbd702fe358d130a939ce0c2750b4ff4443cb136f662856cc49d3
|
7
|
+
data.tar.gz: 1eed7329f0e7a5b2a8e69bda5a4b65fc0870d0b1059ea826a8800ff74a66cdcbea3228f82dbba4f8c16ab82d4dd73d686ba3eb50ebe110518bfec44f7197dff8
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/lib/rumoji.rb
CHANGED
@@ -14,41 +14,42 @@ module Rumoji
|
|
14
14
|
|
15
15
|
# Transform a cheat-sheet code into an Emoji
|
16
16
|
def decode(str)
|
17
|
-
str.gsub(/:(\
|
17
|
+
str.gsub(/:([^s:]?[\w-]+):/) {|sym| Emoji.find($1.intern).to_s }
|
18
18
|
end
|
19
19
|
|
20
20
|
def encode_io(readable, writeable=StringIO.new(""))
|
21
|
-
|
22
|
-
previous_emoji = []
|
21
|
+
previous_codepoints = []
|
23
22
|
|
24
|
-
|
23
|
+
readable.each_codepoint do |codepoint|
|
25
24
|
possible_emoji = Emoji.select_by_codepoint(codepoint)
|
26
|
-
last_emoji = previous_emoji.pop
|
27
25
|
|
28
|
-
sequence = if
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
sequence = if possible_emoji.empty?
|
27
|
+
# If this codepoint is not part of an emoji
|
28
|
+
# just write it back out, along with any previously stored codepoints.
|
29
|
+
dump_codepoints_to_string(previous_codepoints << codepoint)
|
30
|
+
elsif !possible_emoji.any?(&:multiple?)
|
31
|
+
# If this codepoint is part of an emoji, but not one
|
32
|
+
# that contains multiple codepoints, write out the
|
33
|
+
# first possiblity's cheat code and the previously stored codepoints
|
34
|
+
dump_codepoints_to_string(previous_codepoints) << possible_emoji.first.code
|
35
|
+
else
|
36
|
+
# This codepoint is a part of an emoji with multiple
|
37
|
+
# codepoints, so push it onto the stack.
|
38
|
+
previous_codepoints.push(codepoint)
|
39
|
+
# Check and see if this completes the emoji, otherwise,
|
40
|
+
# write out an empty string.
|
41
|
+
if found = possible_emoji.find {|e| e.codepoints.eql?(previous_codepoints) }
|
42
|
+
previous_codepoints.clear and found.code
|
32
43
|
else
|
33
|
-
|
34
|
-
if multiple_codepoint_emoji.empty?
|
35
|
-
possible_emoji.first.code
|
36
|
-
else
|
37
|
-
previous_emoji.concat(multiple_codepoint_emoji) ; ""
|
38
|
-
end
|
44
|
+
""
|
39
45
|
end
|
40
|
-
else
|
41
|
-
last_emoji.code
|
42
46
|
end
|
43
47
|
|
44
|
-
|
48
|
+
writeable.write sequence
|
45
49
|
end
|
46
50
|
|
47
|
-
#
|
48
|
-
|
49
|
-
if last_emoji = previous_emoji.pop
|
50
|
-
writeable.write sequence_from_codepoints(last_emoji.codepoints.first)
|
51
|
-
end
|
51
|
+
# Write any remaining codepoints.
|
52
|
+
writeable.write dump_codepoints_to_string(previous_codepoints) if previous_codepoints.any?
|
52
53
|
|
53
54
|
writeable
|
54
55
|
end
|
@@ -62,9 +63,10 @@ module Rumoji
|
|
62
63
|
|
63
64
|
private
|
64
65
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
66
|
+
def dump_codepoints_to_string(codepoints)
|
67
|
+
codepoints.pack("U*").tap do
|
68
|
+
codepoints.clear
|
69
|
+
end
|
68
70
|
end
|
69
71
|
|
70
72
|
end
|
data/lib/rumoji/emoji.rb
CHANGED
@@ -59,11 +59,12 @@ module Rumoji
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.select_by_codepoint(codepoint)
|
62
|
-
ALL.select {|emoji| emoji.codepoints.
|
62
|
+
ALL.select {|emoji| emoji.codepoints.include? codepoint }
|
63
63
|
end
|
64
64
|
|
65
65
|
def self.find_by_codepoint(codepoint)
|
66
66
|
ALL.find {|emoji| emoji.hex == codepoint.to_s(16).upcase }
|
67
67
|
end
|
68
|
+
|
68
69
|
end
|
69
70
|
end
|
data/lib/rumoji/emoji/people.rb
CHANGED
@@ -94,7 +94,7 @@ module Rumoji
|
|
94
94
|
self.new("\u{1F3B5}", [:musical_note]), # "music, being in good mood"
|
95
95
|
self.new("\u{1F525}", [:fire], "FIRE"),
|
96
96
|
# Poop
|
97
|
-
self.new("\u{1F4A9}", [:
|
97
|
+
self.new("\u{1F4A9}", [:poop, :hankey, :shit], "PILE OF POO"), # "dog dirt"
|
98
98
|
self.new("\u{1F44D}", [:thumbsup, :"+1"], "THUMBS UP SIGN"),
|
99
99
|
self.new("\u{1F44E}", [:thumbsdown, :"-1"], "THUMBS DOWN SIGN"),
|
100
100
|
self.new("\u{1F44C}", [:ok_hand], "OK HAND SIGN"),
|
data/lib/rumoji/emoji/symbols.rb
CHANGED
@@ -81,16 +81,16 @@ module Rumoji
|
|
81
81
|
self.new("\u{1f6c3}", [:customs]),
|
82
82
|
self.new("\u{1f4a0}", [:diamond_shape_with_a_dot_inside]),
|
83
83
|
self.new("\u{1f6af}", [:do_not_litter]),
|
84
|
-
self.new("\u{0038 20e3}" , [:eight]),
|
84
|
+
self.new("\u{0038 fe0f 20e3}" , [:eight]),
|
85
85
|
self.new("\u{2734}" , [:eight_pointed_black_star]),
|
86
86
|
self.new("\u{2733}" , [:eight_spoked_asterisk]),
|
87
87
|
self.new("\u{1f51a}", [:end]),
|
88
88
|
self.new("\u{23e9}" , [:fast_forward]),
|
89
|
-
self.new("\u{0035 20e3}" , [:five]),
|
90
|
-
self.new("\u{0034 20e3}" , [:four]),
|
89
|
+
self.new("\u{0035 fe0f 20e3}" , [:five]),
|
90
|
+
self.new("\u{0034 fe0f 20e3}" , [:four]),
|
91
91
|
self.new("\u{1f193}", [:free]),
|
92
92
|
self.new("\u{264a}" , [:gemini]),
|
93
|
-
self.new("\u{0023 20e3}" , [:hash]),
|
93
|
+
self.new("\u{0023 fe0f 20e3}" , [:hash]),
|
94
94
|
self.new("\u{1f49f}", [:heart_decoration]),
|
95
95
|
self.new("\u{2714}" , [:heavy_check_mark]),
|
96
96
|
self.new("\u{2797}" , [:heavy_division_sign]),
|
@@ -120,7 +120,7 @@ module Rumoji
|
|
120
120
|
self.new("\u{274e}" , [:negative_squared_cross_mark]),
|
121
121
|
self.new("\u{1f195}", [:new]),
|
122
122
|
self.new("\u{1f196}", [:ng]),
|
123
|
-
self.new("\u{0039 20e3}" , [:nine]),
|
123
|
+
self.new("\u{0039 fe0f 20e3}" , [:nine]),
|
124
124
|
self.new("\u{1f6b3}", [:no_bicycles]),
|
125
125
|
self.new("\u{26d4}" , [:no_entry]),
|
126
126
|
self.new("\u{1f6ab}", [:no_entry_sign]),
|
@@ -132,7 +132,7 @@ module Rumoji
|
|
132
132
|
self.new("\u{1f17e}", [:o2]),
|
133
133
|
self.new("\u{1f197}", [:ok]),
|
134
134
|
self.new("\u{1f51b}", [:on]),
|
135
|
-
self.new("\u{0031 20e3}" , [:one]),
|
135
|
+
self.new("\u{0031 fe0f 20e3}" , [:one]),
|
136
136
|
self.new("\u{26ce}" , [:ophiuchus]),
|
137
137
|
self.new("\u{1f17f}", [:parking]),
|
138
138
|
self.new("\u{303d}" , [:part_alternation_mark]),
|
@@ -152,9 +152,9 @@ module Rumoji
|
|
152
152
|
self.new("\u{2650}" , [:sagittarius]),
|
153
153
|
self.new("\u{264f}" , [:scorpius]),
|
154
154
|
self.new("\u{3299}" , [:secret]),
|
155
|
-
self.new("\u{0037 20e3}" , [:seven]),
|
155
|
+
self.new("\u{0037 fe0f 20e3}" , [:seven]),
|
156
156
|
self.new("\u{1f4f6}", [:signal_strength]),
|
157
|
-
self.new("\u{0036 20e3}" , [:six]),
|
157
|
+
self.new("\u{0036 fe0f 20e3}" , [:six]),
|
158
158
|
self.new("\u{1f52f}", [:six_pointed_star]),
|
159
159
|
self.new("\u{1f539}", [:small_blue_diamond]),
|
160
160
|
self.new("\u{1f538}", [:small_orange_diamond]),
|
@@ -164,12 +164,12 @@ module Rumoji
|
|
164
164
|
self.new("\u{1f198}", [:sos]),
|
165
165
|
self.new("\u{1f523}", [:symbols]),
|
166
166
|
self.new("\u{2649}" , [:taurus]),
|
167
|
-
self.new("\u{0033 20e3}" , [:three]),
|
167
|
+
self.new("\u{0033 fe0f 20e3}" , [:three]),
|
168
168
|
self.new("\u{2122}" , [:tm]),
|
169
169
|
self.new("\u{1f51d}", [:top]),
|
170
170
|
self.new("\u{1f531}", [:trident]),
|
171
171
|
self.new("\u{1f500}", [:twisted_rightwards_arrows]),
|
172
|
-
self.new("\u{0032 20e3}" , [:two]),
|
172
|
+
self.new("\u{0032 fe0f 20e3}" , [:two]),
|
173
173
|
self.new("\u{1f239}", [:u5272]),
|
174
174
|
self.new("\u{1f234}", [:u5408]),
|
175
175
|
self.new("\u{1f23a}", [:u55b6]),
|
@@ -195,7 +195,7 @@ module Rumoji
|
|
195
195
|
self.new("\u{1f533}", [:white_square_button]),
|
196
196
|
self.new("\u{1f6ba}", [:womens]),
|
197
197
|
self.new("\u{274c}" , [:x]),
|
198
|
-
self.new("\u{0030 20e3}" , [:zero])
|
198
|
+
self.new("\u{0030 fe0f 20e3}" , [:zero])
|
199
199
|
]
|
200
200
|
end
|
201
201
|
end
|
data/lib/rumoji/version.rb
CHANGED
data/spec/rumoji_spec.rb
CHANGED
@@ -7,14 +7,16 @@ describe Rumoji do
|
|
7
7
|
before do
|
8
8
|
@poop = "💩"
|
9
9
|
@smile = "😄"
|
10
|
-
@zero = "0
|
10
|
+
@zero = "0️⃣"
|
11
11
|
@us = "🇺🇸"
|
12
|
+
@non_potable_water = "🚱"
|
12
13
|
end
|
13
14
|
|
14
15
|
describe "#encode" do
|
15
16
|
it "transforms emoji into cheat-sheet form" do
|
16
17
|
key = :smile
|
17
18
|
Rumoji.encode(@smile).must_equal ":smile:"
|
19
|
+
Rumoji.encode("#{@smile}").must_equal ":smile:"
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
@@ -22,6 +24,14 @@ describe Rumoji do
|
|
22
24
|
it "transforms a cheat-sheet code into an emoji" do
|
23
25
|
Rumoji.decode(":poop:").must_equal @poop
|
24
26
|
end
|
27
|
+
|
28
|
+
it "transforms a cheat-sheet code into an emoji with colon" do
|
29
|
+
Rumoji.decode("::poop:").must_equal ':' + @poop
|
30
|
+
end
|
31
|
+
|
32
|
+
it "transforms a cheat-sheet code with a dash into an emoji" do
|
33
|
+
Rumoji.decode(":non-potable_water:").must_equal @non_potable_water
|
34
|
+
end
|
25
35
|
end
|
26
36
|
|
27
37
|
describe "#encode_io" do
|
@@ -33,7 +43,6 @@ describe Rumoji do
|
|
33
43
|
it "keeps codepoints that match the beginnings of multi-codepoint emoji" do
|
34
44
|
text = "i like #hashtags and 1direction they are the #1 band. end with 9"
|
35
45
|
io = StringIO.new(text)
|
36
|
-
|
37
46
|
Rumoji.encode_io(io).string.must_equal text
|
38
47
|
end
|
39
48
|
|
@@ -46,17 +55,30 @@ describe Rumoji do
|
|
46
55
|
end
|
47
56
|
|
48
57
|
it "transforms a stream of many emoji" do
|
49
|
-
num = ":one
|
50
|
-
emoji = StringIO.new
|
58
|
+
num = ":one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :zero: :hash:"
|
59
|
+
emoji = StringIO.new"1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 0️⃣ #️⃣"
|
51
60
|
Rumoji.encode_io(emoji).string.must_equal num
|
52
61
|
end
|
53
62
|
|
63
|
+
it "does not encode double digits" do
|
64
|
+
num = ":zero: :one: :two: :three: :four: :five: :six: :seven: :eight: :nine: :hash:"
|
65
|
+
double_digits = StringIO.new("00 11 22 33 44 55 66 77 88 99 ##")
|
66
|
+
Rumoji.encode_io(double_digits).string.wont_equal num
|
67
|
+
end
|
68
|
+
|
54
69
|
describe "with leading and trailing characters" do
|
55
70
|
it "is able to pull multipoint emoji out of a sequence" do
|
56
71
|
io = StringIO.new("An example of a multipoint emoji is the #{@us} flag.")
|
57
72
|
Rumoji.encode_io(io).string.must_equal "An example of a multipoint emoji is the :us: flag."
|
58
73
|
end
|
59
74
|
end
|
75
|
+
|
76
|
+
describe "with trailing emoji" do
|
77
|
+
it "writes characters that are in a multipoint emoji followed by an emoji" do
|
78
|
+
io = StringIO.new "I would like 0#{@poop}"
|
79
|
+
Rumoji.encode_io(io).string.must_equal "I would like 0:poop:"
|
80
|
+
end
|
81
|
+
end
|
60
82
|
end
|
61
83
|
|
62
84
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rumoji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Wunsch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Transcode emoji utf-8 characters into emoji-cheat-sheet form
|
14
14
|
email:
|
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
57
|
rubyforge_project:
|
58
|
-
rubygems_version: 2.0.
|
58
|
+
rubygems_version: 2.0.14
|
59
59
|
signing_key:
|
60
60
|
specification_version: 4
|
61
61
|
summary: Transcode emoji utf-8 characters into emoji-cheat-sheet form
|