jpmobile 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/CHANGELOG +4 -0
  2. data/README.rdoc +29 -15
  3. data/Rakefile +3 -3
  4. data/lib/jpmobile/emoticon/conversion_table.rb +10 -9
  5. data/lib/jpmobile/emoticon.rb +14 -6
  6. data/lib/jpmobile/filter.rb +2 -9
  7. data/lib/jpmobile/helpers.rb +2 -0
  8. data/lib/jpmobile/hook_action_view.rb +5 -5
  9. data/lib/jpmobile/mobile/softbank.rb +2 -2
  10. data/lib/jpmobile/mobile/z_display_info_docomo.rb +577 -528
  11. data/lib/jpmobile/mobile/z_ip_addresses_au.rb +5 -1
  12. data/lib/jpmobile/mobile/z_ip_addresses_softbank.rb +2 -2
  13. data/lib/jpmobile/mobile/z_ip_addresses_willcom.rb +53 -13
  14. data/lib/jpmobile/trans_sid.rb +28 -14
  15. data/lib/jpmobile/version.rb +1 -1
  16. data/test/legacy/emoticon_test.rb +6 -0
  17. data/test/legacy/helpers_test.rb +6 -5
  18. data/test/rails/2.3.2/spec/controllers/trans_sid_spec.rb +99 -0
  19. data/test/rails/overrides/app/controllers/{application.rb → application_controller.rb} +0 -0
  20. data/test/rails/overrides/app/controllers/filter_controller.rb +1 -0
  21. data/test/rails/overrides/spec/controllers/filter_spec.rb +1 -0
  22. data/test/rails/overrides/spec/controllers/trans_sid_spec.rb +20 -2
  23. data/test/rails/rails_root/README +6 -19
  24. data/test/rails/rails_root/app/controllers/{application.rb → application_controller.rb} +0 -0
  25. data/test/rails/rails_root/app/controllers/trans_sid_controller.rb +4 -2
  26. data/test/rails/rails_root/app/views/filter/index.html.erb +0 -0
  27. data/test/rails/rails_root/app/views/hankaku_filter/index.html.erb +0 -0
  28. data/test/rails/rails_root/app/views/template_path/_partial.html.erb +1 -0
  29. data/test/rails/rails_root/app/views/template_path/_partial_mobile.html.erb +1 -0
  30. data/test/rails/rails_root/app/views/template_path/_partial_mobile_docomo.html.erb +1 -0
  31. data/test/rails/rails_root/app/views/template_path/partial.html.erb +2 -0
  32. data/test/rails/rails_root/config/boot.rb +2 -1
  33. data/test/rails/rails_root/config/environment.rb +15 -48
  34. data/test/rails/rails_root/config/environments/production.rb +11 -7
  35. data/test/rails/rails_root/config/environments/test.rb +6 -0
  36. data/test/rails/rails_root/config/initializers/backtrace_silencers.rb +7 -0
  37. data/test/rails/rails_root/config/initializers/new_rails_defaults.rb +4 -0
  38. data/test/rails/rails_root/config/initializers/session_store.rb +15 -0
  39. data/test/rails/rails_root/config/routes.rb +1 -1
  40. data/test/rails/rails_root/db/development.sqlite3 +0 -0
  41. data/test/rails/rails_root/db/seeds.rb +7 -0
  42. data/test/rails/rails_root/db/test.sqlite3 +0 -0
  43. data/test/rails/rails_root/doc/README_FOR_APP +2 -5
  44. data/test/rails/rails_root/log/development.log +9 -9
  45. data/test/rails/rails_root/log/test.log +198 -148
  46. data/test/rails/rails_root/public/500.html +0 -3
  47. data/test/rails/rails_root/public/index.html +1 -0
  48. data/test/rails/rails_root/script/about +2 -2
  49. data/test/rails/rails_root/script/console +1 -1
  50. data/test/rails/rails_root/script/dbconsole +1 -1
  51. data/test/rails/rails_root/script/destroy +1 -1
  52. data/test/rails/rails_root/script/generate +1 -1
  53. data/test/rails/rails_root/script/performance/benchmarker +1 -1
  54. data/test/rails/rails_root/script/performance/profiler +1 -1
  55. data/test/rails/rails_root/script/plugin +1 -1
  56. data/test/rails/rails_root/script/runner +1 -1
  57. data/test/rails/rails_root/script/server +1 -1
  58. data/test/rails/rails_root/spec/controllers/template_path_spec.rb +49 -19
  59. data/test/rails/rails_root/spec/controllers/trans_sid_spec.rb +11 -8
  60. data/test/rails/rails_root/test/test_helper.rb +1 -1
  61. data/test/rails/rails_root/vendor/plugins/jpmobile/MIT-LICENSE +2 -2
  62. data/test/rails/rails_root/vendor/plugins/jpmobile/README.rdoc +31 -15
  63. data/test/rails/rails_root/vendor/plugins/jpmobile/Rakefile +1 -1
  64. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/emoticon.rb +3 -1
  65. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/filter.rb +3 -10
  66. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/helpers.rb +2 -0
  67. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_controller.rb +12 -0
  68. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_view.rb +79 -91
  69. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_request.rb +2 -10
  70. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/au.rb +9 -3
  71. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/softbank.rb +2 -2
  72. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/z_display_info_docomo.rb +577 -528
  73. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/z_ip_addresses_au.rb +5 -1
  74. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/z_ip_addresses_softbank.rb +2 -2
  75. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/z_ip_addresses_willcom.rb +53 -13
  76. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/auth.rb +55 -0
  77. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/combined_logger.rb +54 -0
  78. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/request.rb +7 -0
  79. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/trans_sid.rb +14 -0
  80. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/trans_sid.rb +76 -65
  81. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/version.rb +1 -1
  82. data/test/rails/rails_root/vendor/plugins/jpmobile/tasks/jpmobile_tasks.rake +26 -6
  83. data/test/rails/rails_root/vendor/plugins/jpmobile/tools/{update_display_info_docomo.rb → disabled_update_display_info_docomo.rb} +11 -6
  84. data/test/rails/rails_root/vendor/plugins/jpmobile/tools/generate_docomo_emoticon_table.rb +0 -1
  85. data/test/rails/rails_root/vendor/plugins/jpmobile/tools/generate_softbank_emoticon_table.rb +0 -1
  86. data/test/rails/rails_root/vendor/plugins/jpmobile/tools/update_ip_addresses_au.rb +4 -3
  87. data/test/rails/rails_root/vendor/plugins/jpmobile/tools/update_ip_addresses_willcom.rb +2 -2
  88. data/tools/{update_display_info_docomo.rb → disabled_update_display_info_docomo.rb} +11 -6
  89. data/tools/generate_docomo_emoticon_table.rb +0 -1
  90. data/tools/generate_softbank_emoticon_table.rb +0 -1
  91. data/tools/update_ip_addresses_au.rb +4 -3
  92. data/tools/update_ip_addresses_willcom.rb +2 -2
  93. metadata +65 -35
  94. data/test/rails/rails_root/public/dispatch.cgi +0 -10
  95. data/test/rails/rails_root/public/dispatch.fcgi +0 -24
  96. data/test/rails/rails_root/public/dispatch.rb +0 -10
  97. data/test/rails/rails_root/script/performance/request +0 -3
  98. data/test/rails/rails_root/script/process/inspector +0 -3
  99. data/test/rails/rails_root/script/process/reaper +0 -3
  100. data/test/rails/rails_root/script/process/spawner +0 -3
