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 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