jpmobile 0.0.3 → 0.0.4

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 (94) hide show
  1. data/CHANGELOG +4 -0
  2. data/README +8 -5
  3. data/Rakefile +6 -7
  4. data/lib/jpmobile.rb +12 -2
  5. data/lib/jpmobile/email.rb +19 -0
  6. data/lib/jpmobile/filter.rb +1 -15
  7. data/lib/jpmobile/helpers.rb +76 -34
  8. data/lib/jpmobile/hook_action_controller.rb +1 -0
  9. data/lib/jpmobile/hook_action_view.rb +79 -28
  10. data/lib/jpmobile/mobile/abstract_mobile.rb +13 -1
  11. data/lib/jpmobile/mobile/au.rb +2 -0
  12. data/lib/jpmobile/mobile/docomo.rb +3 -1
  13. data/lib/jpmobile/mobile/emobile.rb +2 -0
  14. data/lib/jpmobile/mobile/softbank.rb +7 -1
  15. data/lib/jpmobile/mobile/willcom.rb +4 -0
  16. data/lib/jpmobile/mobile/z_display_info_docomo.rb +85 -2
  17. data/lib/jpmobile/mobile/z_ip_addresses_au.rb +40 -25
  18. data/lib/jpmobile/mobile/z_ip_addresses_docomo.rb +3 -1
  19. data/lib/jpmobile/mobile/z_ip_addresses_willcom.rb +97 -76
  20. data/lib/jpmobile/position.rb +8 -2
  21. data/lib/jpmobile/request_with_mobile.rb +1 -1
  22. data/lib/jpmobile/util.rb +21 -0
  23. data/lib/jpmobile/version.rb +1 -1
  24. data/test/au_test.rb +1 -1
  25. data/tools/update_display_info_docomo.rb +1 -0
  26. data/tools/update_ip_addresses_willcom.rb +2 -1
  27. metadata +36 -82
  28. data/doc/classes/ActionController.html +0 -120
  29. data/doc/classes/ActionController/AbstractRequest.html +0 -118
  30. data/doc/classes/ActionController/CgiRequest.html +0 -160
  31. data/doc/classes/ActionView.html +0 -101
  32. data/doc/classes/DatumConv.html +0 -324
  33. data/doc/classes/Jpmobile/Display.html +0 -333
  34. data/doc/classes/Jpmobile/Emoticon.html +0 -467
  35. data/doc/classes/Jpmobile/Filter.html +0 -120
  36. data/doc/classes/Jpmobile/Filter/ApplyOnlyForMobile.html +0 -172
  37. data/doc/classes/Jpmobile/Filter/Base.html +0 -269
  38. data/doc/classes/Jpmobile/Filter/Emoticon.html +0 -118
  39. data/doc/classes/Jpmobile/Filter/Emoticon/Inner.html +0 -184
  40. data/doc/classes/Jpmobile/Filter/Emoticon/Outer.html +0 -207
  41. data/doc/classes/Jpmobile/Filter/FilterTable.html +0 -178
  42. data/doc/classes/Jpmobile/Filter/HankakuKana.html +0 -126
  43. data/doc/classes/Jpmobile/Filter/Sjis.html +0 -271
  44. data/doc/classes/Jpmobile/Helpers.html +0 -588
  45. data/doc/classes/Jpmobile/Mobile.html +0 -150
  46. data/doc/classes/Jpmobile/Mobile/AbstractMobile.html +0 -389
  47. data/doc/classes/Jpmobile/Mobile/Au.html +0 -420
  48. data/doc/classes/Jpmobile/Mobile/Ddipocket.html +0 -138
  49. data/doc/classes/Jpmobile/Mobile/Docomo.html +0 -411
  50. data/doc/classes/Jpmobile/Mobile/Emobile.html +0 -183
  51. data/doc/classes/Jpmobile/Mobile/Jphone.html +0 -212
  52. data/doc/classes/Jpmobile/Mobile/Softbank.html +0 -344
  53. data/doc/classes/Jpmobile/Mobile/Vodafone.html +0 -176
  54. data/doc/classes/Jpmobile/Mobile/Willcom.html +0 -211
  55. data/doc/classes/Jpmobile/Position.html +0 -384
  56. data/doc/classes/Jpmobile/RequestWithMobile.html +0 -263
  57. data/doc/created.rid +0 -1
  58. data/doc/files/CHANGELOG.html +0 -110
  59. data/doc/files/README.html +0 -455
  60. data/doc/files/lib/jpmobile/datum_conv_rb.html +0 -110
  61. data/doc/files/lib/jpmobile/emoticon/au_rb.html +0 -124
  62. data/doc/files/lib/jpmobile/emoticon/conversion_table_rb.html +0 -124
  63. data/doc/files/lib/jpmobile/emoticon/docomo_rb.html +0 -119
  64. data/doc/files/lib/jpmobile/emoticon/softbank_rb.html +0 -119
  65. data/doc/files/lib/jpmobile/emoticon/z_combine_rb.html +0 -101
  66. data/doc/files/lib/jpmobile/emoticon_rb.html +0 -101
  67. data/doc/files/lib/jpmobile/filter_rb.html +0 -115
  68. data/doc/files/lib/jpmobile/helpers_rb.html +0 -105
  69. data/doc/files/lib/jpmobile/hook_abstract_request_rb.html +0 -108
  70. data/doc/files/lib/jpmobile/hook_action_controller_rb.html +0 -101
  71. data/doc/files/lib/jpmobile/hook_action_view_rb.html +0 -110
  72. data/doc/files/lib/jpmobile/mobile/abstract_mobile_rb.html +0 -108
  73. data/doc/files/lib/jpmobile/mobile/au_rb.html +0 -112
  74. data/doc/files/lib/jpmobile/mobile/display_rb.html +0 -111
  75. data/doc/files/lib/jpmobile/mobile/docomo_rb.html +0 -105
  76. data/doc/files/lib/jpmobile/mobile/emobile_rb.html +0 -105
  77. data/doc/files/lib/jpmobile/mobile/softbank_rb.html +0 -115
  78. data/doc/files/lib/jpmobile/mobile/willcom_rb.html +0 -108
  79. data/doc/files/lib/jpmobile/mobile/z_display_info_docomo_rb.html +0 -114
  80. data/doc/files/lib/jpmobile/mobile/z_ip_addresses_au_rb.html +0 -114
  81. data/doc/files/lib/jpmobile/mobile/z_ip_addresses_docomo_rb.html +0 -124
  82. data/doc/files/lib/jpmobile/mobile/z_ip_addresses_emobile_rb.html +0 -111
  83. data/doc/files/lib/jpmobile/mobile/z_ip_addresses_softbank_rb.html +0 -124
  84. data/doc/files/lib/jpmobile/mobile/z_ip_addresses_willcom_rb.html +0 -114
  85. data/doc/files/lib/jpmobile/position_rb.html +0 -105
  86. data/doc/files/lib/jpmobile/request_with_mobile_rb.html +0 -111
  87. data/doc/files/lib/jpmobile/trans_sid_rb.html +0 -118
  88. data/doc/files/lib/jpmobile/version_rb.html +0 -101
  89. data/doc/files/lib/jpmobile_rb.html +0 -101
  90. data/doc/fr_class_index.html +0 -55
  91. data/doc/fr_file_index.html +0 -58
  92. data/doc/fr_method_index.html +0 -134
  93. data/doc/index.html +0 -24
  94. data/doc/rdoc-style.css +0 -208
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.0.3x 2008-09-26
2
+
3
+ * メールアドレスからキャリアを判定する機能追加
4
+
1
5
  == 0.0.1 2007-06-16