@@ -19,4 +19,8 @@ Jpmobile::Mobile::Au::IP_ADDRESSES =
19
19
  "118.152.214.192/26",
20
20
  "118.159.131.0/25",
21
21
  "118.159.133.0/25",
22
- "118.159.132.160/27"].map {|ip| IPAddr.new(ip) }
22
+ "118.159.132.160/27",
23
+ "111.86.142.0/26",
24
+ "111.86.141.64/26",
25
+ "111.86.141.128/26",
26
+ "111.86.141.192/26"].map {|ip| IPAddr.new(ip) }
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # = IPアドレス帯域テーブル(手動更新分)
2
3
  # == SoftBank
3
4
  # http://developers.softbankmobile.co.jp/dp/tech_svc/web/ip.php
@@ -10,8 +11,7 @@ Jpmobile::Mobile::Softbank::IP_ADDRESSES = %w(
10
11
  210.146.7.192/26
11
12
  210.146.60.192/26
12
13
  210.151.9.128/26
13
- 210.169.130.112/28
14
14
  210.175.1.128/25
15
- 210.228.189.0/24
16
15
  211.8.159.128/25
16
+ 210.175.1.128/25
17
17
  ).map {|ip| IPAddr.new(ip) }
@@ -56,12 +56,28 @@ Jpmobile::Mobile::Willcom::IP_ADDRESSES =
56
56
  "61.204.93.0/24",
