rack-ketai 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.gitignore +1 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README.rdoc +122 -0
  4. data/VERSION +1 -0
  5. data/lib/rack/ketai/carrier/abstract.rb +263 -0
  6. data/lib/rack/ketai/carrier/au.rb +153 -0
  7. data/lib/rack/ketai/carrier/cidrs/au.rb +32 -0
  8. data/lib/rack/ketai/carrier/cidrs/docomo.rb +14 -0
  9. data/lib/rack/ketai/carrier/cidrs/softbank.rb +10 -0
  10. data/lib/rack/ketai/carrier/docomo.rb +157 -0
  11. data/lib/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb +1391 -0
  12. data/lib/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb +759 -0
  13. data/lib/rack/ketai/carrier/emoji/emojidata.rb +836 -0
  14. data/lib/rack/ketai/carrier/emoji/emojiidtotypecast.rb +432 -0
  15. data/lib/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb +1119 -0
  16. data/lib/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb +499 -0
  17. data/lib/rack/ketai/carrier/general.rb +75 -0
  18. data/lib/rack/ketai/carrier/iphone.rb +16 -0
  19. data/lib/rack/ketai/carrier/softbank.rb +144 -0
  20. data/lib/rack/ketai/carrier/specs/au.rb +1 -0
  21. data/lib/rack/ketai/carrier/specs/docomo.rb +1 -0
  22. data/lib/rack/ketai/carrier/specs/softbank.rb +1 -0
  23. data/lib/rack/ketai/carrier.rb +18 -0
  24. data/lib/rack/ketai/display.rb +16 -0
  25. data/lib/rack/ketai/middleware.rb +36 -0
  26. data/lib/rack/ketai.rb +12 -0
  27. data/spec/spec_helper.rb +11 -0
  28. data/spec/unit/au_filter_spec.rb +96 -0
  29. data/spec/unit/au_spec.rb +240 -0
  30. data/spec/unit/carrier_spec.rb +30 -0
  31. data/spec/unit/display_spec.rb +25 -0
  32. data/spec/unit/docomo_filter_spec.rb +106 -0
  33. data/spec/unit/docomo_spec.rb +344 -0
  34. data/spec/unit/emoticon_filter_spec.rb +91 -0
  35. data/spec/unit/filter_spec.rb +38 -0
  36. data/spec/unit/iphone_spec.rb +16 -0
  37. data/spec/unit/middleware_spec.rb +38 -0
  38. data/spec/unit/softbank_filter_spec.rb +133 -0
  39. data/spec/unit/softbank_spec.rb +200 -0
  40. data/spec/unit/valid_addr_spec.rb +86 -0
  41. data/test/spec_runner.rb +29 -0
  42. data/tools/generate_emoji_dic.rb +434 -0
  43. data/tools/update_speclist.rb +87 -0
  44. metadata +138 -0
