jpmobile 0.0.8 → 0.1.0.pre
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/.gitignore +0 -3
- data/{spec/spec.opts → .rspec} +1 -2
- data/README.rdoc +122 -128
- data/Rakefile +23 -101
- data/VERSION.yml +4 -3
- data/jpmobile.gemspec +130 -182
- data/lib/jpmobile.rb +37 -24
- data/lib/jpmobile/docomo_guid.rb +2 -1
- data/lib/jpmobile/email.rb +3 -4
- data/lib/jpmobile/emoticon.rb +2 -6
- data/lib/jpmobile/encoding.rb +29 -0
- data/lib/jpmobile/filter.rb +42 -134
- data/lib/jpmobile/helpers.rb +5 -18
- data/lib/jpmobile/hook_action_controller.rb +24 -16
- data/lib/jpmobile/hook_action_view.rb +28 -89
- data/lib/jpmobile/mobile/abstract_mobile.rb +21 -4
- data/lib/jpmobile/mobile/android.rb +10 -0
- data/lib/jpmobile/mobile/au.rb +28 -3
- data/lib/jpmobile/mobile/ddipocket.rb +12 -0
- data/lib/jpmobile/mobile/display.rb +29 -26
- data/lib/jpmobile/mobile/docomo.rb +38 -12
- data/lib/jpmobile/mobile/iphone.rb +26 -0
- data/lib/jpmobile/mobile/smart_phone.rb +21 -0
- data/lib/jpmobile/mobile/softbank.rb +16 -41
- data/lib/jpmobile/mobile/vodafone.rb +17 -0
- data/lib/jpmobile/mobile/willcom.rb +1 -10
- data/lib/jpmobile/mobile/windows_phone.rb +10 -0
- data/lib/jpmobile/position.rb +4 -3
- data/lib/jpmobile/rack.rb +43 -0
- data/lib/jpmobile/rack/filter.rb +51 -0
- data/lib/jpmobile/rack/mobile_carrier.rb +33 -0
- data/lib/jpmobile/rack/params_filter.rb +47 -0
- data/lib/jpmobile/rails.rb +22 -0
- data/lib/jpmobile/request_with_mobile.rb +8 -12
- data/lib/jpmobile/trans_sid.rb +44 -26
- data/lib/jpmobile/util.rb +68 -0
- data/{tasks → lib/tasks}/jpmobile_tasks.rake +32 -13
- data/spec/rack/jpmobile/android_spec.rb +20 -0
- data/spec/rack/jpmobile/au_spec.rb +206 -0
- data/spec/rack/jpmobile/docomo_spec.rb +237 -0
- data/spec/rack/jpmobile/emoticon_spec.rb +215 -0
- data/spec/rack/jpmobile/filter_spec.rb +181 -0
- data/spec/rack/jpmobile/iphone_spec.rb +32 -0
- data/spec/rack/jpmobile/mobile_by_ua_spec.rb +39 -0
- data/spec/rack/jpmobile/params_filter_spec.rb +193 -0
- data/spec/rack/jpmobile/softbank_spec.rb +123 -0
- data/spec/rack/jpmobile/willcom_spec.rb +67 -0
- data/spec/rack/jpmobile/windows_phone.rb +20 -0
- data/spec/rack_helper.rb +86 -0
- data/spec/spec_helper.rb +3 -2
- data/spec/unit/detect_by_email_spec.rb +21 -27
- data/spec/unit/is_carrier_spec.rb +56 -84
- data/spec/unit/spec_helper.rb +1 -2
- data/spec/unit/util_spec.rb +2 -2
- data/spec/unit/valid_ip_spec.rb +43 -52
- data/test/legacy/autoload_test.rb +1 -3
- data/test/legacy/emoticon_test.rb +5 -6
- data/test/legacy/helper.rb +0 -71
- data/test/rails/overrides/.rspec +5 -0
- data/test/rails/overrides/Gemfile +32 -0
- data/test/rails/overrides/app/controllers/docomo_guid_always_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/docomo_guid_base_controller.rb +5 -0
- data/test/rails/overrides/app/controllers/docomo_guid_docomo_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/filter_controller.rb +0 -34
- data/test/rails/overrides/app/controllers/filter_controller_base.rb +19 -0
- data/test/rails/overrides/app/controllers/hankaku_filter_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/links_controller.rb +28 -0
- data/test/rails/overrides/app/controllers/mobile_spec_controller.rb +1 -1
- data/test/rails/overrides/app/controllers/template_path_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/trans_sid_always_and_session_off_controller.rb +4 -0
- data/test/rails/overrides/app/controllers/trans_sid_always_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/trans_sid_base_controller.rb +18 -0
- data/test/rails/overrides/app/controllers/trans_sid_mobile_controller.rb +3 -0
- data/test/rails/overrides/app/controllers/trans_sid_none_controller.rb +3 -0
- data/test/rails/overrides/app/views/links/au_gps.html.erb +1 -0
- data/test/rails/overrides/app/views/links/au_location.html.erb +1 -0
- data/test/rails/overrides/app/views/links/docomo_foma_gps.html.erb +1 -0
- data/test/rails/overrides/app/views/links/docomo_openiarea.html.erb +1 -0
- data/test/rails/overrides/app/views/links/docomo_utn.html.erb +1 -0
- data/test/rails/overrides/app/views/links/link.html.erb +1 -0
- data/test/rails/overrides/app/views/links/show_all.html.erb +1 -0
- data/test/rails/overrides/app/views/links/softbank_location.html.erb +1 -0
- data/test/rails/overrides/app/views/links/willcom_location.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/_partial_smart_phone.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/_partial_smart_phone_iphone.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/index_smart_phone.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/index_smart_phone_iphone.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/show_mobile.html.erb +1 -0
- data/test/rails/overrides/app/views/template_path/show_mobile_docomo.html.erb +1 -0
- data/test/rails/overrides/autotest/discover.rb +2 -0
- data/test/rails/overrides/config/initializers/jpmobile_generator.rb +1 -0
- data/test/rails/overrides/config/routes.rb +58 -0
- data/test/rails/overrides/db/migrate/001_add_sessions_table.rb +16 -0
- data/test/rails/overrides/spec/helpers/helpers_spec.rb +2 -2
- data/test/rails/overrides/spec/{controllers → requests}/docomo_guid_spec.rb +37 -14
- data/test/rails/overrides/spec/{controllers → requests}/docomo_spec.rb +11 -8
- data/test/rails/overrides/spec/{controllers → requests}/emobile_spec.rb +24 -8
- data/test/rails/overrides/spec/requests/filter_spec.rb +171 -0
- data/test/rails/overrides/spec/requests/helpers_spec.rb +187 -0
- data/test/rails/overrides/spec/requests/pc_spec.rb +22 -0
- data/test/rails/overrides/spec/requests/softbank_emulator_spec.rb +21 -0
- data/test/rails/overrides/spec/requests/template_path_spec.rb +234 -0
- data/test/rails/overrides/spec/requests/trans_sid_spec.rb +142 -0
- data/test/rails/overrides/spec/spec_helper.rb +17 -48
- data/test/sinatra/guestbook.rb +40 -0
- data/test/sinatra/test/filter_test.rb +39 -0
- metadata +185 -312
- data/lib/jpmobile/hook_request.rb +0 -5
- data/lib/jpmobile/rack/auth.rb +0 -55
- data/lib/jpmobile/rack/combined_logger.rb +0 -54
- data/lib/jpmobile/rack/request.rb +0 -7
- data/lib/jpmobile/rack/trans_sid.rb +0 -14
- data/lib/jpmobile/version.rb +0 -9
- data/spec/unit/detect_by_ua_spec.rb +0 -40
- data/test/legacy/au_test.rb +0 -173
- data/test/legacy/docomo_test.rb +0 -187
- data/test/legacy/emoticon_functional_test.rb +0 -195
- data/test/legacy/filter_test.rb +0 -34
- data/test/legacy/helpers_test.rb +0 -217
- data/test/legacy/softbank_test.rb +0 -183
- data/test/legacy/willcom_test.rb +0 -56
- data/test/rails/2.3.2/spec/controllers/trans_sid_spec.rb +0 -99
- data/test/rails/overrides/app/controllers/docomo_guid_controller.rb +0 -13
- data/test/rails/overrides/app/controllers/trans_sid_controller.rb +0 -28
- data/test/rails/overrides/lib/tasks/rspec.rake +0 -165
- data/test/rails/overrides/spec/controllers/filter_spec.rb +0 -159
- data/test/rails/overrides/spec/controllers/pc_spec.rb +0 -13
- data/test/rails/overrides/spec/controllers/softbank_emulator_spec.rb +0 -42
- data/test/rails/overrides/spec/controllers/template_path_spec.rb +0 -117
- data/test/rails/overrides/spec/controllers/trans_sid_spec.rb +0 -117
- data/test/rails/overrides/spec/rspec.rake +0 -165
- data/test/rails/overrides/spec/spec.opts +0 -4
data/.gitignore
CHANGED
data/{spec/spec.opts → .rspec}
RENAMED
data/README.rdoc
CHANGED
|
@@ -1,74 +1,68 @@
|
|
|
1
1
|
= jpmobile: A Rails plugin for Japanese mobile-phones
|
|
2
2
|
|
|
3
3
|
== jpmobileとは
|
|
4
|
-
携帯電話特有の機能を Rails で利用するためのプラグイン。
|
|
4
|
+
携帯電話特有の機能を Rails や Rack middleware で利用するためのプラグイン。
|
|
5
5
|
以下の機能を備える。
|
|
6
6
|
|
|
7
7
|
* 携帯電話のキャリア判別
|
|
8
8
|
* 端末位置情報の取得
|
|
9
|
+
* GeoKit(http://geokit.rubyforge.org)との連携
|
|
9
10
|
* 端末製造番号、契約者番号等の取得
|
|
10
11
|
* IPアドレスの検証(キャリアが公開しているIPアドレス帯域からのアクセスか判定)
|
|
11
|
-
* セッションIDをフォーム/リンクに付与(Trans SID)
|
|
12
|
-
* 携帯電話ビューへの自動振分け
|
|
13
12
|
* ディスプレイ情報(画面サイズ、ブラウザ画面サイズ、カラー・白黒、色数)の取得
|
|
14
|
-
* GeoKit(http://geokit.rubyforge.org)との連携
|
|
15
13
|
* 文字コード変換機能/絵文字のキャリア間相互変換
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
開発版:
|
|
22
|
-
% ./script/plugin install git://github.com/jpmobile/jpmobile.git
|
|
23
|
-
|
|
24
|
-
==== gemでインストールする場合
|
|
25
|
-
|
|
26
|
-
# gem install jpmobile -v 0.0.8
|
|
27
|
-
としてgemをインストールした後
|
|
28
|
-
|
|
29
|
-
RAILS_ROOT/config/environment.rb の Rails::Initializer.run do |config| 〜 end 内に
|
|
30
|
-
config.gem "jpmobile"
|
|
31
|
-
の行を追加する。
|
|
32
|
-
|
|
33
|
-
=== Rails 2.3.2
|
|
34
|
-
==== pluginとしてインストールする場合
|
|
35
|
-
|
|
36
|
-
リリース版: (Version 0.0.6)
|
|
37
|
-
% git clone git://github.com/jpmobile/jpmobile.git vendor/plugins/jpmobile
|
|
38
|
-
% cd vendor/plugins/jpmobile
|
|
39
|
-
% git checkout 0.0.6
|
|
40
|
-
% rm -rf .git
|
|
15
|
+
また Rails に以下の機能を追加する
|
|
16
|
+
* ビューへの自動振分け
|
|
17
|
+
* 位置情報取得などのリンクヘルパーの追加
|
|
18
|
+
* セッションIDをフォーム/リンクに付与(Trans SID)
|
|
41
19
|
|
|
20
|
+
== インストール
|
|
42
21
|
開発版:
|
|
43
22
|
% ./script/plugin install git://github.com/jpmobile/jpmobile.git
|
|
44
23
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# gem install jpmobile -v 0.0.8
|
|
48
|
-
としてgemをインストールした後
|
|
24
|
+
== 使用例
|
|
49
25
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
の行を追加する。
|
|
26
|
+
=== 携帯電話の識別
|
|
27
|
+
環境変数 env['rack.jpmobile'] にキャリアクラスのインスタンスが格納されています。また Rack::Request#mobile としても取得可能です。
|
|
53
28
|
|
|
54
|
-
|
|
55
|
-
リリース版:
|
|
56
|
-
% git clone git://github.com/jpmobile/jpmobile.git vendor/plugins/jpmobile
|
|
57
|
-
% cd vendor/plugins/jpmobile
|
|
58
|
-
% git checkout 0.0.5
|
|
59
|
-
% rm -rf .git
|
|
29
|
+
==== キャリアの識別
|
|
60
30
|
|
|
61
|
-
|
|
31
|
+
case request.mobile
|
|
32
|
+
when Jpmobile::Mobile::Docomo
|
|
33
|
+
# for DoCoMo
|
|
34
|
+
when Jpmobile::Mobile::Au
|
|
35
|
+
# for au
|
|
36
|
+
when Jpmobile::Mobile::Softbank
|
|
37
|
+
# for SoftBank
|
|
38
|
+
when Jpmobile::Mobile::Willcom
|
|
39
|
+
# for Willcom
|
|
40
|
+
when Jpmobile::Mobile::Emobile
|
|
41
|
+
# for EMOBILE
|
|
42
|
+
else
|
|
43
|
+
# for PC
|
|
44
|
+
end
|
|
62
45
|
|
|
63
|
-
|
|
46
|
+
あるいは
|
|
47
|
+
if request.mobile.is_a?(Jpmobile::Mobile::Docomo)
|
|
48
|
+
# for DoCoMo
|
|
49
|
+
end
|
|
64
50
|
|
|
65
|
-
====
|
|
51
|
+
==== ビューの中で一部を切替える例
|
|
66
52
|
<% if request.mobile? %>
|
|
67
53
|
携帯電話からのアクセスです。
|
|
68
54
|
<% else %>
|
|
69
55
|
携帯電話からのアクセスではありません。
|
|
70
56
|
<% end %>
|
|
71
57
|
|
|
58
|
+
<% if request.smart_phone? %>
|
|
59
|
+
スマートフォンからのアクセスです。
|
|
60
|
+
<% else %>
|
|
61
|
+
スマートフォンからのアクセスではありません。
|
|
62
|
+
<% end %>
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
72
66
|
==== 別に用意した携帯電話用コントローラへリダイレクトする例
|
|
73
67
|
class PcController < ApplicationController
|
|
74
68
|
before_filter :redirect_if_mobile
|
|
@@ -82,6 +76,10 @@ RAILS_ROOT/config/environment.rb の Rails::Initializer.run do |config| 〜 end
|
|
|
82
76
|
pa = params.dup
|
|
83
77
|
pa[:controller] = "/mobile"
|
|
84
78
|
redirect_to pa
|
|
79
|
+
elsif request.smart_phone?
|
|
80
|
+
pa = params.dup
|
|
81
|
+
pa[:controller] = "/smart_phone"
|
|
82
|
+
redirect_to pa
|
|
85
83
|
end
|
|
86
84
|
end
|
|
87
85
|
end
|
|
@@ -90,57 +88,19 @@ RAILS_ROOT/config/environment.rb の Rails::Initializer.run do |config| 〜 end
|
|
|
90
88
|
mobile_filter
|
|
91
89
|
end
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
=== 携帯電話viewの自動振分け
|
|
95
|
-
DoCoMo携帯電話からアクセスすると、
|
|
96
|
-
* index_mobile_docomo.html.erb
|
|
97
|
-
* index_mobile.html.erb
|
|
98
|
-
* index.html.erb
|
|
99
|
-
の順でテンプレートを検索し、最初に見付かったテンプレートが利用される。
|
|
100
|
-
Auの場合は、index_mobile_au.html.erb、Softbankの場合はindex_mobile_softbank.html.erbが最初に検索される。
|
|
101
|
-
|
|
102
|
-
BUG: 現状、上記の例では index.html.erb が存在しない場合に振り分けが行われない(ダミーファイルを置くことで回避可能)。
|
|
103
|
-
|
|
104
|
-
==== キャリアの識別
|
|
105
|
-
|
|
106
|
-
case request.mobile
|
|
107
|
-
when Jpmobile::Mobile::Docomo
|
|
108
|
-
# for DoCoMo
|
|
109
|
-
when Jpmobile::Mobile::Au
|
|
110
|
-
# for au
|
|
111
|
-
when Jpmobile::Mobile::Softbank
|
|
112
|
-
# for SoftBank
|
|
113
|
-
when Jpmobile::Mobile::Willcom
|
|
114
|
-
# for Willcom
|
|
115
|
-
when Jpmobile::Mobile::Emobile
|
|
116
|
-
# for EMOBILE
|
|
117
|
-
else
|
|
118
|
-
# for PC
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
あるいは
|
|
122
|
-
if request.mobile.is_a?(Jpmobile::Mobile::Docomo)
|
|
123
|
-
# for DoCoMo
|
|
124
|
-
end
|
|
125
|
-
|
|
126
91
|
=== 位置情報の取得
|
|
92
|
+
Rack::Request#mobile.position に位置情報が格納されます。
|
|
127
93
|
|
|
128
|
-
|
|
94
|
+
@latitude = request.mobile.position.lat
|
|
95
|
+
@longuitude = request.mobile.position.lon
|
|
129
96
|
|
|
130
|
-
|
|
131
|
-
<%= get_position_link_to(:action=>:gps) %>
|
|
97
|
+
==== GeoKit(http://geokit.rubyforge.org)との連携
|
|
132
98
|
|
|
133
|
-
|
|
99
|
+
vandor/plugins/geokit以下にGeoKitがインストールされていると、Jpmobile::PositionにGeoKit::Mappableがincludeされる。したがって、
|
|
134
100
|
|
|
135
|
-
|
|
136
|
-
def gps
|
|
137
|
-
if request.mobile && pos = request.mobile.position
|
|
138
|
-
@latitude = pos.lat
|
|
139
|
-
@longuitude = pos.lon
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
101
|
+
request.mobile.position.distance_to('札幌駅')
|
|
143
102
|
|
|
103
|
+
とすることで、端末と「札幌駅」との距離を求めることができる。詳細は http://geokit.rubyforge.org/api/index.html 参照。
|
|
144
104
|
|
|
145
105
|
=== 端末情報の取得
|
|
146
106
|
|
|
@@ -159,58 +119,42 @@ BUG: 現状、上記の例では index.html.erb が存在しない場合に振
|
|
|
159
119
|
=== IPの検証
|
|
160
120
|
キャリアが公開しているIPアドレス帯域からのアクセスか判定する。
|
|
161
121
|
request.mobile.valid_ip?
|
|
162
|
-
|
|
163
|
-
=== セッションIDの付与(Trans SID)
|
|
164
|
-
==== Cookie非対応携帯だけに付与する
|
|
165
|
-
class MyController
|
|
166
|
-
trans_sid
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
==== PCにも付与する
|
|
170
|
-
class MyController
|
|
171
|
-
trans_sid :always
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
trans_sid 機能を使う場合には cookie session store を使用することができません。
|
|
175
|
-
trans_sid を使用する際には、例えば config/initializers/session_store.rb で
|
|
176
|
-
ActionController::Base.session_store = :active_record_store
|
|
177
|
-
として active_record_store を使用します。
|
|
178
|
-
このとき ApplicationController において protect_from_forgery の :secret を指定するか、
|
|
179
|
-
あるいは protect_from_forgery を解除する必要があるでしょう。
|
|
180
|
-
|
|
181
|
-
また、
|
|
182
|
-
link_to "hoge", "/controller/action/id"
|
|
183
|
-
のようにリンク先を直接指定するとセッションIDは付加されません。
|
|
184
|
-
link_to "hoge", :controller => "controller", :action => "action", :id => "id"
|
|
185
|
-
のように指定する必要があります。
|
|
186
|
-
|
|
122
|
+
ただしスマートフォンの場合は必ずfalseとなる。
|
|
187
123
|
|
|
188
124
|
=== 端末の画面サイズ
|
|
189
125
|
request.mobile.display で Jpmobile::Display クラスのインスタンスが返る。
|
|
190
126
|
画面幅 <%= request.mobile.display.width %>
|
|
191
127
|
画面高さ <%= request.mobile.display.height %>
|
|
192
128
|
|
|
193
|
-
===
|
|
129
|
+
=== 文字コード変換機能/絵文字のキャリア間相互変換
|
|
194
130
|
|
|
195
|
-
|
|
131
|
+
jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。
|
|
196
132
|
|
|
197
|
-
|
|
133
|
+
* Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。
|
|
198
134
|
|
|
199
|
-
|
|
135
|
+
# Rack middleware を追加するメソッド
|
|
136
|
+
Rails.application.config.jpmobile.mobile_fiter
|
|
200
137
|
|
|
201
|
-
|
|
138
|
+
* Sinatra の場合は下記のように指定する。
|
|
202
139
|
|
|
203
|
-
|
|
204
|
-
|
|
140
|
+
$LOAD_PATH << './lib/jpmobile/lib'
|
|
141
|
+
require 'jpmobile'
|
|
142
|
+
require 'jpmobile/rack'
|
|
205
143
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
144
|
+
use Jpmobile::Rack::MobileCarrier
|
|
145
|
+
use Jpmobile::Rack::ParamsFilter
|
|
146
|
+
use Jpmobile::Rack::Filter
|
|
147
|
+
|
|
148
|
+
get '/' do
|
|
149
|
+
erb :index
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
Rails のみ半角・全角の自動変換フィルターが用意されている。用いるには
|
|
209
153
|
|
|
210
|
-
また、半角・全角の自動変換を用いる場合は
|
|
211
154
|
class MyController
|
|
212
155
|
mobile_filter :hankaku=>true
|
|
213
156
|
end
|
|
157
|
+
|
|
214
158
|
と指定する。
|
|
215
159
|
|
|
216
160
|
Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマッピングされ、管理される。
|
|
@@ -221,22 +165,72 @@ Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマ
|
|
|
221
165
|
絵文字は送出時に内蔵の変換表に基づいて変換され、携帯電話のエンコーディングにあわせて送出される。
|
|
222
166
|
携帯電話から受信した絵文字は上記マッピングに基づいてUTF-8でparamsに渡される。
|
|
223
167
|
|
|
224
|
-
mobile_filterを有効にすると以下の処理が自動で行われる。
|
|
225
168
|
* DoCoMo、Auとの通信時にはShift_JIS、SoftBankとの通信時にはUTF-8が使用される。
|
|
226
169
|
* :hankaku=>true指定時は、カタカナは半角カナに変換されて送出される。携帯電話から送られた半角カナは全角カナに変換される。
|
|
227
170
|
* 絵文字はキャリアにあわせて変換されて送出される。
|
|
228
171
|
* 携帯電話からの絵文字はUnicode私的領域にマップされ、UTF-8でparamsに格納される。
|
|
229
172
|
|
|
173
|
+
=== ビューの自動振分け
|
|
174
|
+
DoCoMo携帯電話からアクセスすると、
|
|
175
|
+
* index_mobile_docomo.html.erb
|
|
176
|
+
* index_mobile.html.erb
|
|
177
|
+
* index.html.erb
|
|
178
|
+
の順でテンプレートを検索し、最初に見付かったテンプレートが利用される。
|
|
179
|
+
Auの場合は、index_mobile_au.html.erb、Softbankの場合はindex_mobile_softbank.html.erbが最初に検索される。
|
|
180
|
+
|
|
181
|
+
またiPhoneからアクセスすると、
|
|
182
|
+
* index_smart_phone_iphone.html.erb
|
|
183
|
+
* index_smart_phone.html.erb
|
|
184
|
+
* index.html.erb
|
|
185
|
+
の順でテンプレートを検索する。
|
|
186
|
+
Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合はindex_smart_phone_windows_phone.html.erbが最初に検索される。
|
|
187
|
+
|
|
188
|
+
携帯専用サイトであれば、index.html.erbがなくとも問題ない。
|
|
189
|
+
|
|
190
|
+
=== 位置情報の取得用リンクの生成
|
|
191
|
+
|
|
192
|
+
以下のようなコードで、端末に位置情報を要求するリンクを出力する。
|
|
193
|
+
<%= get_position_link_to(:action=>:gps) %>
|
|
194
|
+
|
|
195
|
+
=== セッションIDの付与(Trans SID)
|
|
196
|
+
==== Cookie非対応携帯だけに付与する
|
|
197
|
+
class MyController
|
|
198
|
+
trans_sid
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
==== PCにも付与する
|
|
202
|
+
class MyController
|
|
203
|
+
trans_sid :always
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
trans_sid 機能を使う場合には cookie session store を使用することができません。
|
|
207
|
+
また Rails 3.0 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。
|
|
208
|
+
trans_sid を使用する際には、例えば config/initializers/session_store.rb で
|
|
209
|
+
|
|
210
|
+
Rails.application.config.session_store :active_record_store
|
|
211
|
+
Rails.application.config.session_options = {:cookie_only => false}
|
|
212
|
+
|
|
213
|
+
として active_record_store を使用するように設定し、:cookie_only => false として Cookie を優先しないように設定します。
|
|
214
|
+
このとき ApplicationController において protect_from_forgery の :secret を指定するか、
|
|
215
|
+
あるいは protect_from_forgery を解除する必要があるでしょう。
|
|
216
|
+
|
|
217
|
+
また、
|
|
218
|
+
link_to "hoge", "/controller/action/id"
|
|
219
|
+
のようにリンク先を直接指定するとセッションIDは付加されません。
|
|
220
|
+
link_to "hoge", :controller => "controller", :action => "action", :id => "id"
|
|
221
|
+
のように指定する必要があります。
|
|
222
|
+
|
|
230
223
|
== テストに必要なgemパッケージ
|
|
231
224
|
テストを実行するためには以下のgemパッケージが必要です。
|
|
232
225
|
* rails (include rack)
|
|
233
226
|
* sqlite3-ruby
|
|
234
|
-
*
|
|
235
|
-
* hpricot
|
|
227
|
+
* nokogiri
|
|
236
228
|
* rspec
|
|
237
229
|
* rspec-rails
|
|
238
230
|
* rspec-fixture
|
|
231
|
+
* rack-test
|
|
239
232
|
* mocha
|
|
233
|
+
* geokit
|
|
240
234
|
|
|
241
235
|
== リンク
|
|
242
236
|
|
data/Rakefile
CHANGED
|
@@ -2,40 +2,35 @@ require 'rubygems'
|
|
|
2
2
|
require 'rake'
|
|
3
3
|
require 'rake/clean'
|
|
4
4
|
require 'rake/testtask'
|
|
5
|
-
require 'rake/packagetask'
|
|
6
|
-
require 'rake/gempackagetask'
|
|
7
5
|
require 'rake/rdoctask'
|
|
8
|
-
require 'rake/contrib/rubyforgepublisher'
|
|
9
6
|
require 'fileutils'
|
|
10
7
|
include FileUtils
|
|
11
|
-
require File.join(File.dirname(__FILE__), 'lib', 'jpmobile', 'version')
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
9
|
+
begin
|
|
10
|
+
require 'jeweler'
|
|
11
|
+
Jeweler::Tasks.new do |gem|
|
|
12
|
+
gem.name = "jpmobile"
|
|
13
|
+
gem.summary = "A Rails plugin for Japanese mobile-phones"
|
|
14
|
+
gem.description = "A Rails plugin for Japanese mobile-phones"
|
|
15
|
+
gem.email = "dara@shidara.net"
|
|
16
|
+
gem.homepage = "http://github.com/jpmobile/jpmobile"
|
|
17
|
+
gem.authors = ["Yoji Shidara", "Shin-ichiro OGAWA"]
|
|
18
|
+
|
|
19
|
+
gem.test_files.exclude 'test/rails/rails_root'
|
|
20
|
+
|
|
21
|
+
gem.add_development_dependency('rspec', '>=1.3.0')
|
|
22
|
+
gem.add_development_dependency('rspec-rails', '>=1.3.2')
|
|
23
|
+
gem.add_development_dependency('rspec-fixture', '>=0.0.2')
|
|
24
|
+
gem.add_development_dependency('jeweler', '>=1.4.0')
|
|
25
|
+
end
|
|
26
|
+
rescue LoadError
|
|
27
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
|
28
|
+
end
|
|
29
|
+
Jeweler::GemcutterTasks.new
|
|
34
30
|
|
|
35
31
|
desc 'Default: run unit tests.'
|
|
36
32
|
task :default => :test
|
|
37
33
|
|
|
38
|
-
|
|
39
34
|
desc 'Generate documentation for the jpmobile plugin.'
|
|
40
35
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
41
36
|
rdoc.rdoc_dir = 'doc'
|
|
@@ -46,58 +41,6 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
|
46
41
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
47
42
|
end
|
|
48
43
|
|
|
49
|
-
spec =
|
|
50
|
-
Gem::Specification.new do |s|
|
|
51
|
-
s.name = NAME
|
|
52
|
-
s.version = VERS
|
|
53
|
-
s.platform = Gem::Platform::RUBY
|
|
54
|
-
s.has_rdoc = true
|
|
55
|
-
s.extra_rdoc_files = ["README.rdoc", "CHANGELOG"]
|
|
56
|
-
s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
|
|
57
|
-
s.summary = DESCRIPTION
|
|
58
|
-
s.description = DESCRIPTION
|
|
59
|
-
s.author = AUTHOR
|
|
60
|
-
s.email = EMAIL
|
|
61
|
-
s.homepage = HOMEPATH
|
|
62
|
-
s.executables = BIN_FILES
|
|
63
|
-
s.rubyforge_project = RUBYFORGE_PROJECT
|
|
64
|
-
s.bindir = "bin"
|
|
65
|
-
s.require_path = "lib"
|
|
66
|
-
|
|
67
|
-
s.add_runtime_dependency('actionpack', '>=2.3.8')
|
|
68
|
-
s.add_development_dependency('rspec', '>=1.3.0')
|
|
69
|
-
s.add_development_dependency('rspec-rails', '>=1.3.2')
|
|
70
|
-
s.add_development_dependency('rspec-fixture', '>=0.0.2')
|
|
71
|
-
|
|
72
|
-
s.files = %w(README.rdoc CHANGELOG Rakefile) +
|
|
73
|
-
Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
|
|
74
|
-
Dir.glob("ext/**/*.{h,c,rb}") +
|
|
75
|
-
Dir.glob("examples/**/*.rb") +
|
|
76
|
-
Dir.glob("tools/*.rb")
|
|
77
|
-
|
|
78
|
-
# s.extensions = FileList["ext/**/extconf.rb"].to_a
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
Rake::GemPackageTask.new(spec) do |p|
|
|
82
|
-
p.need_tar = true
|
|
83
|
-
p.gem_spec = spec
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
task :install do
|
|
87
|
-
name = "#{NAME}-#{VERS}.gem"
|
|
88
|
-
sh %{rake package}
|
|
89
|
-
sh %{sudo gem install pkg/#{name}}
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
task :uninstall => [:clean] do
|
|
93
|
-
sh %{sudo gem uninstall #{NAME}}
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
desc "Publish the API documentation"
|
|
97
|
-
task :pdoc => [:rdoc] do
|
|
98
|
-
sh "rsync -azv --delete doc/ dara@rubyforge.org:/var/www/gforge-projects/jpmobile/rdoc/"
|
|
99
|
-
end
|
|
100
|
-
|
|
101
44
|
desc "Update misc tables"
|
|
102
45
|
task :update do
|
|
103
46
|
Dir.glob("tools/update_*.rb").each do |path|
|
|
@@ -105,26 +48,5 @@ task :update do
|
|
|
105
48
|
end
|
|
106
49
|
end
|
|
107
50
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
puts "-"*40
|
|
111
|
-
puts "rubyforge add_release #{NAME} #{NAME} #{VERS} pkg/#{NAME}-#{VERS}.gem"
|
|
112
|
-
puts "git tag #{VERS}"
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
task :test => ['test:legacy', 'spec:unit', 'test:rails']
|
|
116
|
-
load 'tasks/jpmobile_tasks.rake'
|
|
117
|
-
|
|
118
|
-
begin
|
|
119
|
-
require 'jeweler'
|
|
120
|
-
Jeweler::Tasks.new do |gemspec|
|
|
121
|
-
gemspec.name = "jpmobile"
|
|
122
|
-
gemspec.summary = %q{A Rails plugin for Japanese mobile-phones}
|
|
123
|
-
gemspec.description = %q{A Rails plugin for Japanese mobile-phones}
|
|
124
|
-
gemspec.email = %q{dara@shidara.net}
|
|
125
|
-
gemspec.homepage = %q{http://github.com/jpmobile/jpmobile}
|
|
126
|
-
gemspec.authors = ["Yoji Shidara", "Shin-ichiro OGAWA"]
|
|
127
|
-
end
|
|
128
|
-
rescue LoadError
|
|
129
|
-
puts "Jeweler not available. Install it with: gem install jeweler"
|
|
130
|
-
end
|
|
51
|
+
task :test => ['test:legacy', 'spec:unit', 'spec:rack', 'test:rails']
|
|
52
|
+
load 'lib/tasks/jpmobile_tasks.rake'
|