gemojione 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/gemojione.rb +17 -0
- data/lib/gemojione/index.rb +10 -0
- data/lib/gemojione/version.rb +1 -1
- data/test/gemojione_test.rb +72 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dd7d95071886d3fbb74ea8bc4d239ece9111d01
|
4
|
+
data.tar.gz: 7bbd1128a1b3ec633a3c69fba5332ae2e6a1f44b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afc4cbd9eceac9b0c6f4255a4f515f15fea5a54a5bc6d770caa58d0745a9c21b1e73bd78ce32a4427a7b920d07f211a8fb2135f75a56f07103cffa6d389d2467
|
7
|
+
data.tar.gz: 3ecf09d1f4f53f41b185b752735ed5ae2c788be3911cfe8144b5de542b4c25bd08bd87854335f69e9ae8aaf6d1ae99f3569760ed1d8a2077a9c32973ece2d473
|
data/README.md
CHANGED
@@ -45,6 +45,9 @@ Image Replacement APIs:
|
|
45
45
|
> Gemojione.replace_unicode_moji_with_images('I ❤ Emoji')
|
46
46
|
=> "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/assets/emoji/2764.png\"> Emoji"
|
47
47
|
|
48
|
+
> Gemojione.replace_named_moji_with_images('I :heart: Emoji')
|
49
|
+
=> "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/assets/emoji/2764.png\"> Emoji"
|
50
|
+
|
48
51
|
> Gemojione.image_url_for_unicode_moji('❤')
|
49
52
|
=> "http://localhost:3000/assets/emoji/2764.png"
|
50
53
|
|
data/lib/gemojione.rb
CHANGED
@@ -58,6 +58,23 @@ module Gemojione
|
|
58
58
|
safe_string
|
59
59
|
end
|
60
60
|
|
61
|
+
def self.replace_named_moji_with_images(string)
|
62
|
+
return string unless string
|
63
|
+
unless string.match(index.shortname_moji_regex)
|
64
|
+
return safe_string(string)
|
65
|
+
end
|
66
|
+
|
67
|
+
safe_string = safe_string(string.dup)
|
68
|
+
safe_string.gsub!(index.shortname_moji_regex) do |code|
|
69
|
+
name = code.tr(':','')
|
70
|
+
moji = index.find_by_name(name)['moji']
|
71
|
+
%Q{<img alt="#{moji}" class="emoji" src="#{ image_url_for_name(name) }">}
|
72
|
+
end
|
73
|
+
safe_string = safe_string.html_safe if safe_string.respond_to?(:html_safe)
|
74
|
+
|
75
|
+
safe_string
|
76
|
+
end
|
77
|
+
|
61
78
|
def self.safe_string(string)
|
62
79
|
if string.respond_to?(:html_safe?) && string.html_safe?
|
63
80
|
string
|
data/lib/gemojione/index.rb
CHANGED
@@ -9,6 +9,7 @@ module Gemojione
|
|
9
9
|
@emoji_by_name = {}
|
10
10
|
@emoji_by_moji = {}
|
11
11
|
@emoji_by_ascii = {}
|
12
|
+
@emoji_by_code = {}
|
12
13
|
|
13
14
|
emoji_list.each do |key, emoji_hash|
|
14
15
|
|
@@ -25,9 +26,14 @@ module Gemojione
|
|
25
26
|
@emoji_by_ascii[emoji_ascii] = emoji_hash if emoji_ascii
|
26
27
|
end
|
27
28
|
|
29
|
+
code = emoji_hash['shortname']
|
30
|
+
@emoji_by_code[code] = emoji_hash if code
|
31
|
+
|
28
32
|
moji = emoji_hash['moji']
|
29
33
|
@emoji_by_moji[moji] = emoji_hash if moji
|
30
34
|
end
|
35
|
+
|
36
|
+
@emoji_code_regex = /#{@emoji_by_code.keys.join('|')}/
|
31
37
|
@emoji_moji_regex = /#{@emoji_by_moji.keys.join('|')}/
|
32
38
|
end
|
33
39
|
|
@@ -47,6 +53,10 @@ module Gemojione
|
|
47
53
|
@emoji_moji_regex
|
48
54
|
end
|
49
55
|
|
56
|
+
def shortname_moji_regex
|
57
|
+
@emoji_code_regex
|
58
|
+
end
|
59
|
+
|
50
60
|
def images_path
|
51
61
|
File.expand_path("../../assets/images", File.dirname(__FILE__))
|
52
62
|
end
|
data/lib/gemojione/version.rb
CHANGED
data/test/gemojione_test.rb
CHANGED
@@ -114,6 +114,78 @@ describe Gemojione do
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
describe 'replace_named_moji_with_images' do
|
118
|
+
|
119
|
+
it 'should return original string without emoji' do
|
120
|
+
assert_equal 'foo', Gemojione.replace_named_moji_with_images('foo')
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should escape html in non html_safe aware strings' do
|
124
|
+
replaced_string = Gemojione.replace_named_moji_with_images(':heart:<script>')
|
125
|
+
assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"><script>", replaced_string
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should replace coded moji with img tag' do
|
129
|
+
base_string = "I :heart: Emoji"
|
130
|
+
replaced_string = Gemojione.replace_named_moji_with_images(base_string)
|
131
|
+
assert_equal "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"> Emoji", replaced_string
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should handle nil string' do
|
135
|
+
assert_equal nil, Gemojione.replace_named_moji_with_images(nil)
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'with html_safe buffer' do
|
139
|
+
it 'should escape non html_safe? strings in emoji' do
|
140
|
+
string = HtmlSafeString.new(':heart:<script>')
|
141
|
+
|
142
|
+
replaced_string = string.stub(:html_safe?, false) do
|
143
|
+
Gemojione.replace_named_moji_with_images(string)
|
144
|
+
end
|
145
|
+
|
146
|
+
assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"><script>", replaced_string
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should escape non html_safe? strings in all strings' do
|
150
|
+
string = HtmlSafeString.new('XSS<script>')
|
151
|
+
|
152
|
+
replaced_string = string.stub(:html_safe?, false) do
|
153
|
+
Gemojione.replace_named_moji_with_images(string)
|
154
|
+
end
|
155
|
+
|
156
|
+
assert_equal "XSS<script>", replaced_string
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should not escape html_safe strings' do
|
160
|
+
string = HtmlSafeString.new(':heart:<a href="harmless">')
|
161
|
+
|
162
|
+
replaced_string = string.stub(:html_safe?, true) do
|
163
|
+
Gemojione.replace_named_moji_with_images(string)
|
164
|
+
end
|
165
|
+
|
166
|
+
assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"><a href=\"harmless\">", replaced_string
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'should always return an html_safe string for emoji' do
|
170
|
+
string = HtmlSafeString.new(':heart:')
|
171
|
+
replaced_string = string.stub(:html_safe, 'safe_buffer') do
|
172
|
+
Gemojione.replace_named_moji_with_images(string)
|
173
|
+
end
|
174
|
+
|
175
|
+
assert_equal "safe_buffer", replaced_string
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'should always return an html_safe string for any string' do
|
179
|
+
string = HtmlSafeString.new('Content')
|
180
|
+
replaced_string = string.stub(:html_safe, 'safe_buffer') do
|
181
|
+
Gemojione.replace_named_moji_with_images(string)
|
182
|
+
end
|
183
|
+
|
184
|
+
assert_equal "Content", replaced_string
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
117
189
|
class HtmlSafeString < String
|
118
190
|
def initialize(*); super; end
|
119
191
|
def html_safe; self; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemojione
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Klabnik
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-06-
|
13
|
+
date: 2016-06-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|