jpmobile 0.1.0.pre.2 → 0.1.0.pre.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -135,6 +135,13 @@ jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱
135
135
  # Rack middleware を追加するメソッド
136
136
  Rails.application.config.jpmobile.mobile_fiter
137
137
 
138
+ ** 下記の設定を追加することで、<form> タグの accept-charset が変更される。
139
+
140
+ # <form accept-charset="Shift_JIS" ...> などに変更する
141
+ Rails.application.config.jpmobile.form_accept_charset_conversion = true
142
+
143
+ 携帯電話上では特に問題とならない。PCブラウザでテストする際に問題となるためのオプション。
144
+
138
145
  * Sinatra の場合は下記のように指定する。
139
146
 
140
147
  $LOAD_PATH << './lib/jpmobile/lib'
data/VERSION.yml CHANGED
@@ -2,4 +2,4 @@
2
2
  :major: 0
3
3
  :minor: 1
4
4
  :patch: 0
5
- :build: pre.2
5
+ :build: pre.3
data/init.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # Include hook code here
2
2
 
3
- require 'jpmobile'
3
+ require File.join(File.dirname(__FILE__), 'lib/jpmobile')
data/jpmobile.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jpmobile}
8
- s.version = "0.1.0.pre.2"
8
+ s.version = "0.1.0.pre.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Yoji Shidara", "Shin-ichiro OGAWA"]
data/lib/jpmobile.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) ||
3
+ $:.include?(File.expand_path(File.dirname(__FILE__)))
4
+
2
5
  module Jpmobile
3
6
  autoload :Email, 'jpmobile/email'
4
7
  autoload :Emoticon, 'jpmobile/emoticon'
@@ -66,4 +66,22 @@ module ActionView
66
66
  end
67
67
  end
68
68
  end
69
+
70
+ module Helpers
71
+ module FormTagHelper
72
+ private
73
+ def html_options_for_form(url_for_options, options, *parameters_for_url)
74
+ accept_charset = (Rails.application.config.jpmobile.form_accept_charset_conversion && request && request.mobile && request.mobile.default_charset) || "UTF-8"
75
+
76
+ options.stringify_keys.tap do |html_options|
77
+ html_options["enctype"] = "multipart/form-data" if html_options.delete("multipart")
78
+ # The following URL is unescaped, this is just a hash of options, and it is the
79
+ # responsability of the caller to escape all the values.
80
+ html_options["action"] = url_for(url_for_options, *parameters_for_url)
81
+ html_options["accept-charset"] = accept_charset
82
+ html_options["data-remote"] = true if html_options.delete("remote")
83
+ end
84
+ end
85
+ end
86
+ end
69
87
  end
data/lib/jpmobile/rack.rb CHANGED
@@ -12,6 +12,12 @@ module Jpmobile
12
12
  end
13
13
 
14
14
  class Configuration
15
+ attr_accessor :form_accept_charset_conversion
16
+
17
+ def initialize
18
+ @form_accept_charset_conversion = false
19
+ end
20
+
15
21
  def mobile_filter
16
22
  ::Jpmobile::Rack.mount_middlewares
17
23
  end
@@ -21,7 +21,10 @@ module Jpmobile
21
21
  charset = nil
22
22
  end
23
23
 
24
- response, charset = mobile.to_external(response_to_body(response), type, charset)
24
+ body = response_to_body(response)
25
+ body = body.sub('<input name="_snowman" type="hidden" value="&#9731;" />', ' ')
26
+
27
+ response, charset = mobile.to_external(body, type, charset)
25
28
 
26
29
  if type and charset
27
30
  env['Content-Type'] = "#{type}; charset=#{charset}"
@@ -7,9 +7,9 @@ module ParamsOverCookie
7
7
  base.class_eval do
8
8
  # cookie よりも params を先に見るパッチ
9
9
  def extract_session_id_with_jpmobile(env)