2
6
 
3
7
  * Initial release
data/README CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  == インストール
18
18
 
19
- === svnレポジトリからインストールする場合
19
+ === pluginとしてインストールする場合
20
20
 
21
21
  リリース版:
22
22
  % ./script/plugin install http://jpmobile.rubyforge.org/svn/tags/rel-x.x.x/jpmobile
@@ -29,6 +29,7 @@
29
29
 
30
30
  # gem install jpmobile
31
31
  としてgemをインストールした後
32
+
32
33
  RAILS_ROOT/config/environment.rb の Rails::Initializer.run do |config| 〜 end 内に
33
34
  config.gem "jpmobile"
34
35
  の行を追加する。
@@ -98,7 +99,7 @@ BUG: 現状、上記の例では index.rhtml が存在しない場合に振り
98
99
  when Jpmobile::Mobile::Willcom
99
100
  # for Willcom
100
101
  when Jpmobile::Mobile::Emobile
101
- # for Willcom
102
+ # for EMOBILE
102
103
  else
103
104
  # for PC
104
105
  end
@@ -129,15 +130,15 @@ BUG: 現状、上記の例では index.rhtml が存在しない場合に振り
129
130
 
130
131
  === 端末情報の取得
131
132
 
132
- 端末側から通知されている場合、request.ident で
133
+ 端末側から通知されている場合、request.mobile.ident で
133
134
  契約に固有の識別子もしくは端末の製造番号を取得できる。
