gemojione 3.1.0 → 3.2.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/CHANGELOG.md +9 -1
- data/README.md +44 -0
- data/Rakefile +28 -1
- data/assets/sprites/emojione.sprites.png +0 -0
- data/assets/sprites/emojione.sprites.scss +1794 -0
- data/gemojione.gemspec +2 -0
- data/lib/gemojione.rb +38 -1
- data/lib/gemojione/index.rb +5 -0
- data/lib/gemojione/tasks/install.rake +1 -0
- data/lib/gemojione/version.rb +1 -1
- data/test/gemojione_test.rb +56 -1
- metadata +46 -16
data/gemojione.gemspec
CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "minitest"
|
26
|
+
spec.add_development_dependency "sprite-factory"
|
27
|
+
spec.add_development_dependency 'rmagick'
|
26
28
|
end
|
data/lib/gemojione.rb
CHANGED
@@ -17,6 +17,7 @@ module Gemojione
|
|
17
17
|
@asset_path = nil
|
18
18
|
@default_size = nil
|
19
19
|
@use_svg = false
|
20
|
+
@use_sprite = false
|
20
21
|
|
21
22
|
@escaper = defined?(EscapeUtils) ? EscapeUtils : CGI
|
22
23
|
|
@@ -52,6 +53,14 @@ module Gemojione
|
|
52
53
|
@use_svg = useit
|
53
54
|
end
|
54
55
|
|
56
|
+
def self.use_sprite
|
57
|
+
@use_sprite
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.use_sprite=(useit)
|
61
|
+
@use_sprite = useit
|
62
|
+
end
|
63
|
+
|
55
64
|
def self.image_url_for_name(name)
|
56
65
|
emoji = index.find_by_name(name)
|
57
66
|
"#{asset_host}#{ File.join(asset_path, emoji['unicode']) }.#{ use_svg ? 'svg' : 'png' }"
|
@@ -63,7 +72,12 @@ module Gemojione
|
|
63
72
|
end
|
64
73
|
|
65
74
|
def self.image_tag_for_moji(moji)
|
66
|
-
|
75
|
+
if use_sprite
|
76
|
+
emoji = index.find_by_moji(moji)
|
77
|
+
%Q{<span class="emojione emojione-#{emoji['unicode'].to_s.downcase}" alt="#{ moji }" title="#{ moji }">#{ moji }</span>}
|
78
|
+
else
|
79
|
+
%Q{<img alt="#{moji}" class="emoji" src="#{ image_url_for_unicode_moji(moji) }"#{ default_size ? ' style="width: '+default_size+';"' : '' }>}
|
80
|
+
end
|
67
81
|
end
|
68
82
|
|
69
83
|
def self.replace_unicode_moji_with_images(string)
|
@@ -98,6 +112,25 @@ module Gemojione
|
|
98
112
|
safe_string
|
99
113
|
end
|
100
114
|
|
115
|
+
def self.replace_ascii_moji_with_images(string)
|
116
|
+
return string unless string
|
117
|
+
unless string.match(index.ascii_moji_regex)
|
118
|
+
return safe_string(string)
|
119
|
+
end
|
120
|
+
|
121
|
+
string.gsub!(index.ascii_moji_regex) do |code|
|
122
|
+
moji = index.find_by_ascii(code)['moji']
|
123
|
+
Gemojione.image_tag_for_moji(moji)
|
124
|
+
end
|
125
|
+
|
126
|
+
unless string.respond_to?(:html_safe?) && string.html_safe?
|
127
|
+
safe_string = CGI::unescapeElement(CGI.escape_html(string), %w[span img])
|
128
|
+
end
|
129
|
+
safe_string = safe_string.html_safe if safe_string.respond_to?(:html_safe)
|
130
|
+
|
131
|
+
safe_string
|
132
|
+
end
|
133
|
+
|
101
134
|
def self.safe_string(string)
|
102
135
|
if string.respond_to?(:html_safe?) && string.html_safe?
|
103
136
|
string
|
@@ -117,4 +150,8 @@ module Gemojione
|
|
117
150
|
def self.images_path
|
118
151
|
File.expand_path("../assets/#{ use_svg ? 'svg' : 'png' }", File.dirname(__FILE__))
|
119
152
|
end
|
153
|
+
|
154
|
+
def self.sprites_path
|
155
|
+
File.expand_path("../assets/sprites", File.dirname(__FILE__))
|
156
|
+
end
|
120
157
|
end
|
data/lib/gemojione/index.rb
CHANGED
@@ -41,6 +41,7 @@ module Gemojione
|
|
41
41
|
|
42
42
|
@emoji_code_regex = /#{@emoji_by_code.keys.map{|ec| Regexp.escape(ec)}.join('|')}/
|
43
43
|
@emoji_moji_regex = /#{@emoji_by_moji.keys.map{|ec| Regexp.escape(ec)}.join('|')}/
|
44
|
+
@emoji_ascii_regex = /#{@emoji_by_ascii.keys.map{|ec| Regexp.escape(ec)}.join('|')}/
|
44
45
|
end
|
45
46
|
|
46
47
|
def find_by_moji(moji)
|
@@ -66,5 +67,9 @@ module Gemojione
|
|
66
67
|
def shortname_moji_regex
|
67
68
|
@emoji_code_regex
|
68
69
|
end
|
70
|
+
|
71
|
+
def ascii_moji_regex
|
72
|
+
@emoji_ascii_regex
|
73
|
+
end
|
69
74
|
end
|
70
75
|
end
|
data/lib/gemojione/version.rb
CHANGED
data/test/gemojione_test.rb
CHANGED
@@ -71,6 +71,12 @@ describe Gemojione do
|
|
71
71
|
assert_equal '<img alt="🌀" class="emoji" src="http://localhost:3000/1F300.png" style="width: 42px;">', Gemojione.image_tag_for_moji('🌀')
|
72
72
|
Gemojione.default_size=nil
|
73
73
|
end
|
74
|
+
|
75
|
+
it 'should generate spritesheet tag' do
|
76
|
+
with_emoji_config(:use_sprite, true) do
|
77
|
+
assert_equal "<span class=\"emojione emojione-1f300\" alt=\"🌀\" title=\"🌀\">🌀</span>", Gemojione.image_tag_for_moji('🌀')
|
78
|
+
end
|
79
|
+
end
|
74
80
|
end
|
75
81
|
|
76
82
|
describe "replace_unicode_moji_with_images" do
|
@@ -89,6 +95,14 @@ describe Gemojione do
|
|
89
95
|
assert_equal "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"> Emoji", replaced_string
|
90
96
|
end
|
91
97
|
|
98
|
+
it 'should replace unicode moji with span tag for spritesheet' do
|
99
|
+
with_emoji_config(:use_sprite, true) do
|
100
|
+
base_string = "I ❤ Emoji"
|
101
|
+
replaced_string = Gemojione.replace_unicode_moji_with_images(base_string)
|
102
|
+
assert_equal "I <span class=\"emojione emojione-2764\" alt=\"❤\" title=\"❤\">❤</span> Emoji", replaced_string
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
92
106
|
it 'should escape regex breaker mojis' do
|
93
107
|
assert_equal "<img alt=\"*⃣\" class=\"emoji\" src=\"http://localhost:3000/002A-20E3.png\">", Gemojione.replace_unicode_moji_with_images('*⃣')
|
94
108
|
end
|
@@ -149,6 +163,13 @@ describe Gemojione do
|
|
149
163
|
end
|
150
164
|
|
151
165
|
describe 'replace_named_moji_with_images' do
|
166
|
+
it 'should replace with span tag for spritesheet' do
|
167
|
+
with_emoji_config(:use_sprite, true) do
|
168
|
+
base_string = "I :heart: Emoji"
|
169
|
+
replaced_string = Gemojione.replace_named_moji_with_images(base_string)
|
170
|
+
assert_equal "I <span class=\"emojione emojione-2764\" alt=\"❤\" title=\"❤\">❤</span> Emoji", replaced_string
|
171
|
+
end
|
172
|
+
end
|
152
173
|
|
153
174
|
it 'should return original string without emoji' do
|
154
175
|
assert_equal 'foo', Gemojione.replace_named_moji_with_images('foo')
|
@@ -217,6 +238,30 @@ describe Gemojione do
|
|
217
238
|
|
218
239
|
assert_equal "Content", replaced_string
|
219
240
|
end
|
241
|
+
|
242
|
+
it 'should escape non html_safe? strings with ascii' do
|
243
|
+
string = HtmlSafeString.new('Moji is <3 XSS<script> attacks are not')
|
244
|
+
|
245
|
+
replaced_string = string.stub(:html_safe?, false) do
|
246
|
+
Gemojione.replace_ascii_moji_with_images(string)
|
247
|
+
end
|
248
|
+
|
249
|
+
assert_equal "Moji is <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/2764.png\"> XSS<script> attacks are not", replaced_string
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
describe "replace_ascii_moji_with_images" do
|
255
|
+
it 'should replace ascii moji with img tag' do
|
256
|
+
replaced_string = Gemojione.replace_ascii_moji_with_images("Emoji is :-)")
|
257
|
+
assert_equal "Emoji is <img alt=\"😄\" class=\"emoji\" src=\"http://localhost:3000/1F604.png\">", replaced_string
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'should replace ascii moji with span tag for sprite' do
|
261
|
+
with_emoji_config(:use_sprite, true) do
|
262
|
+
replaced_string = Gemojione.replace_ascii_moji_with_images("Emoji is :-)")
|
263
|
+
assert_equal "Emoji is <span class=\"emojione emojione-1f604\" alt=\"😄\" title=\"😄\">😄</span>", replaced_string
|
264
|
+
end
|
220
265
|
end
|
221
266
|
end
|
222
267
|
|
@@ -239,6 +284,16 @@ describe Gemojione do
|
|
239
284
|
end
|
240
285
|
end
|
241
286
|
|
287
|
+
describe "sprites_path" do
|
288
|
+
it "should return sprite stylesheet" do
|
289
|
+
assert File.exist?("#{Gemojione.sprites_path}/emojione.sprites.scss")
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should return PNG sprites" do
|
293
|
+
assert File.exist?("#{Gemojione.sprites_path}/emojione.sprites.png")
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
242
297
|
class HtmlSafeString < String
|
243
298
|
def initialize(*); super; end
|
244
299
|
def html_safe; self; end
|
@@ -255,4 +310,4 @@ describe Gemojione do
|
|
255
310
|
Gemojione.send("#{name}=", original_value)
|
256
311
|
end
|
257
312
|
end
|
258
|
-
end
|
313
|
+
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: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Klabnik
|
@@ -10,62 +10,90 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bundler
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '1.3'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - ~>
|
40
|
+
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '1.3'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: minitest
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: sprite-factory
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: rmagick
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
69
97
|
- !ruby/object:Gem::Version
|
70
98
|
version: '0'
|
71
99
|
description: A gem for EmojiOne
|
@@ -77,9 +105,9 @@ executables: []
|
|
77
105
|
extensions: []
|
78
106
|
extra_rdoc_files: []
|
79
107
|
files:
|
80
|
-
- .gitignore
|
81
|
-
- .rvmrc
|
82
|
-
- .travis.yml
|
108
|
+
- ".gitignore"
|
109
|
+
- ".rvmrc"
|
110
|
+
- ".travis.yml"
|
83
111
|
- CHANGELOG.md
|
84
112
|
- Gemfile
|
85
113
|
- LICENSE.txt
|
@@ -1879,6 +1907,8 @@ files:
|
|
1879
1907
|
- assets/png/303D.png
|
1880
1908
|
- assets/png/3297.png
|
1881
1909
|
- assets/png/3299.png
|
1910
|
+
- assets/sprites/emojione.sprites.png
|
1911
|
+
- assets/sprites/emojione.sprites.scss
|
1882
1912
|
- assets/svg/0023-20E3.svg
|
1883
1913
|
- assets/svg/002A-20E3.svg
|
1884
1914
|
- assets/svg/0030-20E3.svg
|
@@ -3695,17 +3725,17 @@ require_paths:
|
|
3695
3725
|
- lib
|
3696
3726
|
required_ruby_version: !ruby/object:Gem::Requirement
|
3697
3727
|
requirements:
|
3698
|
-
- -
|
3728
|
+
- - ">="
|
3699
3729
|
- !ruby/object:Gem::Version
|
3700
3730
|
version: '0'
|
3701
3731
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
3702
3732
|
requirements:
|
3703
|
-
- -
|
3733
|
+
- - ">="
|
3704
3734
|
- !ruby/object:Gem::Version
|
3705
3735
|
version: '0'
|
3706
3736
|
requirements: []
|
3707
3737
|
rubyforge_project:
|
3708
|
-
rubygems_version: 2.
|
3738
|
+
rubygems_version: 2.4.8
|
3709
3739
|
signing_key:
|
3710
3740
|
specification_version: 4
|
3711
3741
|
summary: A gem for EmojiOne
|