10
- request = Rack::Request.new(env)
10
+ request = ActionDispatch::Request.new(env.dup)
11
11
  if request.params[@key] and !@cookie_only
12
- sid = request.params[@key] unless @cookie_only
12
+ sid = request.params[@key]
13
13
  end
14
14
  sid ||= request.cookies[@key]
15
15
  sid
data/lib/jpmobile/util.rb CHANGED
@@ -65,17 +65,17 @@ module Jpmobile
65
65
 
66
66
  def utf8_to_sjis(utf8_str)
67
67
  if utf8_str.respond_to?(:encode)
68
- utf8_str.encode("Shift_JIS")
68
+ utf8_str.encode("Shift_JIS", :crlf_newline => true)
69
69
  else
70
- NKF.nkf("-m0 -x -Ws", utf8_str)
70
+ NKF.nkf("-m0 -x -Ws", utf8_str).gsub(/\n/, "\r\n")
71
71
  end
72
72
  end
73
73
 
74
74
  def sjis_to_utf8(sjis_str)
75
75
  if sjis_str.respond_to?(:encode)
76
- sjis_str.encode("UTF-8")
76
+ sjis_str.encode("UTF-8", :universal_newline => true)
77
77
  else
78
- NKF.nkf("-m0 -x -Sw", sjis_str)
78
+ NKF.nkf("-m0 -x -Sw", sjis_str).gsub(/\r\n/, "\n")
79
79
  end
80
80
  end
81
81
 
@@ -7,7 +7,7 @@ describe Jpmobile::Rack::Filter do
7
7
 
8
8
  context "漢字コード変換" do
9
9
  before(:each) do
10
- @utf8 = "ゆーてぃーえふえいとの日本語ですが何か"
10
+ @utf8 = "ゆーてぃーえふえいとの\n日本語ですが何か"
11
11
  @sjis = utf8_to_sjis(@utf8)
12
12
  end
13
13
 
@@ -19,7 +19,7 @@ describe Jpmobile::Rack::Filter do
19
19
  'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
20
20
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8))).call(res)
21
21
  res[1]['Content-Type'].should == "text/html; charset=Shift_JIS"
22
- response_body(res) == @sjis
22
+ response_body(res).should == @sjis
23
23
  end
24
24
  end
25
25
 
@@ -31,7 +31,7 @@ describe Jpmobile::Rack::Filter do
31
31
  'HTTP_USER_AGENT' => "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
32
32
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8))).call(res)
33
33
  res[1]['Content-Type'].should == "text/html; charset=Shift_JIS"
34
- response_body(res) == @sjis
34
+ response_body(res).should == @sjis
35
35
  end
36
36
  end
37
37
 
@@ -43,9 +43,19 @@ describe Jpmobile::Rack::Filter do
43
43
  'HTTP_USER_AGENT' => "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1")
44
44
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8))).call(res)
45
45
  res[1]['Content-Type'].should == "text/html"
46
- response_body(res) == @utf8
46
+ response_body(res).should == @utf8
47
47
  end
48
48
  end
49
+
50
+ it "_snowman が出力されないこと" do
51
+ res = Rack::MockRequest.env_for(
52
+ "/",
53
+ "REQUEST_METHOD" => "GET",
54
+ 'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
55
+ res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new('<input name="_snowman" type="hidden" value="&#9731;" />'))).call(res)
56
+ res[1]['Content-Type'].should == "text/html; charset=Shift_JIS"
57
+ response_body(res).should == " "
58
+ end
49
59
  end
50
60
 
51
61
  context "絵文字変換" do
@@ -61,7 +71,7 @@ describe Jpmobile::Rack::Filter do
61
71
  @sjis = utf8_to_sjis(@utf8)
62
72
  @docomo_emoji = sjis("\xf8\xac")
63
73
  @au_emoji = sjis("\xf6\x6c")
64
- @softbank_emoji = utf8("\x1b\x24Fd\x0f")
74
+ @softbank_emoji = utf8("\356\211\204")
65
75
  end
