e4u 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|