rack-ketai 0.1.0

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