@@ -0,0 +1,434 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ SCRIPT_ROOT = File.dirname(__FILE__)
5
+
6
+ # データソース取得
7
+ emoji4unicode_dir = File.join(SCRIPT_ROOT, 'tmp/emoji4unicode')
8
+ typecast_dir = File.join(SCRIPT_ROOT, 'tmp/typecast')
9
+ jpmobile_dir = File.join(SCRIPT_ROOT, 'tmp/jpmobile')
10
+
11
+ `svn export http://emoji4unicode.googlecode.com/svn/trunk/data/ #{emoji4unicode_dir}` unless File.directory?(emoji4unicode_dir)
12
+ `svn export http://typecastmobile.googlecode.com/svn/trunk/ #{typecast_dir}` unless File.directory?(typecast_dir)
13
+ `git clone git://github.com/darashi/jpmobile.git #{jpmobile_dir}` unless File.directory?(jpmobile_dir)
14
+
15
+ $LOAD_PATH.unshift File.join(jpmobile_dir, 'lib')
16
+
17
+ require 'yaml'
18
+
19
+ emoticons = YAML.load(File.read(File.join(typecast_dir, 'conf/emoticon.yaml')))
20
+
21
+ # {"docomo" => {"XXXX" => "name"}}
22
+
23
+ require 'rexml/document'
24
+ emoji4unicode = File.read(File.join(emoji4unicode_dir, 'emoji4unicode.xml'))
25
+ #docomo = File.read(File.join(emoji4unicode_dir, 'docomo/carrier_data.xml'))
26
+ #kddi = File.read(File.join(emoji4unicode, 'kddi/carrier_data.xml'))
27
+ #softbank = File.read(File.join(emoji4unicode, 'softbank/carrier_data.xml'))
28
+
29
+ doc = REXML::Document.new(emoji4unicode)
30
+
31
+ conv_table = {
32
+ :docomo => { },
33
+ :kddi => { },
34
+ :softbank => { }
35
+ }
36
+
37
+ # UTF-8コードから各キャリアの文字コード
38
+ carrier = {
39
+ :docomo => { },
40
+ :kddi => { },
41
+ :softbank => { }
42
+ }
43
+
44
+ emoji = {}
45
+
46
+ doc.each_element('//e') do |elem|
47
+ id = elem.attributes['id']
48
+ unicode = elem.attributes['unicode']
49
+ docomo_code = elem.attributes['docomo']
50
+ kddi_code = elem.attributes['kddi']
51
+ softbank_code = elem.attributes['softbank']
52
+ google_code = elem.attributes['google']
53
+ name = elem.attributes['name']
54
+ fallback = elem.attributes['text_fallback']
55
+
56
+ emoji[id] = {
57
+ :google_code => google_code,
58
+ :name => name,
59
+ :fallback => fallback,
60
+ :unicode => unicode
61
+ }
62
+
63
+ if docomo_code
64
+ codes = docomo_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
65
+ conv_table[:docomo][id] = codes
66
+ end
67
+
68
+ if kddi_code
69
+ codes = kddi_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
70
+ conv_table[:kddi][id] = codes
71
+ end
72
+
73
+ if softbank_code
74
+ codes = softbank_code.split(/\+/).collect{ |code| code =~ /([0-9A-F]+)/ ? $1 : nil }.compact
75
+ conv_table[:softbank][id] = codes
76
+ end
77
+
78
+ end
79
+
80
+ conv_table[:docomo].each do |k, v|
81
+ next unless emoji[v]
82
+ name = emoji[v][:fallback] || emoji[v][:name]
83
+ google_code = emoji[v][:google_code]
84
+ end
85
+
86
+ # データを元に辞書作成
87
+ module Jpmobile
88
+ module Emoticon
89
+ end
90
+ end
91
+ require 'jpmobile/emoticon/docomo'
92
+ require 'jpmobile/emoticon/au'
93
+ require 'jpmobile/emoticon/softbank'
94
+ # EMOJI COMPATIBILITY SYMBOL
95
+ DOCOMO_SJIS_TO_UNICODE = Jpmobile::Emoticon::DOCOMO_SJIS_TO_UNICODE.dup
96
+ DOCOMO_SJIS_TO_UNICODE.merge!({
97
+ 0xE6A6 => 0xF94A, # ぴ
98
+ 0xE6A7 => 0xF94B, # あ
99
+ 0xE6A8 => 0xF94C, # チケぴ
100
+ 0xE6A9 => 0xF94D, # チケぴ
101
+ 0xE6AA => 0xF94E, # 先行tel
102
+ 0xE6AB => 0xF94F, # pコード
103
+ 0xE6AF => 0xF953, # 映画
104
+ 0xE6B0 => 0xF954, # ぴ
105
+ 0xE6B4 => 0xF958, # まるぴ
106
+ 0xE6B5 => 0xF959, # 四角ぴ
107
+ 0xE6B6 => 0xF95a, # チェック
108
+ 0xE6BB => 0xF95F, # f
109
+ 0xE6BC => 0xF960, # d
110
+ 0xE6BD => 0xF961, # s
111
+ 0xE6BE => 0xF962, # c
112
+ 0xE6BF => 0xF963, # r
113
+ 0xE6C0 => 0xF964, # 白黒四角
114
+ 0xE6C1 => 0xF965, # 黒四角
115
+ 0xE6C2 => 0xF966, # 逆三角
116
+ 0xE6C3 => 0xF967, # 4十字
117
+ 0xE6C4 => 0xF968, # 3十字
118
+ 0xE6C5 => 0xF969, # 2十字
119
+ 0xE6C6 => 0xF96A, # 1十字
120
+ 0xE6C7 => 0xF96B, # i
121
+ 0xE6C8 => 0xF96C, # m
122
+ 0xE6C9 => 0xF96D, # e
123
+ 0xE6CA => 0xF96E, # ve
124
+ 0xE6CB => 0xF96F, # 球
125
+ 0xE6CC => 0xF970, # カード使用不可
126
+ 0xE6CD => 0xF971 # チェックボックス
127
+ }.invert)
128
+ DOCOMO_UNICODE_TO_SJIS = DOCOMO_SJIS_TO_UNICODE.invert
129
+
130
+ AU_SJIS_TO_UNICODE = Jpmobile::Emoticon::AU_SJIS_TO_UNICODE.dup
131
+ AU_SJIS_TO_UNICODE.merge!(0xF48E => 0xEB89, # EZアプリJ
132
+ 0xF48F => 0xEB8A, # EXアプリB
133
+ 0xF490 => 0xEB8B, # EZ着うた
134
+ 0xF491 => 0xEB8C, # EZナビMS
135
+ 0xF492 => 0xEB8D, # WIN
136
+ 0xF493 => 0xEB8E # プレミアム
137
+ )
138
+ AU_UNICODE_TO_SJIS = AU_SJIS_TO_UNICODE.invert
139
+
140
+ SOFTBANK_UNICODE_TO_WEBCODE = Jpmobile::Emoticon::SOFTBANK_UNICODE_TO_WEBCODE.dup
141
+ SOFTBANK_WEBCODE_TO_UNICODE = SOFTBANK_UNICODE_TO_WEBCODE.invert
142
+
143
+ output = { }
144
+
145
+ # ******************************
146
+ # 各キャリア 絵文字コード -> eid
147
+ # 絵文字の組み合わせも対応
148
+ # ******************************
149
+ # Docomo/au SJIS
150
+ # Softbank UTF-8
151
+ output['docomo_sjisstr_to_emojiid'] = (<<-FILE)
152
+ # -*- coding: utf-8 -*-
153
+
154
+ # DoCoMo-SJISバイナリとemoji4unicodeのIDとのマッピング
155
+
156
+ # format("0x%03X", Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID[[0xF995].pack('n*').force_encoding('SHIFT_JIS')])
157
+ # => "0x19B" (わーい(嬉しい顔) : SJIS-F995)
158
+ # format("0x%03X", Rack::Ketai::Carrier::Docomo::Filter::EMOJI_TO_EMOJIID[[0xF8CA, 0xF994].pack('n*').force_encoding('SHIFT_JIS')])
159
+ # => "0x4B8" (ラブホテル = ホテル+ハートたち(複数ハート) : SJIS-F8CA+SJIS-F994)
160
+
161
+ module Rack
162
+ module Ketai
163
+ module Carrier
164
+ class Docomo
165
+ class Filter
166
+ EMOJI_TO_EMOJIID = {
167
+ FILE
168
+
169
+ unknown = false
170
+ emoji_table = { }
171
+ emojiid_table = { }
172
+ emoji.each do |id, data|
173
+ next unless (codes = conv_table[:docomo][id]) && !codes.empty?
174
+ docomo_unicodes = codes.collect{ |code| eval("0x#{code}") }
175
+
176
+ docomo_sjiscodes = docomo_unicodes.collect do |docomo_unicode|
177
+ docomo_sjiscode = DOCOMO_UNICODE_TO_SJIS[docomo_unicode]
178
+ unless docomo_sjiscode
179
+ puts format("%04X", docomo_unicode)
180
+ unknown = true
181
+ end
182
+ docomo_sjiscode
183
+ end
184
+
185
+ if unknown
186
+ puts docomo_unicodes.collect{ |docomo_unicode| format("0x%04X", docomo_unicode) }.join('+')
187
+ else
188
+ emojiid = id.to_i(16)
189
+ emoji_table[docomo_sjiscodes] ||= emojiid
190
+ emojiid_table[emojiid] = docomo_sjiscodes
191
+ end
192
+ end
193
+ emoji_table.each do |codes, emojiid|
194
+ output['docomo_sjisstr_to_emojiid'] += format(%Q{ ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr) => 0x%03X,\n}, emojiid)
195
+ end
196
+ output['docomo_sjisstr_to_emojiid'] += <<-EOF
197
+ }
198
+
199
+ # 単にEMOJI_TO_EMOJIID#index を使うと、
200
+ # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
201
+ # 見つからなくなる
202
+ # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
203
+ EMOJIID_TO_EMOJI = {
204
+ EOF
205
+ emojiid_table.each do |emojiid, codes|
206
+ output['docomo_sjisstr_to_emojiid'] += format(%Q{ 0x%03X => ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr),\n}, emojiid)
207
+ end
208
+ output['docomo_sjisstr_to_emojiid'] += <<-EOF
209
+ }
210
+
211
+ # 1.8系、1.9系 互換性維持のため
212
+ if RUBY_VERSION >= '1.9.0'
213
+ def EMOJI_TO_EMOJIID.index(val)
214
+ key(val)
215
+ end
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
222
+
223
+ EOF
224
+
225
+ if unknown
226
+ puts "不明なコードがあります"
227
+ exit 1
228
+ end
229
+
230
+ # au
231
+ output['au_sjisstr_to_emojiid'] = (<<-FILE)
232
+ # -*- coding: utf-8 -*-
233
+
234
+ # Au-SJISバイナリとemoji4unicodeのIDとのマッピング
235
+
236
+ # format("0x%03X", Rack::Ketai::Carrier::Au::Filter::EMOJI_TO_EMOJIID[[0xF6D5].pack('n*').force_encoding('SHIFT_JIS')])
237
+ # => "0x19B" (顔1: SJIS-F6D5)
238
+
239
+ module Rack
240
+ module Ketai
241
+ module Carrier
242
+ class Au
243
+ class Filter
244
+ EMOJI_TO_EMOJIID = {
245
+ FILE
246
+
247
+ unknown = false
248
+ emoji_table = { }
249
+ emojiid_table = { }
250
+ emoji.each do |id, data|
251
+ next unless (codes = conv_table[:kddi][id]) && !codes.empty?
252
+ au_unicodes = codes.collect{ |code| eval("0x#{code}") }
253
+
254
+ au_sjiscodes = au_unicodes.collect do |au_unicode|
255
+ au_sjiscode = AU_UNICODE_TO_SJIS[au_unicode]
256
+ unless au_sjiscode
257
+ puts format("%04X", au_unicode)
258
+ unknown = true
259
+ end
260
+ au_sjiscode
261
+ end
262
+
263
+ if unknown
264
+ puts au_unicodes.collect{ |au_unicode| format("0x%04X", au_unicode) }.join('+')
265
+ else
266
+ emojiid = id.to_i(16)
267
+ emoji_table[au_sjiscodes] ||= emojiid
268
+ emojiid_table[emojiid] = au_sjiscodes
269
+ end
270
+ end
271
+ emoji_table.each do |codes, emojiid|
272
+ output['au_sjisstr_to_emojiid'] += format(%Q{ ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr) => 0x%03X,\n}, emojiid)
273
+ end
274
+ output['au_sjisstr_to_emojiid'] += <<-EOF
275
+ }
276
+
277
+ # 単にEMOJI_TO_EMOJIID#index を使うと、
278
+ # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
279
+ # 見つからなくなる
280
+ # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
281
+ EMOJIID_TO_EMOJI = {
282
+ EOF
283
+ emojiid_table.each do |emojiid, codes|
284
+ output['au_sjisstr_to_emojiid'] += format(%Q{ 0x%03X => ((sjisstr = #{ codes.inspect }.pack('n*')) && RUBY_VERSION >= '1.9.1' ? sjisstr.force_encoding('Shift_JIS') : sjisstr),\n}, emojiid)
285
+ end
286
+ output['au_sjisstr_to_emojiid'] += <<-EOF
287
+ }
288
+
289
+ # 1.8系、1.9系 互換性維持のため
290
+ if RUBY_VERSION >= '1.9.0'
291
+ def EMOJI_TO_EMOJIID.index(val)
292
+ key(val)
293
+ end
294
+ end
295
+
296
+ end
297
+ end
298
+ end
299
+ end
300
+ end
301
+
302
+ EOF
303
+
304
+ if unknown
305
+ puts "不明なコードがあります"
306
+ exit 1
307
+ end
308
+
309
+
310
+ # softbank
311
+ output['softbank_utf8str_to_emojiid'] = (<<-FILE)
312
+ # -*- coding: utf-8 -*-
313
+
314
+ # Softbank-UTF8バイナリとemoji4unicodeのIDとのマッピング
315
+
316
+ # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE001].pack('U*')])
317
+ # => "0x19B" (男の子: Unicode E001)
318
+ # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE04A, 0xE049].pack('U*')])
319
+ # => "0x00F" (晴れときどきくもり = 晴れ+くもり : U+E04A+U+E049)
320
+
321
+ module Rack
322
+ module Ketai
323
+ module Carrier
324
+ class Softbank
325
+ class Filter
326
+ EMOJI_TO_EMOJIID = {
327
+ FILE
328
+
329
+ unknown = false
330
+ emoji_table = { }
331
+ emojiid_table = { }
332
+ emoji.each do |id, data|
333
+ next unless (codes = conv_table[:softbank][id]) && !codes.empty?
334
+ softbank_unicodes = codes.collect{ |code| eval("0x#{code}") }
335
+
336
+ emojiid = id.to_i(16)
337
+ emoji_table[softbank_unicodes] ||= emojiid
338
+ emojiid_table[emojiid] = softbank_unicodes
339
+ end
340
+ emoji_table.each do |codes, emojiid|
341
+ output['softbank_utf8str_to_emojiid'] += format(%Q{ "%s" => 0x%03X,\n}, codes.pack('U*'), emojiid)
342
+ end
343
+ output['softbank_utf8str_to_emojiid'] += <<-EOF
344
+ }
345
+
346
+ # 単にEMOJI_TO_EMOJIID#index を使うと、
347
+ # 1つの絵文字が複数のIDに割り当てられている(DoCoMo SJIS-F97A など)場合
348
+ # 見つからなくなる
349
+ # 逆にEMOJIID_TO_EMOJIだけだと複数絵文字の組み合わせによるものがめんどくさい(たぶん)
350
+ EMOJIID_TO_EMOJI = {
351
+ EOF
352
+ emojiid_table.each do |emojiid, codes|
353
+ output['softbank_utf8str_to_emojiid'] += format(%Q{ 0x%03X => "%s",\n}, emojiid, codes.pack('U*'))
354
+ end
355
+ output['softbank_utf8str_to_emojiid'] += <<-EOF
356
+ }
357
+
358
+ # 1.8系、1.9系 互換性維持のため
359
+ if RUBY_VERSION >= '1.9.0'
360
+ def EMOJI_TO_EMOJIID.index(val)
361
+ key(val)
362
+ end
363
+ end
364
+
365
+ end
366
+ end
367
+ end
368
+ end
369
+ end
370
+
371
+ EOF
372
+
373
+ if unknown
374
+ puts "不明なコードがあります"
375
+ exit 1
376
+ end
377
+
378
+ # 絵文字の代替テキストマップ
379
+ output['emojidata'] = (<<-FILE)
380
+ # -*- coding: utf-8 -*-
381
+
382
+ # Softbank-UTF8バイナリとemoji4unicodeのIDとのマッピング
383
+
384
+ # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE001].pack('U*')])
385
+ # => "0x19B" (男の子: Unicode E001)
386
+ # format("0x%03X", Rack::Ketai::Carrier::Softbank::Filter::EMOJI_TO_EMOJIID[[0xE04A, 0xE049].pack('U*')])
387
+ # => "0x00F" (晴れときどきくもり = 晴れ+くもり : U+E04A+U+E049)
388
+
389
+ module Rack
390
+ module Ketai
391
+ module Carrier
392
+ class Abstract
393
+ class Filter
394
+ EMOJI_DATA = {
395
+ FILE
396
+
397
+ emoji.each do |id, data|
398
+ emojiid = id.to_i(16)
399
+ output['emojidata'] += format(" 0x%03X => #{data.inspect},\n", emojiid)
400
+ end
401
+
402
+ output['emojidata'] += <<-EOF
403
+ }
404
+
405
+ # 1.8系、1.9系 互換性維持のため
406
+ if RUBY_VERSION >= '1.9.0'
407
+ def EMOJI_TO_EMOJIID.index(val)
408
+ key(val)
409
+ end
410
+ end
411
+
412
+ end
413
+ end
414
+ end
415
+ end
416
+ end
417
+
418
+ EOF
419
+
420
+
421
+ #puts output['docomo_sjisstr_to_emojiid']
422
+ #puts output['au_sjisstr_to_emojiid']
423
+ #puts output['softbank_utf8str_to_emojiid']
424
+
425
+ require 'fileutils'
426
+ output.each do |fname, data|
427
+ fname = fname.gsub(/\_/, '')
428
+ dic_dir = File.join(SCRIPT_ROOT, '../lib/rack/ketai/carrier/emoji')
429
+ FileUtils.mkdir(dic_dir) unless FileTest.directory?(dic_dir)
430
+ File.open(File.join(dic_dir, "#{fname}.rb"), 'w') do |f|
431
+ f.write data
432
+ end
433
+ end
434
+
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # ke-tai.org の携帯端末スペック一覧をダウンロードして加工
5
+
6
+ require 'open-uri'
7
+ require 'nkf'
8
+ require 'csv'
9
+ require 'tempfile'
10
+
11
+ csvdata = NKF.nkf('-Sw', open('http://ke-tai.org/moblist/csv_down.php').read)
12
+ lines = csvdata.gsub(/\r?\n/, "\n").split(/\n/).collect{ |str| str.gsub(/([^,])"([^,])/u, '\1&quot;\2') }
13
+ lines.slice!(0, 2)
14
+
15
+ table = {}
16
+
17
+ # CSV
18
+ # [ 0] 連番
19
+ # [ 1] メーカ名
20
+ # [ 2] 機種名
21
+ # [ 3] 機種略名
22
+ # [ 4] ユーザエージェント
23
+ # [ 5] タイプ1
24
+ # [ 6] タイプ2
25
+ # [ 7] ブラウザ幅(x)
26
+ # [ 8] ブラウザ高さ(y)
27
+ # [ 9] 表示カラー数
28
+ # [10] ブラウザキャッシュ
29
+ # [11] GIF
30
+ # [12] JPG
31
+ # [13] PNG
32
+ # [14] Flash
33
+ # [15] Flashバージョン
34
+ # [16] Flashワークメモリ
35
+ # [17] Javaアプリ
36
+ # [18] BREW
37
+ # [19] HTML
38
+ # [20] SSL
39
+ # [21] ログイン
40
+ # [22] クッキー
41
+ # [23] CSS
42
+ # [24] GPS
43
+ # [25] 発売日
44
+
45
+ enable_row_indexes = [1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
46
+ # [ 0] メーカ名
47
+ # [ 1] 機種名
48
+ # [ 2] ユーザエージェント
49
+ # [ 3] タイプ1
50
+ # [ 4] タイプ2
51
+ # [ 5] ブラウザ幅(x)
52
+ # [ 6] ブラウザ高さ(y)
53
+ # [ 7] 表示カラー数
54
+ # [ 8] ブラウザキャッシュ
55
+ # [ 9] GIF
56
+ # [10] JPG
57
+ # [11] PNG
58
+ # [12] Flash
59
+ # [13] Flashバージョン
60
+ # [14] Flashワークメモリ
61
+ # [15] Javaアプリ
62
+ # [16] BREW
63
+ # [17] HTML
64
+ # [18] SSL
65
+ # [19] ログイン
66
+ # [20] クッキー
67
+ # [21] CSS
68
+ # [22] GPS
69
+ # [23] 発売日
70
+
71
+ CSV::Reader.parse(lines.join("\n")).each do |row|
72
+ row.slice!(26)
73
+
74
+
75
+ table[row[1]] ||= { }
76
+ table[row[1]][row[3]] ||= row.values_at(*enable_row_indexes)
77
+ end
78
+
79
+ [
80
+ %w(DoCoMo Docomo docomo.rb),
81
+ %w(au Au au.rb),
82
+ %w(SoftBank Softbank softbank.rb)
83
+ ].each do |carrier, classname, filename|
84
+ File.open(File.join(File.dirname(__FILE__), '../lib/rack/ketai/carrier/specs', filename), 'w') do |f|
85
+ f.write "Rack::Ketai::Carrier::#{classname}::SPECS = #{ table[carrier].inspect }"
86
+ end
87
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-ketai
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Yuichi Takeuchi
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-22 00:00:00 +09:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 0
34
+ version: 1.0.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ description:
38
+ email: info@takeyu-web.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - README.rdoc
45
+ files:
46
+ - .gitignore
47
+ - MIT-LICENSE
48
+ - README.rdoc
49
+ - VERSION
50
+ - lib/rack/ketai.rb
51
+ - lib/rack/ketai/carrier.rb
52
+ - lib/rack/ketai/carrier/abstract.rb
53
+ - lib/rack/ketai/carrier/au.rb
54
+ - lib/rack/ketai/carrier/cidrs/au.rb
55
+ - lib/rack/ketai/carrier/cidrs/docomo.rb
56
+ - lib/rack/ketai/carrier/cidrs/softbank.rb
57
+ - lib/rack/ketai/carrier/docomo.rb
58
+ - lib/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb
59
+ - lib/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb
60
+ - lib/rack/ketai/carrier/emoji/emojidata.rb
61
+ - lib/rack/ketai/carrier/emoji/emojiidtotypecast.rb
62
+ - lib/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb
63
+ - lib/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb
64
+ - lib/rack/ketai/carrier/general.rb
65
+ - lib/rack/ketai/carrier/iphone.rb
66
+ - lib/rack/ketai/carrier/softbank.rb
67
+ - lib/rack/ketai/carrier/specs/au.rb
68
+ - lib/rack/ketai/carrier/specs/docomo.rb
69
+ - lib/rack/ketai/carrier/specs/softbank.rb
70
+ - lib/rack/ketai/display.rb
71
+ - lib/rack/ketai/middleware.rb
72
+ - spec/spec_helper.rb
73
+ - spec/unit/au_filter_spec.rb
74
+ - spec/unit/au_spec.rb
75
+ - spec/unit/carrier_spec.rb
76
+ - spec/unit/display_spec.rb
77
+ - spec/unit/docomo_filter_spec.rb
78
+ - spec/unit/docomo_spec.rb
79
+ - spec/unit/emoticon_filter_spec.rb
80
+ - spec/unit/filter_spec.rb
81
+ - spec/unit/iphone_spec.rb
82
+ - spec/unit/middleware_spec.rb
83
+ - spec/unit/softbank_filter_spec.rb
84
+ - spec/unit/softbank_spec.rb
85
+ - spec/unit/valid_addr_spec.rb
86
+ - test/spec_runner.rb
87
+ - tools/generate_emoji_dic.rb
88
+ - tools/update_speclist.rb
89
+ has_rdoc: true
90
+ homepage: http://github.com/take-yu/rack-ketai
91
+ licenses: []
92
+
93
+ post_install_message:
94
+ rdoc_options:
95
+ - --charset=UTF-8
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ hash: 3
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ requirements: []
117
+
118
+ rubyforge_project:
119
+ rubygems_version: 1.3.7
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: A Rack Middleware for Japanese mobile-phones
123
+ test_files:
124
+ - spec/unit/au_spec.rb
125
+ - spec/unit/middleware_spec.rb
126
+ - spec/unit/filter_spec.rb
127
+ - spec/unit/au_filter_spec.rb
128
+ - spec/unit/softbank_filter_spec.rb
129
+ - spec/unit/valid_addr_spec.rb
130
+ - spec/unit/docomo_spec.rb
131
+ - spec/unit/display_spec.rb
132
+ - spec/unit/docomo_filter_spec.rb
133
+ - spec/unit/iphone_spec.rb
134
+ - spec/unit/softbank_spec.rb
135
+ - spec/unit/carrier_spec.rb
136
+ - spec/unit/emoticon_filter_spec.rb
137
+ - spec/spec_helper.rb
138
+ - test/spec_runner.rb