57
57
  "61.204.94.0/24",
58
58
  "61.204.95.0/24",
59
+ "114.20.49.0/24",
60
+ "114.20.50.0/24",
61
+ "114.20.51.0/24",
62
+ "114.20.52.0/24",
63
+ "114.20.53.0/24",
64
+ "114.20.54.0/24",
65
+ "114.20.55.0/24",
66
+ "114.20.56.0/24",
67
+ "114.20.57.0/24",
68
+ "114.20.58.0/24",
69
+ "114.20.59.0/24",
70
+ "114.20.60.0/24",
71
+ "114.20.61.0/24",
72
+ "114.20.62.0/24",
73
+ "114.20.63.0/24",
74
+ "114.20.64.0/24",
75
+ "114.20.65.0/24",
76
+ "114.20.66.0/24",
77
+ "114.20.67.0/24",
78
+ "114.21.255.0/27",
59
79
  "125.28.0.0/24",
60
80
  "125.28.1.0/24",
61
- "125.28.11.0/24",
62
- "125.28.12.0/24",
63
- "125.28.13.0/24",
64
- "125.28.14.0/24",
65
81
  "125.28.15.0/24",
66
82
  "125.28.16.0/24",
67
83
  "125.28.17.0/24",
@@ -69,8 +85,6 @@ Jpmobile::Mobile::Willcom::IP_ADDRESSES =
69
85
  "125.28.3.0/24",
70
86
  "125.28.4.0/24",
71
87
  "125.28.5.0/24",
72
- "125.28.6.0/24",
73
- "125.28.7.0/24",
74
88
  "125.28.8.0/24",
75
89
  "210.168.246.0/24",
76
90
  "210.168.247.0/24",
@@ -89,17 +103,12 @@ Jpmobile::Mobile::Willcom::IP_ADDRESSES =
89
103
  "211.18.235.0/24",
90
104
  "211.18.236.0/24",
91
105
  "211.18.237.0/24",
92
- "211.18.238.0/24",
93
- "211.18.239.0/24",
94
106
  "219.108.10.0/24",
95
107
  "219.108.11.0/24",
96
108
  "219.108.12.0/24",
97
109
  "219.108.13.0/24",
98
110
  "219.108.14.0/24",
99
111
  "219.108.15.0/24",
100
- "219.108.4.0/24",
101
- "219.108.5.0/24",
102
- "219.108.6.0/24",
103
112
  "219.108.7.0/24",
104
113
  "219.108.8.0/24",
105
114
  "219.108.9.0/24",
@@ -108,10 +117,41 @@ Jpmobile::Mobile::Willcom::IP_ADDRESSES =
108
117
  "221.119.2.0/24",
109
118
  "221.119.3.0/24",
110
119
  "221.119.4.0/24",
111
- "221.119.5.0/24",
112
120
  "221.119.6.0/24",
113
121
  "221.119.7.0/24",
114
122
  "221.119.8.0/24",
115
123
  "221.119.9.0/24",
124
+ "114.20.49.0/24",
125
+ "114.20.50.0/24",
126
+ "114.20.51.0/24",
127
+ "114.20.52.0/24",
128
+ "114.20.53.0/24",
129
+ "114.20.54.0/24",
130
+ "114.20.55.0/24",
131
+ "114.20.56.0/24",
132
+ "114.20.57.0/24",
133
+ "114.20.58.0/24",
134
+ "114.20.59.0/24",
135
+ "114.20.60.0/24",
136
+ "114.20.61.0/24",
137
+ "114.20.62.0/24",
138
+ "114.20.63.0/24",
139
+ "114.20.64.0/24",
140
+ "114.20.65.0/24",
141
+ "114.20.66.0/24",
142
+ "114.20.67.0/24",
143
+ "114.21.255.0/27",
116
144
  "219.108.2.0/24",
