e4u 0.0.3 → 0.0.4
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.
- data/VERSION +1 -1
- data/lib/e4u/base.rb +9 -0
- data/lib/e4u/google.rb +28 -7
- data/spec/docomo_spec.rb +8 -0
- data/spec/google_spec.rb +163 -20
- data/spec/kddi_spec.rb +8 -0
- data/spec/softbank_spec.rb +8 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +2 -1
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/e4u/base.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rexml/document'
|
2
|
+
require 'nkf'
|
2
3
|
|
3
4
|
module E4U
|
4
5
|
class Base
|
@@ -52,6 +53,7 @@ module E4U
|
|
52
53
|
|
53
54
|
class Base::Emoji
|
54
55
|
def initialize attributes
|
56
|
+
@fallback_text = nil
|
55
57
|
attributes.each do |key, value|
|
56
58
|
next if key =~ /\A(id|object_id|__(id|send)__)\z/
|
57
59
|
instance_variable_set("@#{key}", value)
|
@@ -59,17 +61,24 @@ module E4U
|
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
64
|
+
attr_reader :fallback_text
|
65
|
+
def fallback?
|
66
|
+
!!fallback_text
|
67
|
+
end
|
68
|
+
|
62
69
|
def alternate?
|
63
70
|
!!(unicode =~ /\A>/)
|
64
71
|
end
|
65
72
|
|
66
73
|
def utf8
|
74
|
+
return fallback_text if fallback?
|
67
75
|
hex = unicode.sub(/\A[\>\*\+]/, '')
|
68
76
|
raise if hex.size == 0
|
69
77
|
hex.split(/\+/, -1).map{ |ch| ch.hex }.pack('U*')
|
70
78
|
end
|
71
79
|
|
72
80
|
def cp932
|
81
|
+
return NKF.nkf('-Wsm0x', fallback_text) if fallback?
|
73
82
|
hex = unicode.sub(/\A[\>\*\+]/, '')
|
74
83
|
raise if hex.size == 0
|
75
84
|
chr = hex.split(/\+/, -1).map{ |ch| unicode_to_cp932(ch.hex) }.pack('n*')
|
data/lib/e4u/google.rb
CHANGED
@@ -15,19 +15,19 @@ module E4U
|
|
15
15
|
|
16
16
|
module Google::Emojinize
|
17
17
|
def docomo_emoji
|
18
|
-
DoCoMo::Emoji.new :
|
18
|
+
DoCoMo::Emoji.new attribute_with_fallback_text(:docomo)
|
19
19
|
end
|
20
20
|
|
21
21
|
def kddi_emoji
|
22
|
-
KDDI::Emoji.new :
|
22
|
+
KDDI::Emoji.new attribute_with_fallback_text(:kddi)
|
23
23
|
end
|
24
24
|
|
25
25
|
def kddiweb_emoji
|
26
|
-
KDDIWeb::Emoji.new :
|
26
|
+
KDDIWeb::Emoji.new attribute_with_fallback_text(:kddi)
|
27
27
|
end
|
28
28
|
|
29
29
|
def softbank_emoji
|
30
|
-
Softbank::Emoji.new :
|
30
|
+
Softbank::Emoji.new attribute_with_fallback_text(:softbank)
|
31
31
|
end
|
32
32
|
|
33
33
|
def unicode_emoji
|
@@ -37,6 +37,18 @@ module E4U
|
|
37
37
|
def google_emoji
|
38
38
|
Google::Emoji.new self.merge(:unicode => self[:google])
|
39
39
|
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def attribute_with_fallback_text type
|
44
|
+
attributes = { :unicode => self[type] }
|
45
|
+
unless attributes[:unicode]
|
46
|
+
attributes[:fallback_text] = self[:text_fallback]
|
47
|
+
attributes[:fallback_text] ||= self[:text_repr]
|
48
|
+
attributes[:fallback_text] ||= [0x3013].pack('U')
|
49
|
+
end
|
50
|
+
attributes
|
51
|
+
end
|
40
52
|
end
|
41
53
|
|
42
54
|
class Google::Emoji < Base::Emoji
|
@@ -61,11 +73,20 @@ module E4U
|
|
61
73
|
def translate carrier
|
62
74
|
case carrier.to_s.downcase
|
63
75
|
when 'docomo'
|
64
|
-
E4U.docomo.find{ |e| e[:unicode] == docomo }
|
76
|
+
emoji = E4U.docomo.find{ |e| e[:unicode] == docomo }
|
77
|
+
return emoji.docomo_emoji if emoji
|
78
|
+
E4U.google.find{ |e| e[:google] == google }.docomo_emoji
|
79
|
+
|
65
80
|
when 'kddi'
|
66
|
-
E4U.kddi.find{ |e| e[:unicode] == kddi }
|
81
|
+
emoji = E4U.kddi.find{ |e| e[:unicode] == kddi }
|
82
|
+
return emoji.kddi_emoji if emoji
|
83
|
+
E4U.google.find{ |e| e[:google] == google }.kddi_emoji
|
84
|
+
|
67
85
|
when 'softbank'
|
68
|
-
E4U.softbank.find{ |e| e[:unicode] == softbank }
|
86
|
+
emoji = E4U.softbank.find{ |e| e[:unicode] == softbank }
|
87
|
+
return emoji.softbank_emoji if emoji
|
88
|
+
E4U.google.find{ |e| e[:google] == google }.softbank_emoji
|
89
|
+
|
69
90
|
else
|
70
91
|
raise ArgumentError
|
71
92
|
end
|
data/spec/docomo_spec.rb
CHANGED
@@ -34,6 +34,14 @@ describe E4U::DoCoMo do
|
|
34
34
|
emj.docomo_emoji.should be_instance_of E4U::DoCoMo::Emoji
|
35
35
|
end
|
36
36
|
|
37
|
+
it "E4U.docomoから取得した絵文字にfallback_textがないこと" do
|
38
|
+
@docomo.each do |data|
|
39
|
+
emoji = data.docomo_emoji
|
40
|
+
emoji.fallback_text.should be_nil
|
41
|
+
emoji.should_not be_fallback
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
37
45
|
describe E4U::DoCoMo::Emoji do
|
38
46
|
before :all do
|
39
47
|
@emj = @docomo.find{ |e| e[:unicode] == 'E63E' }.docomo_emoji
|
data/spec/google_spec.rb
CHANGED
@@ -48,6 +48,47 @@ describe E4U::Google do
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
context "DoCoMoの該当絵文字が無い場合" do
|
52
|
+
it "fallback?が真になること" do
|
53
|
+
@google.each do |e|
|
54
|
+
next if e[:docomo]
|
55
|
+
de = e.docomo_emoji
|
56
|
+
de.should be_fallback
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "fallback_textで長さ1以上の文字列が返ってくること" do
|
61
|
+
@google.each do |e|
|
62
|
+
next if e[:docomo]
|
63
|
+
de = e.docomo_emoji
|
64
|
+
de.fallback_text.should be_instance_of String
|
65
|
+
de.fallback_text.size.should >= 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
it "utf8でfallback_textが返ってくること" do
|
70
|
+
@google.each do |e|
|
71
|
+
next if e[:docomo]
|
72
|
+
except = e[:text_fallback]
|
73
|
+
except ||= e[:text_repr]
|
74
|
+
except ||= [0x3013].pack('U')
|
75
|
+
|
76
|
+
e.docomo_emoji.utf8.should == except
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "sjisでfallback_textが返ってくること" do
|
81
|
+
@google.each do |e|
|
82
|
+
next if e[:docomo]
|
83
|
+
except = e[:text_fallback]
|
84
|
+
except ||= e[:text_repr]
|
85
|
+
except ||= [0x3013].pack('U')
|
86
|
+
|
87
|
+
e.docomo_emoji.sjis.should == NKF.nkf('-Wsm0x', except)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
51
92
|
it "kddi_emojiでE4U::KDDI::Emojiが返ってくること" do
|
52
93
|
ke = @google.find{ |e| e[:id] == '000' }.kddi_emoji
|
53
94
|
ke.should be_instance_of E4U::KDDI::Emoji
|
@@ -57,9 +98,9 @@ describe E4U::Google do
|
|
57
98
|
|
58
99
|
it "KDDIの複合絵文字が返ってくること" do
|
59
100
|
{ '331' => [[0xE471, 0xE5B1].pack('U*'), [0xF649, 0xF7CE].pack('n*')], }.each do |id, (utf8, sjis)|
|
60
|
-
|
61
|
-
|
62
|
-
|
101
|
+
ke = @google.find{ |e| e[:id] == id }.kddi_emoji
|
102
|
+
ke.utf8.should == utf8
|
103
|
+
ke.sjis.should == sjis
|
63
104
|
end
|
64
105
|
end
|
65
106
|
|
@@ -71,6 +112,47 @@ describe E4U::Google do
|
|
71
112
|
end
|
72
113
|
end
|
73
114
|
|
115
|
+
context "KDDIの該当絵文字が無い場合" do
|
116
|
+
it "fallback?が真になること" do
|
117
|
+
@google.each do |e|
|
118
|
+
next if e[:kddi]
|
119
|
+
ke = e.kddi_emoji
|
120
|
+
ke.should be_fallback
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
it "fallback_textで長さ1以上の文字列が返ってくること" do
|
125
|
+
@google.each do |e|
|
126
|
+
next if e[:kddi]
|
127
|
+
ke = e.kddi_emoji
|
128
|
+
ke.fallback_text.should be_instance_of String
|
129
|
+
ke.fallback_text.size.should >= 1
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "utf8でfallback_textが返ってくること" do
|
134
|
+
@google.each do |e|
|
135
|
+
next if e[:kddi]
|
136
|
+
except = e[:text_fallback]
|
137
|
+
except ||= e[:text_repr]
|
138
|
+
except ||= [0x3013].pack('U')
|
139
|
+
|
140
|
+
e.kddi_emoji.utf8.should == except
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
it "sjisでSJISのfallback_textが返ってくること" do
|
145
|
+
@google.each do |e|
|
146
|
+
next if e[:kddi]
|
147
|
+
except = e[:text_fallback]
|
148
|
+
except ||= e[:text_repr]
|
149
|
+
except ||= [0x3013].pack('U')
|
150
|
+
|
151
|
+
e.kddi_emoji.sjis.should == NKF.nkf('-Wsm0x', except)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
74
156
|
it "softbank_emojiでE4U::Softbank::Emojiが返ってくること" do
|
75
157
|
se = @google.find{ |e| e[:id] == '000' }.softbank_emoji
|
76
158
|
se.should be_instance_of E4U::Softbank::Emoji
|
@@ -82,9 +164,50 @@ describe E4U::Google do
|
|
82
164
|
{ '00F' => [[0xE04A, 0xE049].pack('U*'), [0xF98B, 0xF98A].pack('n*')],
|
83
165
|
'331' => [[0xE415, 0xE331].pack('U*'), [0xFB55, 0xF9D1].pack('n*')],
|
84
166
|
'824' => [[0xE103, 0xE328].pack('U*'), [0xF743, 0xF9C8].pack('n*')], }.each do |id, (utf8, sjis)|
|
85
|
-
|
86
|
-
|
87
|
-
|
167
|
+
se = @google.find{ |e| e[:id] == id }.softbank_emoji
|
168
|
+
se.utf8.should == utf8
|
169
|
+
se.sjis.should == sjis
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context "Softbankの該当絵文字が無い場合" do
|
174
|
+
it "fallback?が真になること" do
|
175
|
+
@google.each do |e|
|
176
|
+
next if e[:softbank]
|
177
|
+
se = e.softbank_emoji
|
178
|
+
se.should be_fallback
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
it "fallback_textで長さ1以上の文字列が返ってくること" do
|
183
|
+
@google.each do |e|
|
184
|
+
next if e[:softbank]
|
185
|
+
se = e.softbank_emoji
|
186
|
+
se.fallback_text.should be_instance_of String
|
187
|
+
se.fallback_text.size.should >= 1
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
it "utf8でfallback_textが返ってくること" do
|
192
|
+
@google.each do |e|
|
193
|
+
next if e[:softbank]
|
194
|
+
except = e[:text_fallback]
|
195
|
+
except ||= e[:text_repr]
|
196
|
+
except ||= [0x3013].pack('U')
|
197
|
+
|
198
|
+
e.softbank_emoji.utf8.should == except
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
it "sjisでSJISのfallback_textが返ってくること" do
|
203
|
+
@google.each do |e|
|
204
|
+
next if e[:softbank]
|
205
|
+
except = e[:text_fallback]
|
206
|
+
except ||= e[:text_repr]
|
207
|
+
except ||= [0x3013].pack('U')
|
208
|
+
|
209
|
+
e.softbank_emoji.sjis.should == NKF.nkf('-Wsm0x', except)
|
210
|
+
end
|
88
211
|
end
|
89
212
|
end
|
90
213
|
|
@@ -123,23 +246,43 @@ describe E4U::Google do
|
|
123
246
|
@emj.desc.should match(/clear weather/i)
|
124
247
|
end
|
125
248
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
249
|
+
context "translate" do
|
250
|
+
it ":docomoでDoCoMo絵文字に変換できること" do
|
251
|
+
de = @emj.translate :docomo
|
252
|
+
de.utf8.should == [0xE63E].pack('U')
|
253
|
+
end
|
130
254
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
255
|
+
it ":kddiでKDDI絵文字に変換できること" do
|
256
|
+
de = @emj.translate :kddi
|
257
|
+
de.utf8.should == [0xE488].pack('U')
|
258
|
+
end
|
135
259
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
260
|
+
it ":softbankでSoftbank絵文字に変換できること" do
|
261
|
+
de = @emj.translate :softbank
|
262
|
+
de.utf8.should == [0xE04A].pack('U')
|
263
|
+
end
|
264
|
+
|
265
|
+
it "translateでArgumentErrorが起こること" do
|
266
|
+
lambda{ @emj.translate :emobile }.should raise_error ArgumentError
|
267
|
+
end
|
140
268
|
|
141
|
-
|
142
|
-
|
269
|
+
it "該当絵文字がなくても fallback_text に変換できること" do
|
270
|
+
# e4u/lib/e4u/google.rb:76:in `translate': undefined method `docomo_emoji' for nil:NilClass (NoMethodError)
|
271
|
+
lambda{
|
272
|
+
@google.find{ |e| e[:docomo].nil? }.google_emoji.translate(:docomo)
|
273
|
+
}.should_not raise_error NoMethodError
|
274
|
+
|
275
|
+
@google.each do |e|
|
276
|
+
next unless e[:google]
|
277
|
+
next if e[:docomo]
|
278
|
+
|
279
|
+
except = e[:text_fallback]
|
280
|
+
except ||= e[:text_repr]
|
281
|
+
except ||= [0x3013].pack('U')
|
282
|
+
|
283
|
+
e.google_emoji.translate(:docomo).utf8.should == except
|
284
|
+
end
|
285
|
+
end
|
143
286
|
end
|
144
287
|
|
145
288
|
it "proposal?が返ってくること" do
|
data/spec/kddi_spec.rb
CHANGED
@@ -64,6 +64,14 @@ describe E4U::KDDI do
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
+
it "E4U.kddiから取得した絵文字にfallback_textがないこと" do
|
68
|
+
@kddi.each do |data|
|
69
|
+
emoji = data.kddi_emoji
|
70
|
+
emoji.fallback_text.should be_nil
|
71
|
+
emoji.should_not be_fallback
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
67
75
|
describe E4U::KDDIWeb::Emoji do
|
68
76
|
before :all do
|
69
77
|
@emj = @kddi.find{ |e| e[:number] == '44' }.kddiweb_emoji
|
data/spec/softbank_spec.rb
CHANGED
@@ -33,6 +33,14 @@ describe E4U::Softbank do
|
|
33
33
|
emj.softbank_emoji.should be_instance_of E4U::Softbank::Emoji
|
34
34
|
end
|
35
35
|
|
36
|
+
it "E4U.softbankから取得した絵文字にfallback_textがないこと" do
|
37
|
+
@softbank.each do |data|
|
38
|
+
emoji = data.softbank_emoji
|
39
|
+
emoji.fallback_text.should be_nil
|
40
|
+
emoji.should_not be_fallback
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
36
44
|
describe E4U::Softbank::Emoji do
|
37
45
|
before :all do
|
38
46
|
@emj = @softbank.find{ |e| e[:number] == '81' }.softbank_emoji
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: e4u
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fistfvck
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-08 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|