66
76
 
67
77
  context "docomo のとき" do
@@ -71,7 +81,7 @@ describe Jpmobile::Rack::Filter do
71
81
  "REQUEST_METHOD" => "GET",
72
82
  'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
73
83
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_docomo_cr))).call(res)
74
- response_body(res) == @sjis + @docomo_emoji
84
+ response_body(res).should == @sjis + @docomo_emoji
75
85
  end
76
86
 
77
87
  it "docomo のUTF-8絵文字が変換されること" do
@@ -80,7 +90,7 @@ describe Jpmobile::Rack::Filter do
80
90
  "REQUEST_METHOD" => "GET",
81
91
  'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
82
92
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_docomo_utf8))).call(res)
83
- response_body(res) == @sjis + @docomo_emoji
93
+ response_body(res).should == @sjis + @docomo_emoji
84
94
  end
85
95
 
86
96
  it "au のUTF-8絵文字が変換されること" do
@@ -89,7 +99,7 @@ describe Jpmobile::Rack::Filter do
89
99
  "REQUEST_METHOD" => "GET",
90
100
  'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
91
101
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_au_utf8))).call(res)
92
- response_body(res) == @sjis + @docomo_emoji
102
+ response_body(res).should == @sjis + @docomo_emoji
93
103
  end
94
104
 
95
105
  it "softbank のUTF-8絵文字が変換されること" do
@@ -98,7 +108,7 @@ describe Jpmobile::Rack::Filter do
98
108
  "REQUEST_METHOD" => "GET",
99
109
  'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH906i(c100;TB;W24H16)')
100
110
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_softbank_utf8))).call(res)
101
- response_body(res) == @sjis + @docomo_emoji
111
+ response_body(res).should == @sjis + @docomo_emoji
102
112
  end
103
113
  end
104
114
 
@@ -109,7 +119,7 @@ describe Jpmobile::Rack::Filter do
109
119
  "REQUEST_METHOD" => "GET",
110
120
  'HTTP_USER_AGENT' => "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
111
121
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_au_cr))).call(res)
112
- response_body(res) == @sjis + @au_emoji
122
+ response_body(res).should == @sjis + @au_emoji
113
123
  end
114
124
 
115
125
  it "docomo のUTF-8絵文字が変換されること" do
@@ -118,7 +128,7 @@ describe Jpmobile::Rack::Filter do
118
128
  "REQUEST_METHOD" => "GET",
119
129
  'HTTP_USER_AGENT' => "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
120
130
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_docomo_utf8))).call(res)
121
- response_body(res) == @sjis + @au_emoji
131
+ response_body(res).should == @sjis + @au_emoji
122
132
  end
123
133
 
124
134
  it "au のUTF-8絵文字が変換されること" do
@@ -127,7 +137,7 @@ describe Jpmobile::Rack::Filter do
127
137
  "REQUEST_METHOD" => "GET",
128
138
  'HTTP_USER_AGENT' => "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
129
139
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_au_utf8))).call(res)
130
- response_body(res) == @sjis + @au_emoji
140
+ response_body(res).should == @sjis + @au_emoji
131
141
  end
132
142
 
133
143
  it "softbank のUTF-8絵文字が変換されること" do
@@ -136,7 +146,7 @@ describe Jpmobile::Rack::Filter do
136
146
  "REQUEST_METHOD" => "GET",
137
147
  'HTTP_USER_AGENT' => "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
138
148
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_softbank_utf8))).call(res)
139
- response_body(res) == @sjis + @au_emoji
149
+ response_body(res).should == @sjis + @au_emoji
140
150
  end
141
151
  end
142
152
 
@@ -147,7 +157,7 @@ describe Jpmobile::Rack::Filter do
147
157
  "REQUEST_METHOD" => "GET",
148
158
  'HTTP_USER_AGENT' => "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1")