134
135
  両方存在する場合は契約に固有のIDが優先される。
135
136
 
136
- * 契約に固有のID (request.ident_subscriber)
137
+ * 契約に固有のID (request.mobile.ident_subscriber)
137
138
  * au: EZ番号(サブスクライバ番号)
138
139
  * DoCoMo: FOMAカード製造番号
139
140
  * EMOBILE: EMnet対応端末から通知されるユニークなユーザID
140
- * 端末製造番号 (request.ident_device)
141
+ * 端末製造番号 (request.mobile.ident_device)
141
142
  * DoCoMo: 端末製造番号(FOMA, MOVA)
142
143
  * SoftBank: 製造番号
143
144
 
@@ -203,6 +204,8 @@ mobile_filterを有効にすると以下の処理が自動で行われる。
203
204
  * rails
204
205
  * rack
205
206
  * hpricot
207
+ * rspec
208
+ * rspec-rails
206
209
  * spec-fixtures
207
210
 
208
211
  == リンク
data/Rakefile CHANGED
@@ -29,7 +29,7 @@ RDOC_OPTS = ['--quiet', '--title', "jpmobile documentation",
29
29
  "--inline-source"]
30
30
 
31
31
  desc "Packages up jpmobile gem."
32
- task :default => [:test, 'spec:unit']
32
+ task :default => [:test, :spec]
33
33
  task :package => [:clean]
34
34
 
35
35
  desc 'Default: run unit tests.'
@@ -70,10 +70,10 @@ spec =
70
70
  s.bindir = "bin"
71
71
  s.require_path = "lib"
72
72
 
73
- s.add_dependency('actionpack', '>=2.1.0')
74
-
75
- #s.add_dependency('activesupport', '>=1.3.1')
76
- #s.required_ruby_version = '>= 1.8.2'
73
+ s.add_runtime_dependency('actionpack', '>=2.2.2')
74
+ s.add_development_dependency('rspec', '>=1.1.12')
75
+ s.add_development_dependency('rspec-rails', '>=1.1.12')
76
+ s.add_development_dependency('rspec-fixture', '>=0.0.2')
77
77
 
78
78
  s.files = %w(README CHANGELOG Rakefile) +
79
79
  Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
@@ -101,7 +101,7 @@ end
101
101
 
102
102
  desc "Publish the API documentation"
103
103
  task :pdoc => [:rdoc] do
104
- Rake::SshDirPublisher.new("dara@rubyforge.org", "/var/www/gforge-projects/jpmobile/rdoc", "doc").upload
104
+ sh "rsync -azv --delete doc/ dara@rubyforge.org:/var/www/gforge-projects/jpmobile/rdoc/"
105
105
  end
106
106
 
107
107
  desc "Update misc tables"
@@ -120,5 +120,4 @@ end
120
120
 
121
121
  # setup RSpec tasks
122
122
  RAILS_ROOT = '.'
123
- load 'vendor/plugins/rspec-rails/tasks/rspec.rake'
124
123
  load 'tasks/jpmobile_tasks.rake'
@@ -1,9 +1,11 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
2
2
 
3
3
  module Jpmobile
4
+ autoload :Email , 'jpmobile/email'
4
5
  autoload :Emoticon, 'jpmobile/emoticon'
5
6
  autoload :Position, 'jpmobile/position'
6
7
  autoload :RequestWithMobile, 'jpmobile/request_with_mobile'
8
+ autoload :Util, 'jpmobile/util'
7
9
 
8
10
  module Mobile
9
11
  autoload :Docomo, 'jpmobile/mobile/docomo'
@@ -14,6 +16,14 @@ module Jpmobile
14
16
  autoload :Emobile, 'jpmobile/mobile/emobile'
15
17
  autoload :Willcom, 'jpmobile/mobile/willcom'
16
18
  autoload :Ddipocket, 'jpmobile/mobile/willcom'
19
+
20
+ def self.carriers
21
+ @carriers ||= constants
22
+ end
23
+
24
+ def self.carriers=(ary)
25
+ @carriers = ary
26
+ end
17
27
  end
