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 CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -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*')
@@ -15,19 +15,19 @@ module E4U
15
15
 
16
16
  module Google::Emojinize
17
17
  def docomo_emoji
18
- DoCoMo::Emoji.new :unicode => self[:docomo]
18
+ DoCoMo::Emoji.new attribute_with_fallback_text(:docomo)
19
19
  end
20
20
 
21
21
  def kddi_emoji
22
- KDDI::Emoji.new :unicode => self[:kddi]
22
+ KDDI::Emoji.new attribute_with_fallback_text(:kddi)
23
23
  end
24
24
 
25
25
  def kddiweb_emoji
26
- KDDIWeb::Emoji.new :unicode => self[:kddi]
26
+ KDDIWeb::Emoji.new attribute_with_fallback_text(:kddi)
27
27
  end
28
28
 
29
29
  def softbank_emoji
30
- Softbank::Emoji.new :unicode => self[:softbank]
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 }.docomo_emoji
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 }.kddi_emoji
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 }.softbank_emoji
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
@@ -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
@@ -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
- de = @google.find{ |e| e[:id] == id }.kddi_emoji
61
- de.utf8.should == utf8
62
- de.sjis.should == sjis
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
- de = @google.find{ |e| e[:id] == id }.softbank_emoji
86
- de.utf8.should == utf8
87
- de.sjis.should == sjis
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
- it "translate(:docomo)でDoCoMo絵文字に変換できること" do
127
- de = @emj.translate :docomo
128
- de.utf8.should == [0xE63E].pack('U')
129
- end
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
- it "translate(:kddi)でKDDI絵文字に変換できること" do
132
- de = @emj.translate :kddi
133
- de.utf8.should == [0xE488].pack('U')
134
- end
255
+ it ":kddiでKDDI絵文字に変換できること" do
256
+ de = @emj.translate :kddi
257
+ de.utf8.should == [0xE488].pack('U')
258
+ end
135
259
 
136
- it "translate(:softbank)でSoftbank絵文字に変換できること" do
137
- de = @emj.translate :softbank
138
- de.utf8.should == [0xE04A].pack('U')
139
- end
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
- it "translateでArgumentErrorが起こること" do
142
- lambda{ @emj.translate :emobile }.should raise_error ArgumentError
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
@@ -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
@@ -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
@@ -1 +1,2 @@
1
1
  --color
2
+ --loadby mtime
@@ -1,9 +1,10 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'nkf'
3
4
  require 'e4u'
4
5
  require 'spec'
5
6
  require 'spec/autorun'
6
7
 
7
8
  Spec::Runner.configure do |config|
8
-
9
+
9
10
  end
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.3
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-07 00:00:00 +09:00
12
+ date: 2010-01-08 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency