jpmobile 1.0.5 → 1.0.6
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/Gemfile +3 -3
- data/README.rdoc +1 -1
- data/VERSION.yml +1 -1
- data/lib/jpmobile/emoticon.rb +3 -1
- data/lib/jpmobile/filter.rb +6 -1
- data/lib/jpmobile/mobile/abstract_mobile.rb +10 -0
- data/lib/jpmobile/mobile/iphone.rb +10 -0
- data/lib/jpmobile/mobile/smart_phone.rb +10 -0
- data/lib/jpmobile/rack/filter.rb +45 -1
- data/lib/jpmobile/rack/params_filter.rb +1 -1
- data/lib/jpmobile/sinatra.rb +16 -0
- data/spec/rack/jpmobile/emoticon_spec.rb +52 -0
- data/spec/unit/emoticon_spec.rb +4 -0
- data/spec/unit/encoding_spec.rb +2 -2
- data/spec/unit/mail_spec.rb +2 -2
- data/spec/unit/receive_mail_spec.rb +5 -5
- data/test/rails/overrides/app/controllers/hankaku_input_filter_controller.rb +3 -0
- data/test/rails/overrides/app/views/hankaku_input_filter/with_charset.html.erb +1 -0
- data/test/rails/overrides/app/views/layouts/with_charset.html.erb +13 -0
- data/test/rails/overrides/spec/models/mobile_mailer_spec.rb +1 -1
- data/test/rails/overrides/spec/requests/filter_spec.rb +10 -0
- data/test/sinatra/config.ru +2 -0
- data/test/sinatra/guestbook.rb +8 -7
- data/test/sinatra/test/filter_test.rb +10 -0
- data/test/sinatra/views/index.erb +1 -0
- data/test/sinatra/views/index_mobile.erb +1 -0
- metadata +46 -40
data/Gemfile
CHANGED
@@ -2,9 +2,9 @@ source 'http://rubygems.org'
|
|
2
2
|
|
3
3
|
group :development, :test do
|
4
4
|
gem 'jeweler'
|
5
|
-
gem 'rails', '
|
6
|
-
gem 'rspec', '
|
7
|
-
gem 'rspec-rails', '
|
5
|
+
gem 'rails', '~>3.0.10'
|
6
|
+
gem 'rspec', '~>2.6.0'
|
7
|
+
gem 'rspec-rails', '~>2.6.0'
|
8
8
|
gem 'webrat'
|
9
9
|
gem 'geokit'
|
10
10
|
gem 'sqlite3-ruby'
|
data/README.rdoc
CHANGED
@@ -223,7 +223,7 @@ Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合
|
|
223
223
|
=== 位置情報の取得用リンクの生成
|
224
224
|
|
225
225
|
以下のようなコードで、端末に位置情報を要求するリンクを出力する。
|
226
|
-
<%= get_position_link_to(:action=>:gps) %>
|
226
|
+
<%= get_position_link_to("位置情報を取得する", :action=>:gps) %>
|
227
227
|
|
228
228
|
=== セッションIDの付与(Trans SID)
|
229
229
|
==== Cookie非対応携帯だけに付与する
|
data/VERSION.yml
CHANGED
data/lib/jpmobile/emoticon.rb
CHANGED
@@ -153,7 +153,7 @@ module Jpmobile
|
|
153
153
|
def self.unicodecr_to_au_email(in_str)
|
154
154
|
str = Jpmobile::Util.ascii_8bit(in_str)
|
155
155
|
regexp = Regexp.compile(Jpmobile::Util.ascii_8bit("&#x([0-9a-f]{4});"), Regexp::IGNORECASE)
|
156
|
-
str.gsub(regexp) do |match|
|
156
|
+
str = str.gsub(regexp) do |match|
|
157
157
|
unicode = $1.scanf("%x").first
|
158
158
|
converted = CONVERSION_TABLE_TO_AU[unicode]
|
159
159
|
|
@@ -176,6 +176,8 @@ module Jpmobile
|
|
176
176
|
match
|
177
177
|
end
|
178
178
|
end
|
179
|
+
regexp = Regexp.compile(Regexp.escape(Jpmobile::Util.ascii_8bit("\x1b\x28\x42\x1b\x24\x42")), Regexp::IGNORECASE)
|
180
|
+
str.gsub(regexp, '')
|
179
181
|
end
|
180
182
|
|
181
183
|
# +str+ のなかでUnicode数値文字参照で表記された絵文字をメール送信用JISコードに変換する
|
data/lib/jpmobile/filter.rb
CHANGED
@@ -40,6 +40,9 @@ module Jpmobile
|
|
40
40
|
# 内部コードから外部コードに変換
|
41
41
|
def after(controller, options = {})
|
42
42
|
if apply_outgoing?(controller) and controller.response.body.is_a?(String)
|
43
|
+
if controller.request.mobile?
|
44
|
+
options.merge!(:charset => controller.request.mobile.default_charset)
|
45
|
+
end
|
43
46
|
controller.response.body = to_external(controller.response.body, options)
|
44
47
|
end
|
45
48
|
end
|
@@ -64,7 +67,9 @@ module Jpmobile
|
|
64
67
|
|
65
68
|
doc = convert_text_content(doc)
|
66
69
|
|
67
|
-
doc.to_html.gsub("\xc2\xa0"," ")
|
70
|
+
html = doc.to_html.gsub("\xc2\xa0"," ")
|
71
|
+
html = html.gsub(/charset=[a-z0-9\-]+/i, "charset=#{options[:charset]}") if options[:charset]
|
72
|
+
html
|
68
73
|
end
|
69
74
|
end
|
70
75
|
|
@@ -58,6 +58,16 @@ module Jpmobile::Mobile
|
|
58
58
|
false
|
59
59
|
end
|
60
60
|
|
61
|
+
# Jpmobile::Rack::Filter を適用するかどうか
|
62
|
+
def apply_filter?
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
# Jpmobile::Rack::ParamsFilter を適用するかどうか
|
67
|
+
def apply_params_filter?
|
68
|
+
true
|
69
|
+
end
|
70
|
+
|
61
71
|
# エンコーディング変換用
|
62
72
|
def to_internal(str)
|
63
73
|
str
|
@@ -7,6 +7,16 @@ module Jpmobile::Mobile
|
|
7
7
|
# 対応するUser-Agentの正規表現
|
8
8
|
USER_AGENT_REGEXP = /iPhone/
|
9
9
|
|
10
|
+
# Jpmobile::Rack::Filter を適用する
|
11
|
+
def apply_filter?
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
# Jpmobile::Rack::ParamsFilter を適用する
|
16
|
+
def apply_params_filter?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
10
20
|
# 文字コード変換
|
11
21
|
def to_internal(str)
|
12
22
|
# 絵文字を数値参照に変換
|
data/lib/jpmobile/rack/filter.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# 出力変換
|
3
|
+
require 'scanf'
|
4
|
+
|
3
5
|
module Jpmobile
|
4
6
|
module Rack
|
5
7
|
class Filter
|
@@ -13,7 +15,7 @@ module Jpmobile
|
|
13
15
|
|
14
16
|
status, env, response = @app.call(env)
|
15
17
|
|
16
|
-
if mobile and env['Content-Type'] =~ %r!text/html|application/xhtml\+xml!
|
18
|
+
if mobile and mobile.apply_filter? and env['Content-Type'] =~ %r!text/html|application/xhtml\+xml!
|
17
19
|
type, charset = env['Content-Type'].split(/;\s*charset=/)
|
18
20
|
|
19
21
|
body = response_to_body(response)
|
@@ -25,6 +27,17 @@ module Jpmobile
|
|
25
27
|
if type and charset
|
26
28
|
env['Content-Type'] = "#{type}; charset=#{charset}"
|
27
29
|
end
|
30
|
+
elsif pc_emoticon?
|
31
|
+
body = response_to_body(response)
|
32
|
+
|
33
|
+
response = body.gsub(/&#x([0-9a-f]{4});/i) do |match|
|
34
|
+
img = @pc_emoticon_hash[$1.upcase] || (@pc_emoticon_hash[("%x" % ($1.scanf("%x").first - 0x1000)).upcase] rescue nil)
|
35
|
+
if img
|
36
|
+
"<img src=\"#{@@pc_emoticon_image_path}/#{img}.gif\" alt=\"#{img}\" />"
|
37
|
+
else
|
38
|
+
""
|
39
|
+
end
|
40
|
+
end
|
28
41
|
end
|
29
42
|
|
30
43
|
new_response = ::Rack::Response.new(response, status, env)
|
@@ -32,6 +45,25 @@ module Jpmobile
|
|
32
45
|
end
|
33
46
|
|
34
47
|
private
|
48
|
+
def pc_emoticon?
|
49
|
+
if @@pc_emoticon_yaml and File.exist?(@@pc_emoticon_yaml) and
|
50
|
+
@@pc_emoticon_image_path and FileTest.directory?(@@pc_emoticon_image_path)
|
51
|
+
|
52
|
+
unless @pc_emoticon_hash
|
53
|
+
begin
|
54
|
+
yaml_hash = YAML.load_file(@@pc_emoticon_yaml)
|
55
|
+
@pc_emoticon_hash = Hash[*(yaml_hash.values.inject([]){ |r, v| r += v.to_a.flatten; r})]
|
56
|
+
@@pc_emoticon_image_path.chop if @@pc_emoticon_image_path.match(/\/$/)
|
57
|
+
|
58
|
+
return true
|
59
|
+
rescue => ex
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
|
35
67
|
def response_to_body(response)
|
36
68
|
if response.respond_to?(:to_str)
|
37
69
|
response.to_str
|
@@ -45,6 +77,18 @@ module Jpmobile
|
|
45
77
|
body
|
46
78
|
end
|
47
79
|
end
|
80
|
+
|
81
|
+
@@pc_emoticon_image_path = nil
|
82
|
+
@@pc_emoticon_yaml = nil
|
83
|
+
class << self
|
84
|
+
def pc_emoticon_image_path=(path)
|
85
|
+
@@pc_emoticon_image_path = path
|
86
|
+
end
|
87
|
+
|
88
|
+
def pc_emoticon_yaml=(file)
|
89
|
+
@@pc_emoticon_yaml = file
|
90
|
+
end
|
91
|
+
end
|
48
92
|
end
|
49
93
|
end
|
50
94
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Jpmobile
|
2
|
+
module Sinatra
|
3
|
+
class Base < ::Sinatra::Base
|
4
|
+
# Calls the given block for every possible template file in views,
|
5
|
+
# named name.ext, where ext is registered on engine.
|
6
|
+
def find_template(views, name, engine)
|
7
|
+
if env['rack.jpmobile'] and !env['rack.jpmobile'].variants.empty?
|
8
|
+
env['rack.jpmobile'].variants.each do |variant|
|
9
|
+
yield ::File.join(views, "#{name}_#{variant}.#{@preferred_extension}")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -16,6 +16,9 @@ describe "絵文字が" do
|
|
16
16
|
|
17
17
|
@softbank_cr = ""
|
18
18
|
@softbank_utf8 = [0xf04a].pack("U")
|
19
|
+
|
20
|
+
@emoticon_yaml = File.join(File.expand_path(File.dirname(__FILE__)), "../../../tmp/emoticon.yml")
|
21
|
+
@emoticon_images = File.join(File.expand_path(File.dirname(__FILE__)), "../../../tmp/emoticons")
|
19
22
|
end
|
20
23
|
|
21
24
|
context "PC のとき" do
|
@@ -45,6 +48,55 @@ describe "絵文字が" do
|
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
51
|
+
context "PC で絵文字を変換するとき" do
|
52
|
+
before(:each) do
|
53
|
+
unless FileTest.exist?(File.join(File.expand_path(File.dirname(__FILE__)), '../../../tmp/emoticon.yaml')) and
|
54
|
+
FileTest.directory?(File.join(File.expand_path(File.dirname(__FILE__)), '../../../tmp/emoticons'))
|
55
|
+
pending "emoticon.yaml and emoticons directory don't exists"
|
56
|
+
end
|
57
|
+
|
58
|
+
@res = Rack::MockRequest.env_for("/", 'Content-Type' => 'text/html; charset=utf-8')
|
59
|
+
|
60
|
+
Jpmobile::Rack::Filter.pc_emoticon_yaml = "tmp/emoticon.yaml"
|
61
|
+
Jpmobile::Rack::Filter.pc_emoticon_image_path = @path = "tmp/emoticons"
|
62
|
+
end
|
63
|
+
|
64
|
+
after(:each) do
|
65
|
+
Jpmobile::Rack::Filter.pc_emoticon_yaml = nil
|
66
|
+
Jpmobile::Rack::Filter.pc_emoticon_image_path = nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "docomo 絵文字が画像に変換されること" do
|
70
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@docomo_cr))).call(@res)[2]
|
71
|
+
response_body(response).should == "<img src=\"#{@path}/sun.gif\" alt=\"sun\" />"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "docomo 絵文字コードの埋込みは変換されないこと" do
|
75
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@docomo_utf8))).call(@res)[2]
|
76
|
+
response_body(response).should == @docomo_utf8
|
77
|
+
end
|
78
|
+
|
79
|
+
it "au 絵文字が画像に変換されること" do
|
80
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@au_cr))).call(@res)[2]
|
81
|
+
response_body(response).should == "<img src=\"#{@path}/sun.gif\" alt=\"sun\" />"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "au 絵文字コードの埋込みは変換されないこと" do
|
85
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@au_utf8))).call(@res)[2]
|
86
|
+
response_body(response).should == @au_utf8
|
87
|
+
end
|
88
|
+
|
89
|
+
it "softbank 絵文字が画像に変換されること" do
|
90
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@softbank_cr))).call(@res)[2]
|
91
|
+
response_body(response).should == "<img src=\"#{@path}/sun.gif\" alt=\"sun\" />"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "softbank 絵文字コードの埋込みは変換されないこと" do
|
95
|
+
response = Jpmobile::Rack::MobileCarrier.new(Jpmobile::Rack::Filter.new(UnitApplication.new(@softbank_utf8))).call(@res)[2]
|
96
|
+
response_body(response).should == @softbank_utf8
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
48
100
|
context "docomo のとき" do
|
49
101
|
before(:each) do
|
50
102
|
@res = Rack::MockRequest.env_for(
|
data/spec/unit/emoticon_spec.rb
CHANGED
@@ -85,6 +85,10 @@ describe Jpmobile::Emoticon do
|
|
85
85
|
it "should not convert ascii string to unicodecr" do
|
86
86
|
Jpmobile::Emoticon.external_to_unicodecr_au_mail(utf8_to_jis("-------=_NextPart_15793_72254_63179")).should_not match(/e5c2/i)
|
87
87
|
end
|
88
|
+
|
89
|
+
it "should not include extra JIS escape sequence between Kanji-code and emoticon" do
|
90
|
+
Jpmobile::Emoticon.unicodecr_to_au_email(utf8_to_jis("掲示板")).should == Jpmobile::Util.ascii_8bit("\x1b\x24\x42\x75\x3a\x37\x47\x3C\x28\x48\x44\x1b\x28\x42")
|
91
|
+
end
|
88
92
|
end
|
89
93
|
end
|
90
94
|
end
|
data/spec/unit/encoding_spec.rb
CHANGED
@@ -59,7 +59,7 @@ describe "Jpmobile::Mobile" do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should convert emoticon  to \x75\x41 in B-Encoding" do
|
62
|
-
@mobile.to_mail_subject("ほげ").should == "=?ISO-2022-JP?B?
|
62
|
+
@mobile.to_mail_subject("ほげ").should == "=?ISO-2022-JP?B?GyRCJFskMnVBGyhC?="
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -69,7 +69,7 @@ describe "Jpmobile::Mobile" do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "should convert emoticon  to \x75\x41" do
|
72
|
-
ascii_8bit(@mobile.to_mail_body("ほげ")).should == ascii_8bit(
|
72
|
+
ascii_8bit(@mobile.to_mail_body("ほげ")).should == ascii_8bit(jis("\e\x24\x42\x24\x5B\x24\x32\x75\x41\x1b\x28\x42"))
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
data/spec/unit/mail_spec.rb
CHANGED
@@ -111,8 +111,8 @@ describe "Jpmobile::Mail" do
|
|
111
111
|
@mail.subject += ""
|
112
112
|
@mail.body = "#{@mail.body}"
|
113
113
|
|
114
|
-
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape("=?ISO-2022-JP?B?
|
115
|
-
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\
|
114
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape("=?ISO-2022-JP?B?GyRCS3xNVXVBGyhC?=")))
|
115
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\e\x24\x42\x24\x5B\x24\x32\x75\x41\e\x28\x42"))))
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
@@ -105,7 +105,7 @@ describe "Jpmobile::Mail#receive" do
|
|
105
105
|
end
|
106
106
|
|
107
107
|
it "should encode correctly" do
|
108
|
-
ascii_8bit(@mail.to_s).should match(Regexp.escape("
|
108
|
+
ascii_8bit(@mail.to_s).should match(Regexp.escape("GyRCJUYlOSVIdk8bKEI="))
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
@@ -201,23 +201,23 @@ describe "Jpmobile::Mail#receive" do
|
|
201
201
|
|
202
202
|
context "to_s" do
|
203
203
|
it "should have subject which is same as original" do
|
204
|
-
ascii_8bit(@mail.to_s).should match(Regexp.escape("
|
204
|
+
ascii_8bit(@mail.to_s).should match(Regexp.escape("GyRCQmpMPnZeGyhC"))
|
205
205
|
end
|
206
206
|
|
207
207
|
it "should have body which is same as original" do
|
208
|
-
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit(
|
208
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\e\x24\x42\x4B\x5C\x4A\x38\x76\x7D\e\x28\x42"))))
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
212
212
|
context "modify and to_s" do
|
213
213
|
it "should encode subject correctly" do
|
214
214
|
@mail.subject = "大江戸"
|
215
|
-
ascii_8bit(@mail.to_s).should match(
|
215
|
+
ascii_8bit(@mail.to_s).should match(/\?GyRCQmc5PjhNdUEbKEI=/)
|
216
216
|
end
|
217
217
|
|
218
218
|
it "should encode body correctly" do
|
219
219
|
@mail.body = "会議が開催"
|
220
|
-
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\x1b\x24\x42\x32\x71\x35\x44\x24\x2C\x33\x2B\x3A\x45\
|
220
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\x1b\x24\x42\x32\x71\x35\x44\x24\x2C\x33\x2B\x3A\x45\x75\x48\x1b\x28\x42"))))
|
221
221
|
end
|
222
222
|
end
|
223
223
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= link_to 'リンク', '#' -%>
|
@@ -163,7 +163,7 @@ describe MobileMailer do
|
|
163
163
|
|
164
164
|
raw_mail = ascii_8bit(email.to_s)
|
165
165
|
raw_mail.should match(/For au/)
|
166
|
-
raw_mail.should match(Regexp.escape("
|
166
|
+
raw_mail.should match(Regexp.escape("GyRCRnxLXDhsQmpMPnZeGyhC"))
|
167
167
|
raw_mail.should match(Regexp.compile(ascii_8bit("\x76\x21")))
|
168
168
|
end
|
169
169
|
|
@@ -215,6 +215,11 @@ describe "jpmobile integration spec" do
|
|
215
215
|
end
|
216
216
|
it_should_behave_like "Shift_JISで通信する端末との通信(半角変換付き)"
|
217
217
|
it_should_behave_like "hankaku_filter :input => true のとき"
|
218
|
+
|
219
|
+
it "Content-Type が Shift_JIS であること" do
|
220
|
+
get "/#{@controller}/with_charset", {}, {"HTTP_USER_AGENT" => @user_agent}
|
221
|
+
body.should match(/Shift_JIS/)
|
222
|
+
end
|
218
223
|
end
|
219
224
|
|
220
225
|
describe HankakuInputFilterController, "SoftBank 910T からのアクセス" do
|
@@ -225,5 +230,10 @@ describe "jpmobile integration spec" do
|
|
225
230
|
end
|
226
231
|
it_should_behave_like "UTF-8で通信する端末との通信(半角変換付き)"
|
227
232
|
it_should_behave_like "hankaku_filter :input => true のとき"
|
233
|
+
|
234
|
+
it "Content-Type が UTF-8 であること" do
|
235
|
+
get "/#{@controller}/with_charset", {}, {"HTTP_USER_AGENT" => @user_agent}
|
236
|
+
body.should match(/UTF-8/)
|
237
|
+
end
|
228
238
|
end
|
229
239
|
end
|
data/test/sinatra/guestbook.rb
CHANGED
@@ -1,26 +1,25 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'sinatra'
|
3
|
-
require 'jpmobile'
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/jpmobile')
|
4
4
|
require 'jpmobile/rack'
|
5
5
|
require 'singleton'
|
6
6
|
require 'pp'
|
7
7
|
|
8
|
-
require 'jpmobile'
|
9
|
-
require 'jpmobile/rack'
|
8
|
+
require 'jpmobile/sinatra'
|
10
9
|
|
11
10
|
class SinatraTestHelper
|
12
11
|
include Singleton
|
13
12
|
attr_accessor :last_app
|
14
13
|
end
|
15
14
|
|
16
|
-
class Guestbook < Sinatra::Base
|
15
|
+
class Guestbook < Jpmobile::Sinatra::Base
|
17
16
|
use Jpmobile::Rack::MobileCarrier
|
18
17
|
use Jpmobile::Rack::ParamsFilter
|
19
18
|
use Jpmobile::Rack::Filter
|
20
19
|
|
21
20
|
def call(env)
|
22
21
|
_dup = dup
|
23
|
-
SinatraTestHelper.instance.last_app = _dup
|
22
|
+
::SinatraTestHelper.instance.last_app = _dup
|
24
23
|
_dup.call!(env)
|
25
24
|
end
|
26
25
|
|
@@ -35,6 +34,8 @@ class Guestbook < Sinatra::Base
|
|
35
34
|
post '/' do
|
36
35
|
@p = params[:p]
|
37
36
|
end
|
38
|
-
end
|
39
37
|
|
40
|
-
|
38
|
+
get '/top' do
|
39
|
+
erb :index
|
40
|
+
end
|
41
|
+
end
|
@@ -36,4 +36,14 @@ class SinatraOnJpmobile < Test::Unit::TestCase
|
|
36
36
|
assert_equal last_app.assigns(:p), "けーたい"
|
37
37
|
assert_equal last_response.body, utf8_to_sjis("けーたい")
|
38
38
|
end
|
39
|
+
|
40
|
+
# def test_view_selector_pc
|
41
|
+
# get '/top', {}, {"HTTP_USER_AGENT" => "Mozilla"}
|
42
|
+
# assert_equal last_response.body, 'PC'
|
43
|
+
# end
|
44
|
+
|
45
|
+
# def test_view_selector_mobile
|
46
|
+
# get '/top', {}, {"HTTP_USER_AGENT" => "DoCoMo/2.0 SH902i(c100;TB;W24H12)"}
|
47
|
+
# assert_equal last_response.body, 'MOBILE'
|
48
|
+
# end
|
39
49
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
PC
|
@@ -0,0 +1 @@
|
|
1
|
+
MOBILE
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jpmobile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-09-
|
13
|
+
date: 2011-09-26 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: jeweler
|
17
|
-
requirement: &
|
17
|
+
requirement: &17414220 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,43 +22,43 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *17414220
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rails
|
28
|
-
requirement: &
|
28
|
+
requirement: &17413700 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.0.
|
33
|
+
version: 3.0.10
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *17413700
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &17413200 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ~>
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: 2.6.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *17413200
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rspec-rails
|
50
|
-
requirement: &
|
50
|
+
requirement: &17412720 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 2.6.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *17412720
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: webrat
|
61
|
-
requirement: &
|
61
|
+
requirement: &17412240 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *17412240
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: geokit
|
72
|
-
requirement: &
|
72
|
+
requirement: &17387000 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *17387000
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: sqlite3-ruby
|
83
|
-
requirement: &
|
83
|
+
requirement: &17386520 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *17386520
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: hpricot
|
94
|
-
requirement: &
|
94
|
+
requirement: &17386040 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *17386040
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: jeweler
|
105
|
-
requirement: &
|
105
|
+
requirement: &17385560 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,10 +110,10 @@ dependencies:
|
|
110
110
|
version: 1.5.1
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *17385560
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rspec
|
116
|
-
requirement: &
|
116
|
+
requirement: &17385080 !ruby/object:Gem::Requirement
|
117
117
|
none: false
|
118
118
|
requirements:
|
119
119
|
- - ! '>='
|
@@ -121,10 +121,10 @@ dependencies:
|
|
121
121
|
version: 2.3.0
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
|
-
version_requirements: *
|
124
|
+
version_requirements: *17385080
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec-rails
|
127
|
-
requirement: &
|
127
|
+
requirement: &17384600 !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|
130
130
|
- - ! '>='
|
@@ -132,10 +132,10 @@ dependencies:
|
|
132
132
|
version: 2.3.0
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
|
-
version_requirements: *
|
135
|
+
version_requirements: *17384600
|
136
136
|
- !ruby/object:Gem::Dependency
|
137
137
|
name: webrat
|
138
|
-
requirement: &
|
138
|
+
requirement: &17384120 !ruby/object:Gem::Requirement
|
139
139
|
none: false
|
140
140
|
requirements:
|
141
141
|
- - ! '>='
|
@@ -143,10 +143,10 @@ dependencies:
|
|
143
143
|
version: 0.7.2
|
144
144
|
type: :development
|
145
145
|
prerelease: false
|
146
|
-
version_requirements: *
|
146
|
+
version_requirements: *17384120
|
147
147
|
- !ruby/object:Gem::Dependency
|
148
148
|
name: geokit
|
149
|
-
requirement: &
|
149
|
+
requirement: &17383620 !ruby/object:Gem::Requirement
|
150
150
|
none: false
|
151
151
|
requirements:
|
152
152
|
- - ! '>='
|
@@ -154,10 +154,10 @@ dependencies:
|
|
154
154
|
version: 1.5.0
|
155
155
|
type: :development
|
156
156
|
prerelease: false
|
157
|
-
version_requirements: *
|
157
|
+
version_requirements: *17383620
|
158
158
|
- !ruby/object:Gem::Dependency
|
159
159
|
name: sqlite3-ruby
|
160
|
-
requirement: &
|
160
|
+
requirement: &17383100 !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
163
|
- - ! '>='
|
@@ -165,10 +165,10 @@ dependencies:
|
|
165
165
|
version: 1.3.2
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
|
-
version_requirements: *
|
168
|
+
version_requirements: *17383100
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: hpricot
|
171
|
-
requirement: &
|
171
|
+
requirement: &17382580 !ruby/object:Gem::Requirement
|
172
172
|
none: false
|
173
173
|
requirements:
|
174
174
|
- - ! '>='
|
@@ -176,10 +176,10 @@ dependencies:
|
|
176
176
|
version: 0.8.3
|
177
177
|
type: :development
|
178
178
|
prerelease: false
|
179
|
-
version_requirements: *
|
179
|
+
version_requirements: *17382580
|
180
180
|
- !ruby/object:Gem::Dependency
|
181
181
|
name: git
|
182
|
-
requirement: &
|
182
|
+
requirement: &17381980 !ruby/object:Gem::Requirement
|
183
183
|
none: false
|
184
184
|
requirements:
|
185
185
|
- - ! '>='
|
@@ -187,10 +187,10 @@ dependencies:
|
|
187
187
|
version: 1.2.5
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
|
-
version_requirements: *
|
190
|
+
version_requirements: *17381980
|
191
191
|
- !ruby/object:Gem::Dependency
|
192
192
|
name: rails
|
193
|
-
requirement: &
|
193
|
+
requirement: &17381380 !ruby/object:Gem::Requirement
|
194
194
|
none: false
|
195
195
|
requirements:
|
196
196
|
- - ! '>='
|
@@ -198,7 +198,7 @@ dependencies:
|
|
198
198
|
version: 3.0.3
|
199
199
|
type: :development
|
200
200
|
prerelease: false
|
201
|
-
version_requirements: *
|
201
|
+
version_requirements: *17381380
|
202
202
|
description: A Rails plugin for Japanese mobile-phones
|
203
203
|
email: dara@shidara.net
|
204
204
|
executables: []
|
@@ -259,6 +259,7 @@ files:
|
|
259
259
|
- lib/jpmobile/rails.rb
|
260
260
|
- lib/jpmobile/request_with_mobile.rb
|
261
261
|
- lib/jpmobile/resolver.rb
|
262
|
+
- lib/jpmobile/sinatra.rb
|
262
263
|
- lib/jpmobile/trans_sid.rb
|
263
264
|
- lib/jpmobile/util.rb
|
264
265
|
- lib/tasks/jpmobile_tasks.rake
|
@@ -326,7 +327,9 @@ files:
|
|
326
327
|
- test/rails/overrides/app/views/hankaku_filter/index.html.erb
|
327
328
|
- test/rails/overrides/app/views/hankaku_input_filter/index.html.erb
|
328
329
|
- test/rails/overrides/app/views/hankaku_input_filter/index_xhtml.html.erb
|
330
|
+
- test/rails/overrides/app/views/hankaku_input_filter/with_charset.html.erb
|
329
331
|
- test/rails/overrides/app/views/layouts/application_mobile.html.erb
|
332
|
+
- test/rails/overrides/app/views/layouts/with_charset.html.erb
|
330
333
|
- test/rails/overrides/app/views/layouts/xhtml.html.erb
|
331
334
|
- test/rails/overrides/app/views/links/au_gps.html.erb
|
332
335
|
- test/rails/overrides/app/views/links/au_location.html.erb
|
@@ -398,8 +401,11 @@ files:
|
|
398
401
|
- test/rails/overrides/spec/requests/template_path_spec.rb
|
399
402
|
- test/rails/overrides/spec/requests/trans_sid_spec.rb
|
400
403
|
- test/rails/overrides/spec/spec_helper.rb
|
404
|
+
- test/sinatra/config.ru
|
401
405
|
- test/sinatra/guestbook.rb
|
402
406
|
- test/sinatra/test/filter_test.rb
|
407
|
+
- test/sinatra/views/index.erb
|
408
|
+
- test/sinatra/views/index_mobile.erb
|
403
409
|
- tools/emoji/genregexp.rb
|
404
410
|
- tools/generate_au_emoticon_table.rb
|
405
411
|
- tools/generate_docomo_emoticon_table.rb
|