149
159
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_softbank_cr))).call(res)
150
- response_body(res) == @utf8 + @softbank_emoji
160
+ response_body(res).should == @utf8 + @softbank_emoji
151
161
  end
152
162
 
153
163
  it "docomo のUTF-8絵文字が変換されること" do
@@ -156,7 +166,7 @@ describe Jpmobile::Rack::Filter do
156
166
  "REQUEST_METHOD" => "GET",
157
167
  'HTTP_USER_AGENT' => "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1")
158
168
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_docomo_utf8))).call(res)
159
- response_body(res) == @utf8 + @softbank_emoji
169
+ response_body(res).should == @utf8 + @softbank_emoji
160
170
  end
161
171
 
162
172
  it "au のUTF-8絵文字が変換されること" do
@@ -165,7 +175,7 @@ describe Jpmobile::Rack::Filter do
165
175
  "REQUEST_METHOD" => "GET",
166
176
  'HTTP_USER_AGENT' => "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1")
167
177
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_au_utf8))).call(res)
168
- response_body(res) == @utf8 + @softbank_emoji
178
+ response_body(res).should == @utf8 + @softbank_emoji
169
179
  end
170
180
 
171
181
  it "softbank のUTF-8絵文字が変換されること" do
@@ -174,7 +184,7 @@ describe Jpmobile::Rack::Filter do
174
184
  "REQUEST_METHOD" => "GET",
175
185
  'HTTP_USER_AGENT' => "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1")
176
186
  res = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@utf8 + @emoji_softbank_utf8))).call(res)
177
- response_body(res) == @utf8 + @softbank_emoji
187
+ response_body(res).should == @utf8 + @softbank_emoji
178
188
  end
179
189
  end
180
190
  end
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'stringio'
3
+ require 'nkf'
3
4
  require File.join(File.expand_path(File.dirname(__FILE__)), 'spec_helper')
4
5
 
5
6
  describe Jpmobile::Util, ".deep_apply" do
@@ -26,5 +27,8 @@ describe Jpmobile::Util, ".deep_apply" do
26
27
  string_io = StringIO.new('test')
27
28
  Jpmobile::Util.deep_apply(string_io) {|obj| obj }.should equal(string_io)
28
29
  end
29
- end
30
30
 
31
+ it "utf8_to_sjis で改行コードが CRLF に変更されること" do
32
+ Jpmobile::Util.utf8_to_sjis("UTF8\nTEXT\n").should == Jpmobile::Util.sjis("UTF8\r\nTEXT\r\n")
33
+ end
34
+ end
@@ -1 +1,2 @@
1
1
  Rails.application.config.jpmobile.mobile_filter
2
+ Rails.application.config.jpmobile.form_accept_charset_conversion = true
@@ -131,12 +131,12 @@ describe TransSidAlwaysAndSessionOffController, "という trans_sid :always が
131
131
  end
132
132
 
133
133
  # NOTE: 3.0.0RC では accept-charset は UTF-8 で埋め込まれるので保留
134
- describe_mobile_with_ua "DoCoMo/2.0 SH902i(c100;TB;W24H12)", "UTF-8" do
134
+ describe_mobile_with_ua "DoCoMo/2.0 SH902i(c100;TB;W24H12)", "Shift_JIS" do
135
135
  it_should_behave_like "trans_sid が起動するとき"
136
136
  end
137
137
 
138
138
  # NOTE: 3.0.0RC では accept-charset は UTF-8 で埋め込まれるので保留
139
- describe_mobile_with_ua "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0", "UTF-8" do
139
+ describe_mobile_with_ua "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0", "Shift_JIS" do
140
140
  it_should_behave_like "trans_sid が起動しないとき"
141
141
  end
142
142
 
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 1
8
8
  - 0
9
9
  - pre
10
- - 2
11
- version: 0.1.0.pre.2
10
+ - 3
11
+ version: 0.1.0.pre.3
12
12
  platform: ruby
13
13
  authors:
14
14
  - Yoji Shidara