117
- "219.108.3.0/24"].map {|ip| IPAddr.new(ip) }
145
+ "219.108.3.0/24",
146
+ "125.28.6.0/24",
147
+ "125.28.7.0/24",
148
+ "125.28.11.0/24",
149
+ "125.28.12.0/24",
150
+ "125.28.13.0/24",
151
+ "125.28.14.0/24",
152
+ "211.18.238.0/24",
153
+ "211.18.239.0/24",
154
+ "219.108.4.0/24",
155
+ "219.108.5.0/24",
156
+ "219.108.6.0/24",
157
+ "221.119.5.0/24"].map {|ip| IPAddr.new(ip) }
@@ -0,0 +1,55 @@
1
+ module Jpmobile
2
+ module Rack
3
+ # in your_app.ru
4
+ #
5
+ # check ip
6
+ # require 'jpmobile/rack'
7
+ # use Jpmobile::Rack::Auth::Docomo
8
+
9
+ # (but allow localhost), {
10
+ # :ident => %w( xxxxxx ),
11
+ # :check_ip => true,
12
+ # :allow_ip => %w( 127.0.0.1 )
13
+ # } # you can use block
14
+
15
+ # req is Jpmobile::Rack::Request's subclass instance.
16
+ # require 'jpmobile/rack'
17
+ # use Jpmobile::Rack::Auth {|req|
18
+ # Your::Model::AuSubno.count(:subno => req.ident) != 0
19
+ # }
20
+ class Auth
21
+ FORBIDDEN = [403, {'Content-Type' => 'text/plain' }, 'Forbidden' ]
22
+
23
+ def initialize(app, hash=nil, &block)
24
+ @app = app
25
+ if hash
26
+ @allow_ip = hash[:allow_ip]
27
+ end
28
+ @cond = block
29
+ end
30
+
31
+ def career
32
+ end
33
+
34
+ def call(env)
35
+ request = Request.new(env)
36
+
37
+ if request.mobile? and request.valid_ip?
38
+ @app.call(env)
39
+ else
40
+ FORBIDDEN
41
+ end
42
+ end
43
+
44
+ ::Jpmobile::Mobile.constants.each do |career|
45
+ klass = Class.new(self)
46
+ klass.class_eval do
47
+ define_method :career do
48
+ ::Jpmobile::Mobile.const_get(career)
49
+ end
50
+ end
51
+ const_set(career, klass)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,54 @@
1
+ module Jpmobile
2
+ module Rack
3
+ # Rack::CommonLogger show too few infomation to debugging mobile web application.
4
+ # So you can Rack::Jpmobile::CombinedLogger as alternate.
5
+ # SYNOPSIS
6
+ # in your_app.up
7
+ # require 'jpmobile/rack'
8
+ # class Rack::CommonLogger
9
+ # include Jpmobile::Rack::CombinedLogger
10
+ # end
11
+ #
12
+ # use Rack::CommonLogger, STDERR # you need not write this when you use rackup on development.
13
+ #
14
+ module CombinedLogger
15
+
16
+ # XXX: It's evil way for replacing Rack::CommonLogger#each.
17
+ def self.included klass
18
+ klass.class_eval do
19
+ alias orig_each each
20
+ remove_method :each
21
+ end
22
+ end
23
+
24
+ def each
25
+ length = 0
26
+ @body.each { |part|
27
+ length += part.size
28
+ yield part
29
+ }
30
+
31
+ @now = Time.now
32
+
33
+ # Combined Log Format: http://httpd.apache.org/docs/1.3/logs.html#combined
34
+ # 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"
35
+ # "%h %l %u [%t] \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
36
+ @logger << %{%s - %s [%s] "%s %s%s %s" %d %s %s "%s" %0.4f\n} %
37
+ [
38
+ @env['HTTP_X_FORWARDED_FOR'] || @env["REMOTE_ADDR"] || "-",
39
+ @env["REMOTE_USER"] || @env["HTTP_X_DCMGUID"] || @env["HTTP_X_UP_SUBNO"] || @env["HTTP_X_JPHONE_UID"] || @env["HTTP_X_EM_UID"] || "-",
40
+ @now.strftime("%d/%b/%Y %H:%M:%S"),
41
+ @env["REQUEST_METHOD"],
42
+ @env["PATH_INFO"],
43
+ @env["QUERY_STRING"].empty? ? "" : "?"+@env["QUERY_STRING"],
44
+ @env["HTTP_VERSION"],
45
+ @status.to_s[0..3],
46
+ (length.zero? ? "-" : length.to_s),
47
+ @env["HTTP_REFERER"] ? %{"#{@env['Referer']}"} : '-',
48
+ @env["HTTP_USER_AGENT"],
49
+ @now - @time
50
+ ]
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,7 @@
1
+ module Jpmobile
2
+ module Rack
3
+ class Request < ::Rack::Request
4
+ include ::Jpmobile::RequestWithMobile
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ # = セッションID を QUERY_STRING などから上書きする処理
2
+ module Jpmobile
3
+ module Rack
4
+ class TransSid
5
+ def initialize(app)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ @app.call(env)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,58 +1,81 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # = セッションIDの付与
2
- #
3
- # based on http://moriq.tdiary.net/20070209.html#p01
4
- # by moriq <moriq@moriq.com>
5
- #
6
- # cookie support detection inspired by takai http://recompile.net/
7
- #
8
- # Rails 2.0.2 support is based on the code contributed
9
- # by masuidrive <masuidrive (at) masuidrive.jp>
3
+ require 'active_support/version'
10
4
 