18
28
  end
19
29
 
@@ -26,7 +36,7 @@ end
26
36
  end
27
37
 
28
38
  if defined? RAILS_ENV
29
- Dir[File.expand_path(File.join(File.dirname(__FILE__), 'jpmobile/*.rb'))].sort.each { |lib|
30
- require lib
39
+ Dir[File.expand_path(File.join(File.dirname(__FILE__), 'jpmobile/*.rb'))].sort.each { |lib|
40
+ require lib
31
41
  }
32
42
  end
@@ -0,0 +1,19 @@
1
+ # =メールアドレスモジュール
2
+ #
3
+ module Jpmobile
4
+ # email関連の処理
5
+ module Email
6
+
7
+ # メールアドレスよりキャリア情報を取得する
8
+ # _param1_:: email メールアドレス
9
+ # return :: Jpmobile::Mobileで定義されている携帯キャリアクラス
10
+ def self.detect(email)
11
+ Jpmobile::Mobile.carriers.each do |const|
12
+ c = Jpmobile::Mobile.const_get(const)
13
+ return c if c::MAIL_ADDRESS_REGEXP && email =~ c::MAIL_ADDRESS_REGEXP
14
+ end
15
+ nil
16
+ end
17
+
18
+ end
19
+ end
@@ -33,7 +33,7 @@ module Jpmobile
33
33
  @counter += 1
34
34
  return unless @counter == 1
35
35
  if respond_to?(:to_internal) && apply_incoming?(controller)
36
- deep_each(controller.params) do |value|
36
+ Util.deep_apply(controller.params) do |value|
37
37
  value = to_internal(value, controller)
38
38
  end
39
39
  end
@@ -51,20 +51,6 @@ module Jpmobile
51
51
  def apply_incoming?(controller); true; end
52
52
  # 出力時(response.body)にこのフィルタを適用するべきか
53
53
  def apply_outgoing?(controller); true; end
54
- private
55
- # ハッシュ等をなめる。
56
- def deep_each(obj, &proc)
57
- if obj.is_a? Hash
58
- obj.each_pair do |key, value|
59
- obj[key] = deep_each(value, &proc)
60
- end
61
- elsif obj.is_a? Array
62
- obj.collect!{|value| deep_each(value, &proc)}
63
- elsif not (obj==nil || obj.is_a?(TrueClass) || obj.is_a?(FalseClass))
64
- obj = obj.to_param if obj.respond_to?(:to_param)
65
- proc.call(obj)
66
- end
67
- end
68
54
  end
69
55
 
70
56
  # 携帯電話の場合にのみ適用したい場合に Jpmobile::Base の派生クラスに include する。
@@ -13,8 +13,11 @@ module Jpmobile
13
13
  options = str
14
14
  str = nil
15
15
  end
16
- options = options.symbolize_keys
17
- show_all = options.delete(:show_all)
16
+ show_all = nil
17
+ if options.is_a?(Hash)
18
+ options = options.symbolize_keys
19
+ show_all = options.delete(:show_all)
20
+ end
18
21
 
19
22
  # TODO: コード汚い
20
23
  s = []
@@ -38,22 +41,30 @@ module Jpmobile
38
41
  if show_all || request.mobile.instance_of?(Mobile::Willcom)
39
42
  s << willcom_location_link_to(str||"Willcom", options)
40
43
  end
41
- return s.join("<br />\n")
44
+ return s.join("<br>\n")
42
45
  end
43
46
 
44
47
  # DoCoMo FOMAでGPS位置情報を取得するためのリンクを返す。
45
48
  def docomo_foma_gps_link_to(str, options={})
46
- options = options.symbolize_keys
47
- options[:only_path] = false
48
- return %{<a href="#{url_for(options)}" lcs>#{str}</a>}
49
+ url = options
50
+ if options.is_a?(Hash)
51
+ options = options.symbolize_keys
52
+ options[:only_path] = false
53
+ url = url_for(options)
54
+ end
55
+ return %{<a href="#{url}" lcs>#{str}</a>}
49
56
  end
50
57
 
51
58
  # DoCoMoでオープンiエリアを取得するためのURLを返す。
52
59
  def docomo_openiarea_url_for(options={})
53
- options = options.symbolize_keys
54
- options[:only_path] = false
55
- posinfo = options.delete(:posinfo) || "1" # 基地局情報を元に測位した緯度経度情報を要求 
56
- "http://w1m.docomo.ne.jp/cp/iarea?ecode=OPENAREACODE&msn=OPENAREAKEY&posinfo=#{posinfo}&nl=#{CGI.escape(url_for(options))}"
60
+ url = options
61
+ if options.is_a?(Hash)
62
+ options = options.symbolize_keys
63
+ options[:only_path] = false
64
+ posinfo = options.delete(:posinfo) || "1" # 基地局情報を元に測位した緯度経度情報を要求
65
+ url = url_for(options)
66
+ end
67
+ return "http://w1m.docomo.ne.jp/cp/iarea?ecode=OPENAREACODE&msn=OPENAREAKEY&posinfo=#{posinfo}&nl=#{CGI.escape(url)}"
57
68
  end
58
69
 
59
70
  # DoCoMoでオープンiエリアを取得するためのリンクを返す。
@@ -63,25 +74,39 @@ module Jpmobile
63
74
 
64
75
  # DoCoMoで端末製造番号等を取得するためのリンクを返す。
65
76
  def docomo_utn_link_to(str, options={})
66
- options = options.symbolize_keys
67
- options[:only_path] = false
68
- return %{<a href="#{url_for(options)}" utn>#{str}</a>}
77
+ url = options
78
+ if options.is_a?(Hash)
79
+ options = options.symbolize_keys
80
+ options[:only_path] = false
81
+ url = url_for(options)
82
+ end
83
+ return %{<a href="#{url}" utn>#{str}</a>}
69
84
  end
70
85
 
71
86
  # DoCoMoでiモードIDを取得するためのリンクを返す。
72
87
  def docomo_guid_link_to(str, options={})
73
- options = options.symbolize_keys
74
- options[:guid] = "ON"
75
- link_to_url(str, url_for(options))
88
+ url = options
89
+ if options.is_a?(Hash)
90
+ options = options.symbolize_keys
91
+ options[:guid] = "ON"
92
+ url = url_for(options)
93
+ end
94
+ return link_to_url(str, url)
76
95
  end
77
96
 
78
97
  # au GPS位置情報を取得するためのURLを返す。
79
98
  def au_gps_url_for(options={})
80
- options = options.symbolize_keys
81
- options[:only_path] = false
82
- datum = (options.delete(:datum) || 0 ).to_i # 0:wgs84, 1:tokyo
83
- unit = (options.delete(:unit) || 0 ).to_i # 0:dms, 1:deg
84
- "device:gpsone?url=#{CGI.escape(url_for(options))}&ver=1&datum=#{datum}&unit=#{unit}&acry=0&number=0"
99
+ url = options
100
+ datum = 0 # 0:wgs84, 1:tokyo
101
+ unit = 0 # 0:dms, 1:deg
102
+ if options.is_a?(Hash)
103
+ options = options.symbolize_keys
104
+ options[:only_path] = false
105
+ datum = (options.delete(:datum) || 0 ).to_i # 0:wgs84, 1:tokyo
106
+ unit = (options.delete(:unit) || 0 ).to_i # 0:dms, 1:deg
107
+ url = url_for(options)
108
+ end
109
+ return "device:gpsone?url=#{CGI.escape(url)}&ver=1&datum=#{datum}&unit=#{unit}&acry=0&number=0"
85
110
  end
86
111
 
87
112
  # au GPS位置情報を取得するためのリンクを返す。
@@ -91,9 +116,13 @@ module Jpmobile
91
116
 
92
117
  # au 簡易位置情報を取得するためのURLを返す。
93
118
  def au_location_url_for(options={})
94
- options = options.symbolize_keys
95
- options[:only_path] = false
96
- "device:location?url=#{CGI.escape(url_for(options))}"
119
+ url = options
120
+ if options.is_a?(Hash)
121
+ options = options.symbolize_keys
122
+ options[:only_path] = false
123
+ url = url_for(options)
124
+ end
125
+ return "device:location?url=#{CGI.escape(url)}"
97
126
  end
98
127
 
99
128
  # au 簡易位置情報を取得するためのリンクを返す。
@@ -103,17 +132,26 @@ module Jpmobile
103
132
 
104
133
  # J-PHONE 位置情報 (基地局) を取得するためのリンクを返す。
105
134
  def jphone_location_link_to(str,options={})
106
- options = options.symbolize_keys
107
- options[:only_path] = false
108
- return %{<a z href="#{url_for(options)}">#{str}</a>}
135
+ url = options
136
+ if options.is_a?(Hash)
137
+ options = options.symbolize_keys
138
+ options[:only_path] = false
139
+ url = url_for(options)
140
+ end
141
+ return %{<a z href="#{url}">#{str}</a>}
109
142
  end
110
143
 
111
144
  # Softbank(含むVodafone 3G)で位置情報を取得するためのURLを返す。
112
145
  def softbank_location_url_for(options={})
113
- options = options.symbolize_keys
114
- options[:only_path] = false
115
- mode = options[:mode] || "auto"
116
- "location:#{mode}?url=#{url_for(options)}"
146
+ url = options
147
+ mode = "auto"
148
+ if options.is_a?(Hash)
149
+ options = options.symbolize_keys
150
+ options[:only_path] = false
151
+ mode = options[:mode] || "auto"
152
+ url = url_for(options)
153
+ end
154
+ return "location:#{mode}?url=#{url}"
117
155
  end
118
156
 
119
157
  # Softbank(含むVodafone 3G)で位置情報を取得するためのリンクを返す。
@@ -123,9 +161,13 @@ module Jpmobile
123
161
 
124
162
  # Willcom 基地局位置情報を取得するためのURLを返す。
125
163
  def willcom_location_url_for(options={})
126
- options = options.symbolize_keys
127
- options[:only_path] = false
128
- "http://location.request/dummy.cgi?my=#{url_for(options)}&pos=$location"
164
+ url = options
165
+ if options.is_a?(Hash)
166
+ options = options.symbolize_keys
167
+ options[:only_path] = false
168
+ url = url_for(options)
169
+ end
170
+ return "http://location.request/dummy.cgi?my=#{url}&pos=$location"
129
171
  end
130
172
 
131
173
  # Willcom 基地局位置情報を取得するためのリンクを返す。
@@ -1,4 +1,5 @@
1
1
  class ActionController::Base
2
+ include Jpmobile::Helpers
2
3
  before_filter :gettext_force_ja_for_mobile
3
4
  # gettextが組み込まれている場合、携帯電話からのアクセスをjaロケールに強制する。
4
5
  def gettext_force_ja_for_mobile
@@ -8,6 +8,9 @@
8
8
  ActionView::Base.class_eval { include Jpmobile::Helpers }
9
9
  #:startdoc:
10
10
 
11
+ require 'action_pack'
12
+ require 'action_view'
13
+
11
14
  # ActionView::Base を拡張して携帯からのアクセスの場合に携帯向けビューを優先表示する。
12
15
  # Vodafone携帯(request.mobile == Jpmobile::Mobile::Vodafone)の場合、
13
16
  # index_mobile_vodafone.rhtml
@@ -19,51 +22,99 @@ ActionView::Base.class_eval { include Jpmobile::Helpers }
19
22
  # (ダミーファイルを置くことで回避可能)。
20
23
 
21
24
  class ActionView::Base #:nodoc:
22
- alias render_file_without_jpmobile render_file #:nodoc:
23
- alias render_partial_without_jpmobile render_partial #:nodoc:
25
+ delegate :default_url_options, :to => :controller unless respond_to?(:default_url_options)
24
26
 
25
- def render_file(template_path, use_full_path = true, local_assigns = {})
26
- mobile_path = mobile_template_path(template_path)
27
- return mobile_path.nil? ? render_file_without_jpmobile(template_path, use_full_path, local_assigns) :
28
- render_file_without_jpmobile(mobile_path, use_full_path, local_assigns)
29
- end
27
+ if ::ActionPack::VERSION::MAJOR >=2 and ::ActionPack::VERSION::MINOR >= 2
28
+ ### Rails 2.2 or higher
29
+ alias _pick_template_without_jpmobile _pick_template #:nodoc:
30
+ alias render_partial_without_jpmobile render_partial #:nodoc:
31
+
32
+ def _pick_template(template_path)
33
+ mobile_path = mobile_template_path(template_path)
34
+ return mobile_path.nil? ? _pick_template_without_jpmobile(template_path) :
35
+ _pick_template_without_jpmobile(mobile_path)
36
+ end
37
+
38
+ def render_partial(options = {}) #:nodoc:
39
+ case partial_path = options[:partial]
40
+ when String, Symbol, NilClass
41
+ mobile_path = mobile_template_path(partial_path, true)
42
+ options = options.merge(:partial => mobile_path) if mobile_path
43
+ end
44
+ render_partial_without_jpmobile(options)
45
+ end
46
+ else
47
+ ### Rails 2.1 or lower
48
+ alias render_file_without_jpmobile render_file #:nodoc:
49
+ alias render_partial_without_jpmobile render_partial #:nodoc:
50
+
51
+ def render_file(template_path, use_full_path = true, local_assigns = {})
52
+ mobile_path = mobile_template_path(template_path)
53
+ return mobile_path.nil? ? render_file_without_jpmobile(template_path, use_full_path, local_assigns) :
54
+ render_file_without_jpmobile(mobile_path, use_full_path, local_assigns)
55
+ end
30
56
 
31
- def render_partial(partial_path, object_assigns = nil, local_assigns = {}) #:nodoc:
32
- mobile_path = mobile_template_path(partial_path, true) if partial_path.class === "String"
33
- return mobile_path.nil? ? render_partial_without_jpmobile(partial_path, object_assigns, local_assigns) :
34
- render_partial_without_jpmobile(mobile_path, object_assigns, local_assigns)
57
+ def render_partial(partial_path, object_assigns = nil, local_assigns = {}) #:nodoc:
58
+ mobile_path = mobile_template_path(partial_path, true) if partial_path.class === "String"
59
+ return mobile_path.nil? ? render_partial_without_jpmobile(partial_path, object_assigns, local_assigns) :
60
+ render_partial_without_jpmobile(mobile_path, object_assigns, local_assigns)
61
+ end
35
62
  end
36
63
 
37
- def mobile_template_path(template_path, partial=false)
38
- if controller.is_a?(ActionController::Base) && m = controller.request.mobile
64
+ def mobile_template_candidates
39
65
  candidates = []
40
- c = m.class
66
+ c = controller.request.mobile.class
41
67
  while c != Jpmobile::Mobile::AbstractMobile
42
68
  candidates << "mobile_"+c.to_s.split(/::/).last.downcase
43
69
  c = c.superclass
44
70
  end
45
71
  candidates << "mobile"
72
+ end
73
+
74
+ def mobile_template_partial mobile_path
75
+ # ActionView::PartialTemplate#extract_partial_name_and_path の動作を模倣
76
+ if mobile_path.include?('/')
77
+ path = File.dirname(mobile_path)
78
+ partial_name = File.basename(mobile_path)
79
+ else
80
+ path = self.controller.class.controller_path
81
+ partial_name = mobile_path
82
+ end
83
+ File.join(path, "_#{partial_name}")
84
+ end
85
+
86
+ def mobile_path template_path, type
87
+ "#{template_path}_#{type}"
88
+ end
46
89
 
47
- candidates.each do |v|
48
- mobile_path = "#{template_path}_#{v}"
90
+ def mobile_template_path(template_path, partial=false)
91
+ if controller.is_a?(ActionController::Base) && m = controller.request.mobile
92
+ mobile_template_candidates.each do |v|
93
+ mpath = mobile_path template_path, v
49
94
  if partial
50
- # ActionView::PartialTemplate#extract_partial_name_and_path の動作を模倣
51
- if mobile_path.include?('/')
52
- path = File.dirname(mobile_path)
53
- partial_name = File.basename(mobile_path)
54
- else
55
- path = self.controller.class.controller_path
56
- partial_name = mobile_path
57
- end
58
- full_path = File.join(path, "_#{partial_name}")
95
+ full_path = mobile_template_partial mpath
59
96
  else
60
- full_path = mobile_path
97
+ full_path = mpath
61
98
  end
62
- if finder.file_exists?(full_path)
63
- return mobile_path
99
+ if template_exists?(full_path)
100
+ return mpath
64
101
  end
65
102
  end
66
103
  end
67
104
  return nil
68
105
  end
106
+
107
+ if ::ActionPack::VERSION::MAJOR >=2 and ::ActionPack::VERSION::MINOR >= 2
108
+ ### Rails 2.2 or higher
109
+ def template_exists?(template_name)
110
+ send(:_pick_template_without_jpmobile, template_name) ? true : false
111
+ rescue ActionView::MissingTemplate
112
+ false
113
+ end
114
+ else
115
+ ### Rails 2.1 or lower
116
+ def template_exists?(template_name)
117
+ finder.file_exists?(template_name)
118
+ end
119
+ end
69
120
  end