11
- # FastCGI環境では(どういうわけか) cgi.query_string でクエリ文字列を取得できないので
12
- # ENV['QUERY_STRING'] に代入しておく。
13
- module ActionController
14
- class CgiRequest
15
- alias_method :initialize_without_ext, :initialize
16
- def initialize(cgi, options = {})
17
- initialize_without_ext(cgi, options)
18
- ENV['QUERY_STRING'] = query_string
5
+ module ParamsOverCookie
6
+ def self.included(base)
7
+ base.class_eval do
8
+ # cookie よりも params を先に見るパッチ
9
+ def load_session_with_jpmobile(env)
10
+ request = Rack::Request.new(env)
11
+ unless @cookie_only
12
+ sid = request.params[@key]
13
+ end
14
+ sid ||= request.cookies[@key]
15
+
16
+ sid, session = get_session(env, sid)
17
+ [sid, session]
18
+ end
19
+ alias_method_chain :load_session, :jpmobile
19
20
  end
20
21
  end
21
22
  end
22
23
 
23
- class ActionController::Base #:nodoc:
24
- class_inheritable_accessor :trans_sid_mode
25
- def transit_sid_mode(*args)
26
- STDERR.puts "Method transit_sid is now deprecated. Use trans_sid instead."
27
- trans_sid_mode(*args)
28
- end
29
- class << self
30
- def trans_sid(mode=:mobile)
31
- include Jpmobile::TransSid
32
- self.trans_sid_mode = mode
33
- unless mode == :none
34
- # CSRF対策への対策
35
- session :cookie_only => false
36
- # url/postからsession_keyを取得できるようhookを追加する
37
- unless ::CGI::Session.private_method_defined?(:initialize_without_session_key_fixation)
38
- ::CGI::Session.class_eval do
39
- alias_method :initialize_without_session_key_fixation, :initialize
40
- def initialize(cgi, options = {})
41
- key = options['session_key']
42
- if cgi.cookies[key].empty?
43
- session_id = (CGI.parse(cgi.env_table['RAW_POST_DATA'])[key] rescue nil) ||
44
- (CGI.parse(ENV['QUERY_STRING'] || cgi.query_string)[key] rescue nil)
45
- cgi.params[key] = session_id unless session_id.blank?
46
- end
47
- initialize_without_session_key_fixation(cgi, options)
48
- end
49
- end
24
+ module ActionController
25
+ # cookie よりも params を先に見るパッチ
26
+ Session::AbstractStore.send :include, ParamsOverCookie
27
+
28
+ class Base #:nodoc:
29
+ class_inheritable_accessor :trans_sid_mode
30
+ alias :redirect_to_full_url_without_jpmobile :redirect_to_full_url
31
+
32
+ def transit_sid_mode(*args)
33
+ STDERR.puts "Method transit_sid is now deprecated. Use trans_sid instead."
34
+ trans_sid_mode(*args)
35
+ end
36
+
37
+ def redirect_to_full_url(url, status)
38
+ if apply_trans_sid? and !url.match(/#{session_key}/)
39
+ uri = URI.parse(url)
40
+ if uri.query
41
+ uri.query += "&#{session_key}=#{jpmobile_session_id}"
42
+ else
43
+ uri.query = "#{session_key}=#{jpmobile_session_id}"
50
44
  end
45
+ url = uri.to_s
51
46
  end
47
+
48
+ redirect_to_full_url_without_jpmobile(url, status)
52
49
  end
53
- def transit_sid(*args)
54
- STDERR.puts "Method transit_sid is now deprecated. Use trans_sid instead."
55
- trans_sid(*args)
50
+
51
+ class << self
52
+ # 2.3.x or higher
53
+ def trans_sid(mode = :mobile)
54
+ include Jpmobile::TransSid
55
+ self.trans_sid_mode = mode
56
+ end
57
+
58
+ def transit_sid(*args)
59
+ STDERR.puts "Method transit_sid is now deprecated. Use trans_sid instead."
60
+ trans_sid(*args)
61
+ end
62
+ end
63
+
64
+ private
65
+ # trans_sidを適用すべきかを返す。
66
+ def apply_trans_sid?
67
+ case trans_sid_mode
68
+ when :always
69
+ session.inspect
70
+ return true
71
+ when :mobile
72
+ if request.mobile? and !request.mobile.supports_cookie?
73
+ session.inspect
74
+ return true
75
+ end
76
+ end
77
+
78
+ return false
56
79
  end
57
80
  end
58
81
  end
@@ -68,19 +91,21 @@ module Jpmobile::TransSid #:nodoc:
68
91
  result = super || {}
69
92
  return result unless request # for test process
70
93
  return result unless apply_trans_sid?
71
- return result.merge({ session_key => session.session_id })
94
+ return result.merge({ session_key => jpmobile_session_id })
72
95
  end
73
96
 
74
97
  private
75
98
  # session_keyを返す。
76
99
  def session_key
77
- if session_enabled?
78
- session_key = request.session_options[:session_key] || '_session_id'
79
- end
100
+ ActionController::Base.session_options.merge(request.session_options || {})[:key]
101
+ end
102
+ # session_idを返す
103
+ def jpmobile_session_id
104
+ request.session_options[:id] rescue session.session_id
80
105
  end
81
106
  # session_idを埋め込むためのhidden fieldを出力する。
82
107
  def sid_hidden_field_tag
83
- "<input type=\"hidden\" name=\"#{CGI::escapeHTML session_key}\" value=\"#{CGI::escapeHTML session.session_id}\" />"
108
+ "<input type=\"hidden\" name=\"#{CGI::escapeHTML session_key}\" value=\"#{CGI::escapeHTML jpmobile_session_id}\" />"
84
109
  end
85
110
  # formにsession_idを追加する。
86
111
  def append_session_id_parameter
@@ -88,18 +113,4 @@ module Jpmobile::TransSid #:nodoc:
88
113
  return unless apply_trans_sid?
89
114
  response.body.gsub!(%r{(</form>)}i, sid_hidden_field_tag+'\1')
90
115
  end
91
- # trans_sidを適用すべきかを返す。
92
- def apply_trans_sid?
93
- return false unless session_enabled?
94
- return false if trans_sid_mode == :none
95
- return true if trans_sid_mode == :always
96
- if trans_sid_mode == :mobile
97
- if request.mobile?
98
- return !request.mobile.supports_cookie?
99
- else
100
- return false
101
- end
102
- end
103
- return false
104
- end
105
116
  end
@@ -2,7 +2,7 @@ module Jpmobile #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 4
5
+ TINY = 6
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -27,15 +27,18 @@ namespace :test do
27
27
  end
28
28
  desc "Generate rails app and run jpmobile tests in the app"
29
29
  task :rails, [:versions] do |t, args|
30
- rails_versions = args.versions.split(",") rescue ["2.2.2"]
31
- rails_versions.each do |rails_version|
32
- puts "Running tests in Rails #{rails_version}"
30
+ rails_root = "test/rails/rails_root"
31
+ relative_root = "../../../"
32
+ rails_versions = args.versions.split("/") rescue ["2.3.5"]
33
+
34
+ puts "Running tests in Rails #{rails_versions.join(', ')}"
33
35
 
36
+ rails_versions.each do |rails_version|
37
+ puts " for #{rails_version}"
34
38
  # generate rails app
35
- rails_root = "test/rails/rails_root"
36
39
  FileUtils.rm_rf(rails_root)
37
40
  FileUtils.mkdir_p(rails_root)
38
- system "rails _#{rails_version}_ -q --force #{rails_root}"
41
+ system "rails _#{rails_version}_ --force #{rails_root}"
39
42
 
40
43
  # setup jpmobile
41
44
  plugin_path = File.join(rails_root, 'vendor', 'plugins', 'jpmobile')
@@ -49,11 +52,28 @@ namespace :test do
49
52
  FileUtils.cp_r(file, rails_root)
50
53
  end
51
54
 
55
+ # for 2.3.2
56
+ if rails_version == "2.3.2"
57
+ FileList["test/rails/2.3.2/*"].each do |file|
58
+ FileUtils.cp_r(file, rails_root)
59
+ end
60
+ end
61
+
62
+ # for cookie_only option
63
+ config_path = File.join(rails_root, 'config', 'environment.rb')
64
+ File.open(config_path, 'a') do |file|
65
+ file.write <<-END
66
+
67
+ ActionController::Base.session = {:key => "_session_id", :cookie_only => false}
68
+ END
69
+ end
70
+
52
71
  # run tests in rails
53
72
  cd rails_root
54
73
  sh "rake db:migrate"
55
74
  sh "rake spec"
75
+
76
+ cd relative_root
56
77
  end
57
78
  end
58
79
  end
59
-
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/ruby -Ku
2
+ # -*- coding: utf-8 -*-
2
3
  require 'rubygems'
3
4
  require 'open-uri'
4
- require 'kconv'
5
5
  require 'hpricot'
6
6
  require 'pp'
7
7
 
@@ -12,19 +12,24 @@ user_agents = {}
12
12
  (Hpricot(src)/"//div[@id='maincol']//table").each do |table|
13
13
  (table/"tr[@class='acenter']").each do |tr|
14
14
  a = (tr/:td).map {|x| x.inner_text }
15
+ i = 0
15
16
  if a.size == 7
16
- a.shift # remove rowspan
17
+ if a[0] =~ /[A-Z]{1,2}\-\d{2}A/ # iモードブラウザ2.0
18
+ i = 1
19
+ else
20
+ a.shift # remove rowspan
21
+ end
17
22
  elsif a.size != 6
18
23
  raise "something is wrong"
19
24
  end
20
25
  a[0].sub!(/(.*)/,"")
21
26
  a[0].sub!(/\(.+\)/,"")
22
27
  a[0].sub!(/-/,'') # F-01A -> F01A
28
+ a[0].sub!(/$/,'3') if i == 1 # iモードブラウザ2.0
23
29
 
24
- a[3].sub!(/^.*?(\d+×\d+).*$/,'\1')
25
- width, height = a[3].split(/×/,2).map{|x| x.to_i}
26
-
27
- case a[5]
30
+ a[3+i].sub!(/^.*?(\d+×\d+).*$/,'\1')
31
+ width, height = a[3+i].split(/×/,2).map{|x| x.to_i}
32
+ case a[5+i]
28
33
  when /^カラー\s*(\d+)色$/
29
34
  color_p = true
30
35
  colors = $1.to_i
@@ -1,4 +1,3 @@
1
- require 'kconv'
2
1
  require 'rubygems'
3
2
  require 'hpricot'
4
3
  require 'open-uri'
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'hpricot'
3
- require 'kconv'
4
3
  require 'cgi'
5
4
  require 'open-uri'
6
5
 
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env ruby -Ku
2
+ # -*- coding: utf-8 -*-
2
3
  # auのwebページからIPリストを抽出する場当たり的なスクリプト。
3
4
 
4
- require 'kconv'
5
5
  require 'open-uri'
6
6
  require 'pp'
7
7
  require 'rubygems'
8
8
  require 'hpricot'
9
+ require 'nkf'
9
10
 
10
11
  ips = []
11
12
 
12
- src = open("http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html").read.toutf8
13
+ src = NKF.nkf("-m0 -Sw", open("http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html").read)
13
14
  doc = Hpricot(src)
14
15
  (doc/'//table').each do |table|
15
16
  trs = (table/'tr')
16
17
  next if trs.first && (trs.first/'td[2]').inner_text != 'IPアドレス'
17
18
  trs.each do |tr|
18
- a = (tr/'td').to_a.map(&:inner_text)
19
+ a = (tr/'td').to_a.map{|t| t.inner_text}
19
20
  next if a[1] == 'IPアドレス'
20
21
  ips << a[1..2].join if a[3] != '廃止'
21
22
  end
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby -Ku
2
2
  # willcomのwebページからIPリストを抽出する場当たり的なスクリプト。
3
3
 
4
- require 'kconv'
5
4
  require 'open-uri'
6
5
  require 'pp'
6
+ require 'nkf'
7
7
 
8
- src = open("http://www.willcom-inc.com/ja/service/contents_service/create/center_info/index.html").read.toutf8
8
+ src = NKF.nkf("-m0 -Sw", open("http://www.willcom-inc.com/ja/service/contents_service/create/center_info/index.html").read)
9
9
 
10
10
  src.sub!(%r{^.*<b>Webアクセス時のIPアドレス帯域</b>(.+?)</table>.*$}m, '\\1')
11
11
  ips = src.scan(/(\d+\.\d+\.\d+\.\d+\/\d+)/).flatten
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/ruby -Ku
2
+ # -*- coding: utf-8 -*-
2
3
  require 'rubygems'
3
4
  require 'open-uri'
4
- require 'kconv'
5
5
  require 'hpricot'
6
6
  require 'pp'
7
7
 
@@ -12,19 +12,24 @@ user_agents = {}
12
12
  (Hpricot(src)/"//div[@id='maincol']//table").each do |table|
13
13
  (table/"tr[@class='acenter']").each do |tr|
14
14
  a = (tr/:td).map {|x| x.inner_text }
15
+ i = 0
15
16
  if a.size == 7
16
- a.shift # remove rowspan
17
+ if a[0] =~ /[A-Z]{1,2}\-\d{2}A/ # iモードブラウザ2.0
18
+ i = 1
19
+ else
20
+ a.shift # remove rowspan
21
+ end
17
22
  elsif a.size != 6
18
23
  raise "something is wrong"
19
24
  end
20
25
  a[0].sub!(/(.*)/,"")
21
26
  a[0].sub!(/\(.+\)/,"")
22
27
  a[0].sub!(/-/,'') # F-01A -> F01A
28
+ a[0].sub!(/$/,'3') if i == 1 # iモードブラウザ2.0
23
29
 
24
- a[3].sub!(/^.*?(\d+×\d+).*$/,'\1')
25
- width, height = a[3].split(/×/,2).map{|x| x.to_i}
26
-
27
- case a[5]
30
+ a[3+i].sub!(/^.*?(\d+×\d+).*$/,'\1')
31
+ width, height = a[3+i].split(/×/,2).map{|x| x.to_i}
32
+ case a[5+i]
28
33
  when /^カラー\s*(\d+)色$/
29
34
  color_p = true
30
35
  colors = $1.to_i
@@ -1,4 +1,3 @@
1
- require 'kconv'
2
1
  require 'rubygems'
3
2
  require 'hpricot'
4
3
  require 'open-uri'
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'hpricot'
3
- require 'kconv'
4
3
  require 'cgi'
5
4
  require 'open-uri'
6
5