Code Monkey home page Code Monkey logo

jpmobile's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jpmobile's Issues

mobile_filterを無効にする方法

旧バージョンでは、mobile_filterをコントローラーごとに有効・無効にできたと思いますが、最新バージョンではそのような設定方法はありませんか?config/initializers 以下でアプリケーション全体に対して有効にするしか方法が無いのでしょうか?
アプリケーション全体に対して有効にすると、PC用画面がある場合で、production環境ではない場合の画像の表示(production環境ではassetsをプリコンパイルしているためエラーとならない)や、CSVの出力などでsjisにレスポンスを変換した場合に、UTF8じゃないので変換できないというエラーになってしまいます。
著書の方法でPC用画面にsix apartの絵文字を表示しようと思ったのですが、本番環境以外でエラーとなってしまうことから上記現象に気づきました。

render partialにてmobileテンプレートが採用されない

<%=render :partial=>'shared/test'%>
上記の記法だと問題なくapp/views/shared/_test_mobile.html.erbが使用されます。

<%=render :partial=>'/shared/test'%>
上記の記法だと(パスの指定の頭に"/"が追加)app/views/shared/_test.html.erbが使用されてしまいます。

resolver.rbの16行目に出力を仕掛けたところ以下な出力になりました。

<%=render :partial=>'/shared/test'%>の場合

"/Users/hoge/test/jpmobile_test/app/views/welcome/index{{},}{.{en},}{.{html,text,js,css,ics,csv,png,jpeg,gif,bmp,tiff,mpeg,xml,rss,atom,yaml,multipart_form,url_encoded_form,json,pdf,zip},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/welcome/index{
{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/layouts/welcome{{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/layouts/application{
{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/shared/test{{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"

<%=render :partial=>'shared/test'%>の場合
"/Users/hoge/test/jpmobile_test/app/views/welcome/index{{},}{.{en},}{.{html,text,js,css,ics,csv,png,jpeg,gif,bmp,tiff,mpeg,xml,rss,atom,yaml,multipart_form,url_encoded_form,json,pdf,zip},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/welcome/index{
{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/layouts/welcome{{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/layouts/application{
{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"
"/Users/hoge/test/jpmobile_test/app/views/shared/test{{mobile_docomo,mobile},}{.{en},}{.{html},}{.{erb,builder,coffee},}"

以前は、ともに問題なく_test_mobile.html.erbが使用されたと記憶してますがちょっと怪しいです。
rails的にはどちらの記法でも動作するので修正していただけるとうれしいです。

再現環境はRails3.2になります。

jpmobile と meta_search が衝突する

  • rails (3.2.0)
  • jpmobile (3.0.0)
  • meta_search (1.1.2)

上記の組み合わせで「bundle exec rake -T」実行時にエラーが発生します。
新規プロジェクトでまだ設定が完全に終わっていませんが Gemfile から jpmobile か meta_search のどちらかを外すと「bundle exec rake -T」が正常に走ります。

$ bundle exec rake -T --trace
rake aborted!
uninitialized constant ActionDispatch::Session::Compatibility
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile/trans_sid.rb:39:in `<module:SessionID>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile/trans_sid.rb:36:in `<module:Jpmobile>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile/trans_sid.rb:5:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile/rails.rb:8:in `block in <top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/activesupport-3.2.0/lib/active_support/lazy_load_hooks.rb:36:in `instance_eval'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/activesupport-3.2.0/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/activesupport-3.2.0/lib/active_support/lazy_load_hooks.rb:26:in `on_load'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile/rails.rb:2:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/jpmobile-3.0.0/lib/jpmobile.rb:58:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/hk/src/sr/config/application.rb:14:in `<top (required)>'
/home/hk/src/sr/Rakefile:5:in `require'
/home/hk/src/sr/Rakefile:5:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/bin/rake:19:in `load'
/usr/local/rvm/gems/ruby-1.9.2-p290@sr/bin/rake:19:in `<main>'

(上記のログのパスやgemset名は編集しています)

rails3.1+devise+jpmobileでtrans_sidが動かない

https://github.com/yuuna/jpmobile-test

こちらにサンプルコードをあげております。
deviseでユーザーのセッション管理をしつつcookie非対応端末のためにtrans_sidをしたところ
1.ログイン必要なページにアクセス
2.ログイン画面がでる
3.ログイン完了後にトップに戻る
がループしてしまいます。trans_sidがsessionのhookに失敗してるように見受けられます。
トップからのリンク先のsession_idが毎回かわるのでこのへんが原因かなとおもいます。

よろしくお願いします。

メールサーバが無いためテストが通らない

エラー内容

Failure/Error: expect {
       expected no Exception, got #<Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25> with backtrace:
         # ./vendor/bundle/ruby/2.1.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
         # ./vendor/bundle/ruby/2.1.0/gems/mail-2.6.3/lib/mail/message.rb:2141:in `do_delivery'
         # ./vendor/bundle/ruby/2.1.0/gems/mail-2.6.3/lib/mail/message.rb:238:in `deliver'
         # ./spec/unit/mail_spec.rb:347:in `block (4 levels) in <top (required)>'
         # ./spec/unit/mail_spec.rb:346:in `block (3 levels) in <top (required)>'

メソッドのモックを作成する

実際の送信処理は、ActionMailerが使われているためテストの本質ではない。したがって、このメソッドのモックを作成することで解決

一部の端末でスマートフォンからのアクセスと判断されない件

Chrome Developer Toolsのモバイル向けデバッグ機能を利用して動作を確認したところ、下記の端末ではスマートフォンからのアクセスと判断されませんでした。

  • BlackBerry Z30

image

  • Nokia N9

image

  • Apple iPhone 6 (正しくスマートフォンと判断されている)

image

これらの端末にはなぜ対応していないのでしょうか。
理由などあれば教えていただけると幸いです。

i.softbank.jp へメール送信時に絵文字がハシゴになる

Jpmobile::Mailer::Base によるメール送信の際、@docomo.ne.jp や @softbank.ne.jp では絵文字がきちんと表示されるのですが、iPhone専用メールアドレスの @i.softbank.jp では絵文字が変換ができなかった際に表示されるハシゴアイコンになってしまいます。

Softbankクラスのメールアドレスの正規表現に @i.softbank.jp を追加するだけで良いと思うのですが、他に変更が必要なところはありますでしょうか?
現在は送信しか実装する要件はないのですが、将来的に受信側も実装する予定があるので、そちらも対応が必要なのか知りたく。。

ご教示頂ければ幸いです。

Rails3.1.0.rc6で、jpmobile2.0.0.pre.2がインストール出来ない。

前はRails3.1でも動作していたと思うのですが、最新版では以下のようなエラーが発生してインストール出来ません。

# Gemfile
gem "jpmobile", "~> 2.0.0.pre.2"

$ bundle install
Fetching source index for http://rubygems.org/
/Users/y-hirasawa/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:289:in `load': uninitialized constant Syck::Syck (NameError)

undefined method `find_template_paths'

  • rails 4.1.1
  • jpmobile 4.1.1

の組み合わせで起きました。

軽く調べてみたところ、rails 4.1.2からfind_template_pathsが実装されています。

なので、Railsは4.1.2以上としてはいかがでしょうか?

携帯アドレス以外のテンプレート

jpmobile3.05+ruby1.9.3-p194+rails3.2.8において、Jpmobile::Mailer::Baseを継承したサブクラスを使用してメール送信を行なっています。

テンプレートを
app/views/xxx_mailer/welcome.text.erb
app/views/xxx_mailer/welcome_mobile.text.erb
としている場合において、toアドレスが[email protected]であっても、[email protected](携帯メールアドレス)であってもwelcome_mobile.text.erbが使用されてしまいます。

なにか確認すべき点がございましたらご教示いただければ幸いです

iOS6でファイルアップロード時にArgumentError

iOS6からHTMLファイルアップロードができるようになり、Rails3.2.6+jpmobile3.0.4上でトライしましたが、次のエラーが発生しましたのでご報告します。Stacktraceを見る限りでは、自分が書いたアプリケーションコードまで到達していない点と、同じコードをAndroidで実行すると問題なく動作しているので、iOSでの問題と思います。

ArgumentError (invalid byte sequence in UTF-8):
jpmobile (3.0.4) lib/jpmobile/emoticon.rb:66:in gsub' jpmobile (3.0.4) lib/jpmobile/emoticon.rb:66:inexternal_to_unicodecr_softbank'
jpmobile (3.0.4) lib/jpmobile/mobile/iphone.rb:23:in to_internal' jpmobile (3.0.4) lib/jpmobile/rack/params_filter.rb:30:into_internal'
jpmobile (3.0.4) lib/jpmobile/rack/params_filter.rb:38:in block in parse_query' jpmobile (3.0.4) lib/jpmobile/rack/params_filter.rb:36:ineach'
jpmobile (3.0.4) lib/jpmobile/rack/params_filter.rb:36:in parse_query' jpmobile (3.0.4) lib/jpmobile/rack/params_filter.rb:16:incall'
jpmobile (3.0.4) lib/jpmobile/rack/mobile_carrier.rb:13:in call' actionpack (3.2.6) lib/action_dispatch/middleware/flash.rb:242:incall'
rack (1.4.1) lib/rack/session/abstract/id.rb:205:in context' rack (1.4.1) lib/rack/session/abstract/id.rb:200:incall'
actionpack (3.2.6) lib/action_dispatch/middleware/cookies.rb:338:in call' activerecord (3.2.6) lib/active_record/query_cache.rb:64:incall'
activerecord (3.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in call' actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:28:inblock in call'
activesupport (3.2.6) lib/active_support/callbacks.rb:405:in _run__31726921__call__275934101__callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:405:in __run_callback' activesupport (3.2.6) lib/active_support/callbacks.rb:385:in_run_call_callbacks'
activesupport (3.2.6) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:27:incall'
actionpack (3.2.6) lib/action_dispatch/middleware/reloader.rb:65:in call' actionpack (3.2.6) lib/action_dispatch/middleware/remote_ip.rb:31:incall'
actionpack (3.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:16:in call' actionpack (3.2.6) lib/action_dispatch/middleware/show_exceptions.rb:56:incall'
railties (3.2.6) lib/rails/rack/logger.rb:26:in call_app' railties (3.2.6) lib/rails/rack/logger.rb:16:incall'
actionpack (3.2.6) lib/action_dispatch/middleware/request_id.rb:22:in call' rack (1.4.1) lib/rack/methodoverride.rb:21:incall'
rack (1.4.1) lib/rack/runtime.rb:17:in call' activesupport (3.2.6) lib/active_support/cache/strategy/local_cache.rb:72:incall'
rack (1.4.1) lib/rack/lock.rb:15:in call' actionpack (3.2.6) lib/action_dispatch/middleware/static.rb:62:incall'
railties (3.2.6) lib/rails/engine.rb:479:in call' railties (3.2.6) lib/rails/application.rb:220:incall'
rack (1.4.1) lib/rack/content_length.rb:14:in call' railties (3.2.6) lib/rails/rack/log_tailer.rb:17:incall'
rack (1.4.1) lib/rack/handler/webrick.rb:59:in service' C:/tools/ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:138:inservice'
C:/tools/ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:94:in run' C:/tools/ruby193/lib/ruby/1.9.1/webrick/server.rb:191:inblock in start_threa
d'

Rendered C:/tools/ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
Rendered C:/tools/ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
Rendered C:/tools/ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (28
.0ms)

メール送信で例外エラーが発生

Jpmobile::Mailer::Baseでのメールの送信で以下の例外が発生しました。
ActionMailerを使用している時はメール送信できていました。
チェックするポイント等ありましたら教えて下さい。
よろしくお願いします。

■例外エラー
Encoding::CompatibilityError in MailerController#sendmail
incompatible encoding regexp match (US-ASCII regexp with ISO-2022-JP string)

■使用バージョン
rails3.2.0 + jpmobile3.0.1 + ruby1.9.2p290

■Mailerのソース

#class SampleMailer < ActionMailer::Base
class SampleMailer < Jpmobile::Mailer::Base
  default from: "[email protected]"
  def greeting
    @greeting = "Hi"
    mail to: "[email protected]"
  end
end

■Framework Trace
activesupport (3.2.1) lib/active_support/core_ext/object/blank.rb:105:in =~' activesupport (3.2.1) lib/active_support/core_ext/object/blank.rb:105:in!~'
activesupport (3.2.1) lib/active_support/core_ext/object/blank.rb:105:in blank?' mail (2.4.1) lib/mail/network/delivery_methods/smtp.rb:108:indeliver!'
mail (2.4.1) lib/mail/message.rb:2033:in do_delivery' mail (2.4.1) lib/mail/message.rb:229:inblock in deliver'
actionmailer (3.2.1) lib/action_mailer/base.rb:414:in block in deliver_mail' activesupport (3.2.1) lib/active_support/notifications.rb:123:inblock in instrument'
activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:20:in instrument' activesupport (3.2.1) lib/active_support/notifications.rb:123:ininstrument'
actionmailer (3.2.1) lib/action_mailer/base.rb:412:in deliver_mail' mail (2.4.1) lib/mail/message.rb:229:indeliver'
actionpack (3.2.1) lib/action_controller/metal/implicit_render.rb:4:in send_action' actionpack (3.2.1) lib/abstract_controller/base.rb:167:inprocess_action'


Does not work with rails 3

When using jpmobile as gem:

{...}/jpmobile/lib/jpmobile/hook_action_controller.rb:18: uninitialized constant ActionController::Request (NameError)

ActionController::Request is deprecated - now it's ActionDispatch::Request (from actionpack-3.0.4/lib/action_controller/deprecated.rb).

So why is it marked as working with rails 3 if it does not?

submit ボタンの value 属性に対する hankaku_filter の挙動

@rust

タイトルの件、ご質問させてください。

現在

hankaku_filter input: true

を指定すると、submit ボタンの value 属性に半角カナが使われいても全角に変換されます。

ソースコード上だとこの部分になりますが、これは e682bce にて振る舞いが変わっているように見えます。このコミット以前は全角から半角へ、それ以降は半角から全角へ変換されるようになっています。

この変更は意図したものでしょうか?
submit ボタンの value はユーザも端末で目にする部分であり、input: true指定時も半角カナを維持するか、もしくはそれを実現するオプションがあるとありがたいと思っています。

メール機能を使用するためにはActionMailerが必要であることが明記されていない

問題点

  • 依存関係のライブラリにActionMailerが無い
  • ActionMailerがインストールされていない環境下では、メール機能が提供できない可能性がある

改善策

  • Railsアプリ環境下でのみ動作を期待する場合
    WikiかREADMEに注意書きを追加する
  • Railsアプリ環境下意外で動作を期待する場合
gem.add_runtime_dependency 'actionmailer' # jpmobile.gemspec

英数字記号の半角自動変換

全角カナの半角自動変換は以下のコードでできたのですが、全角の英数字や記号を半角に自動変換する機能はあるでしょうか?

class ApplicationController < ActionController::Base
    include Jpmobile::ViewSelector
    hankaku_filter :input => true
    ...
end

auからのメール受信時に例外エラーが発生

Jpmobile::Mailer::Base によるメール受信を試みているのですが、au からのメールでは例外エラーが発生してしまいます。ちなみにdocomo,softbankでは例外エラーは発生していません。
題名に特定の文字が入っていると発生するようです。(例: ※本文はそのままで)
ご教示頂ければ幸いです。

例外エラー

Encoding::InvalidByteSequenceError ("\xE2" on ISO-2022-JP):
  app/controllers/receipt/tasks/qr_task_controller.rb:9:in `execute'

スタックトレース

vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/util.rb:139:in `encode'
vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/util.rb:139:in `jis_to_utf8'
vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/mobile/au.rb:116:in `to_mail_internal'
vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/mail.rb:263:in `convert_encoding_jpmobile'
vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/mail.rb:97:in `parse_message_with_jpmobile'
vendor/bundle/ruby/1.9.1/gems/jpmobile-3.0.2/lib/jpmobile/mail.rb:108:in `init_with_string'
vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/message.rb:125:in `initialize'
vendor/bundle/ruby/1.9.1/gems/mail-2.4.4/lib/mail/mail.rb:50:in `new'

使用バージョン

rails (3.2.1) + jpmobile (3.0.2) + ruby (1.9.3-p125)

Jpmobile::Email.japanese_mail_address_regexpについて

すみません、質問になります。
#70 の変更をしていて疑問に思ったのですが、japanese_mail_address_regexpはどのような意図で現状のような形になっているのでしょうか?

「.jpドメインから送られていたら日本語メールで、それ以外は違うだろう」というのはずいぶん乱暴な想定に思えるのですが。gmailとかだってありますし…。

config.smart_phone_emoticon_compatibility = true 時の EOFError (bad content body)

いつもありがたく使用させていただいております。ありがとうございます。

Jpmobile.config.smart_phone_emoticon_compatibility = true

にしておくと、iOS6 で可能になった、フォームからのファイルアップロードに失敗します。
# アンドロイド端末でも発生しているみたいです。

-- View --
<%= form_tag({:action => :create}, {:multipart => true}) do -%>
<%= file_field_tag "file" -%>
<%= submit_tag -%>
<% end -%>

-- Action --
def create
upfile = params[:file]
render :text => upfile.original_filename
end

-- Log --
EOFError (bad content body):
rack (1.4.5) lib/rack/multipart/parser.rb:82:in fast_forward_to_first_boundary' rack (1.4.5) lib/rack/multipart/parser.rb:72:inloop'
rack (1.4.5) lib/rack/multipart/parser.rb:72:in fast_forward_to_first_boundary' rack (1.4.5) lib/rack/multipart/parser.rb:15:inparse'
rack (1.4.5) lib/rack/multipart.rb:25:in parse_multipart' rack (1.4.5) lib/rack/request.rb:336:inparse_multipart'
rack (1.4.5) lib/rack/request.rb:201:in POST' actionpack (3.2.12) lib/action_dispatch/http/request.rb:231:inrequest_parameters'
actionpack (3.2.12) lib/action_dispatch/http/parameters.rb:10:in parameters' actionpack (3.2.12) lib/action_dispatch/http/filter_parameters.rb:33:infiltered_parameters'
actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:21:in process_action' actionpack (3.2.12) lib/action_controller/metal/params_wrapper.rb:207:inprocess_action'
activerecord (3.2.12) lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (3.2.12) lib/abstract_controller/base.rb:121:inprocess'
actionpack (3.2.12) lib/abstract_controller/rendering.rb:45:in process' actionpack (3.2.12) lib/action_controller/metal.rb:203:indispatch'
actionpack (3.2.12) lib/action_controller/metal/rack_delegation.rb:14:in dispatch' actionpack (3.2.12) lib/action_controller/metal.rb:246:inaction'
actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:73:in call' actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:73:indispatch'
actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:36:in call' journey (1.0.4) lib/journey/router.rb:68:incall'
journey (1.0.4) lib/journey/router.rb:56:in each' journey (1.0.4) lib/journey/router.rb:56:incall'
actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:601:in call' /usr/local/rvm/gems/ree-1.8.7-2012.02/bundler/gems/rails-dev-boost-d21b29786322/lib/rails_development_boost/async.rb:14:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/best_standards_support.rb:17:in call' rack (1.4.5) lib/rack/etag.rb:23:incall'
rack (1.4.5) lib/rack/conditionalget.rb:35:in call' actionpack (3.2.12) lib/action_dispatch/middleware/head.rb:14:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/params_parser.rb:21:in call' jpmobile (3.0.7) lib/jpmobile/rack/filter.rb:16:incall'
jpmobile (3.0.7) lib/jpmobile/rack/params_filter.rb:23:in call' jpmobile (3.0.7) lib/jpmobile/rack/mobile_carrier.rb:13:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/flash.rb:242:in call' rack (1.4.5) lib/rack/session/abstract/id.rb:210:incontext'
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in call' actionpack (3.2.12) lib/action_dispatch/middleware/cookies.rb:341:incall'
activerecord (3.2.12) lib/active_record/query_cache.rb:64:in call' activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:28:in call' activesupport (3.2.12) lib/active_support/callbacks.rb:405:in_run__749190767__call__4__callbacks'
activesupport (3.2.12) lib/active_support/callbacks.rb:405:in send' activesupport (3.2.12) lib/active_support/callbacks.rb:405:in__run_callback'
activesupport (3.2.12) lib/active_support/callbacks.rb:385:in _run_call_callbacks' activesupport (3.2.12) lib/active_support/callbacks.rb:81:insend'
activesupport (3.2.12) lib/active_support/callbacks.rb:81:in run_callbacks' actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:27:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/reloader.rb:65:in call' rack (1.4.5) lib/rack/sendfile.rb:102:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:31:in call' actionpack (3.2.12) lib/action_dispatch/middleware/debug_exceptions.rb:16:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/show_exceptions.rb:56:in call' railties (3.2.12) lib/rails/rack/logger.rb:32:incall_app'
railties (3.2.12) lib/rails/rack/logger.rb:16:in call' activesupport (3.2.12) lib/active_support/tagged_logging.rb:22:intagged'
railties (3.2.12) lib/rails/rack/logger.rb:16:in call' actionpack (3.2.12) lib/action_dispatch/middleware/request_id.rb:22:incall'
rack (1.4.5) lib/rack/methodoverride.rb:21:in call' rack (1.4.5) lib/rack/runtime.rb:17:incall'
activesupport (3.2.12) lib/active_support/cache/strategy/local_cache.rb:72:in call' rack (1.4.5) lib/rack/lock.rb:15:incall'
actionpack (3.2.12) lib/action_dispatch/middleware/static.rb:62:in call' railties (3.2.12) lib/rails/engine.rb:479:incall'
railties (3.2.12) lib/rails/application.rb:223:in call' railties (3.2.12) lib/rails/railtie/configurable.rb:30:insend'
railties (3.2.12) lib/rails/railtie/configurable.rb:30:in method_missing' passenger (3.0.19) lib/phusion_passenger/rack/request_handler.rb:96:inprocess_request'
passenger (3.0.19) lib/phusion_passenger/abstract_request_handler.rb:516:in accept_and_process_next_request' passenger (3.0.19) lib/phusion_passenger/abstract_request_handler.rb:274:inmain_loop'
passenger (3.0.19) lib/phusion_passenger/rack/application_spawner.rb:206:in start_request_handler' passenger (3.0.19) lib/phusion_passenger/rack/application_spawner.rb:171:insend'
passenger (3.0.19) lib/phusion_passenger/rack/application_spawner.rb:171:in handle_spawn_application' passenger (3.0.19) lib/phusion_passenger/utils.rb:470:insafe_fork'
passenger (3.0.19) lib/phusion_passenger/rack/application_spawner.rb:166:in handle_spawn_application' passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:357:insend'
passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:357:in server_main_loop' passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:206:instart_synchronously'
passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:180:in start' passenger (3.0.19) lib/phusion_passenger/rack/application_spawner.rb:129:instart'
passenger (3.0.19) lib/phusion_passenger/spawn_manager.rb:253:in spawn_rack_application' passenger (3.0.19) lib/phusion_passenger/abstract_server_collection.rb:132:inlookup_or_add'
passenger (3.0.19) lib/phusion_passenger/spawn_manager.rb:246:in spawn_rack_application' passenger (3.0.19) lib/phusion_passenger/abstract_server_collection.rb:82:insynchronize'
passenger (3.0.19) lib/phusion_passenger/abstract_server_collection.rb:79:in synchronize' passenger (3.0.19) lib/phusion_passenger/spawn_manager.rb:244:inspawn_rack_application'
passenger (3.0.19) lib/phusion_passenger/spawn_manager.rb:137:in spawn_application' passenger (3.0.19) lib/phusion_passenger/spawn_manager.rb:275:inhandle_spawn_application'
passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:357:in __send__' passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:357:inserver_main_loop'
passenger (3.0.19) lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously'
passenger (3.0.19) helper-scripts/passenger-spawn-server:99

Rakefileにrequire'git'がない

vendor/jpmobile-ipaddresses , vendor/jpmobile-terminfoがない場合エラーとなるようです
$ rake
rake aborted!
uninitialized constant Git
/Users/sulky/git/jpmobile/Rakefile:65

iPhoneからの返信、転送メール受信時に例外発生

Jpmobile::Mailer::Baseを使用してメールの受信を行おうとしているのですが、iPhone(au)からのメールを受信した時に例外が発生します。
どうやら、本文中に「日」のような2バイト目に0x7Cが含まれている場合に例外が発生する模様です。
ちなみに、ActionMailer::Baseでは、受信できるのですが、ガラケーの利用も考えているので、Jpmobileで受信を行いたいと考えています。

以上、よろしくお願いします。

例外エラー

`eval': "l" followed by "\e" on ISO-2022-JP (Encoding::InvalidByteSequenceError)

スタックトレース

/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `eval': "l" followed by "\e" on ISO-2022-JP (Encoding::InvalidByteSequenceError)  from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/util.rb:146:in `jis_to_utf8'  from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mobile/au.rb:123:in `to_mail_internal' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mobile/abstract_mobile.rb:160:in `decode_transfer_encoding'  from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:276:in `convert_encoding_jpmobile'  from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:98:in `parse_message_with_jpmobile'  from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:109:in `init_with_string'  from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/message.rb:125:in `initialize'  from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/mail.rb:50:in `new'  from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/mail.rb:50:in `new'  from
/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.2.1/lib/action_mailer/base.rb:401:in `block in receive'  from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications.rb:123:in `block in instrument'  from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'  from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications.rb:123:in `instrument'  from
/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.2.1/lib/action_mailer/base.rb:400:in `receive'  from (eval):1:in `<top (required)>'  from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `eval'  from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `<top (required)>'  from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:64:in `require'  from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:64:in `<top (required)>'  from script/rails:6:in `require'  from
script/rails:6:in `<main>'

使用バージョン

ruby : ruby 1.9.3p194 (2012-04-20) [i686-linux]
rails : 3.2.1
jpmobile : 3.0.4

Please set source_code_uri for this gem!

I just realized that I didn't have jpmobile repo in my machine because the everyone's favourite, life-changing, super-useful gem-src plugin fails to find the repo because the gemspec's "homepage" is set to something different from the GH URL, and source_code_uri is not properly set.

So, could you please configure the gem's "source_code_uri" from rubygems.org via the following steps?

  1. sign in to https://rubygems.org/
  2. visit https://rubygems.org/gems/jpmobile
  3. click the "Edit" link
  4. fill in "Source Code URL" with "https://github.com/jpmobile/jpmobile"

Thanks!

capybara-webkit のインストールにおけるエラー改善案

起きた問題 :

git clone後にbundle install時の capybara-webkit のインストールにおいて、qmakeコマンドが無いためエラーとなりました。

% bundle install --path vendor/bundle                                                                                                     
Fetching gem metadata from https://rubygems.org/.........
Fetching version metadata from https://rubygems.org/..
Resolving dependencies...
Using rake 10.4.2
Installing i18n 0.7.0
Installing json 1.8.3
Installing minitest 5.7.0
Installing thread_safe 0.3.5
Installing tzinfo 1.2.2
Installing activesupport 4.2.3
Installing builder 3.2.2
Installing erubis 2.7.0
Installing mini_portile 0.6.2
Installing nokogiri 1.6.6.2
Installing rails-deprecated_sanitizer 1.0.3
Installing rails-dom-testing 1.0.6
Installing loofah 2.0.2
Installing rails-html-sanitizer 1.0.2
Installing actionview 4.2.3
Installing rack 1.6.4
Installing rack-test 0.6.3
Installing actionpack 4.2.3
Installing globalid 0.3.5
Installing activejob 4.2.3
Installing mime-types 2.6.1
Installing mail 2.6.3
Installing actionmailer 4.2.3
Installing activemodel 4.2.3
Installing arel 6.0.0
Installing activerecord 4.2.3
Using bundler 1.9.9
Installing xpath 2.0.0
Installing capybara 2.4.4

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/ippe/.rbenv/versions/2.2.2/bin/ruby -r ./siteconf20150627-32583-1rwnvoi.rb extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/Users/ippe/.rbenv/versions/2.2.2/bin/$(RUBY_BASE_NAME)
        --with-gl-dir
        --without-gl-dir
        --with-gl-include
        --without-gl-include=${gl-dir}/include
        --with-gl-lib
        --without-gl-lib=${gl-dir}/lib
        --with-zlib-dir
        --without-zlib-dir
        --with-zlib-include
        --without-zlib-include=${zlib-dir}/include
        --with-zlib-lib
        --without-zlib-lib=${zlib-dir}/lib
Command 'qmake ' not available

extconf failed, exit code 1

Gem files will remain installed in /Users/ippe/sezemi/oss_hack_beginners/jpmobile/vendor/bundle/ruby/2.2.0/gems/capybara-webkit-1.6.0 for inspection.
Results logged to /Users/ippe/sezemi/oss_hack_beginners/jpmobile/vendor/bundle/ruby/2.2.0/extensions/x86_64-darwin-13/2.2.0-static/capybara-webkit-1.6.0/gem_make.out
An error occurred while installing capybara-webkit (1.6.0), and Bundler cannot continue.
Make sure that `gem install capybara-webkit -v '1.6.0'` succeeds before bundling.

解決策 :

下記Webサイトを参考にして、Qtをインストールすることで解決しました。
Installing Qt and compiling capybara webkit

改善案 :

開発者向けドキュメントを用意して、Qtのインストールを手順に含めると良いと思いましたがいかがでしょうか。

hankaku_filter :input=>trueにて問題

hankaku_filter :input=>trueにすると出力されるHTMLのmetaタグ内のcontent_typeが以下の形で強制で出力される(ソースでshift_JISを指定しても置換される)。Jpmobile::HankakuFilter#to_externalにてnokogiriのparseが文字コードに即した形で(内部ではUTFなので)自動変換していると思われる。

ActiveRecordStore利用時にsession_options[:renew]オプションが効かない

wardenでset_userを利用したときなどに設定される、
session_options[:renew] が trueの場合に、セッションIDが再生成されないようです。

destroy_sessionはsession_options[:drop]がtrueで無い場合、
新しいセッションIDを生成して返すのが正しい動作だと思いますが、
ActiveRecord::SessionStore::destroy_session_with_jpmobile
では、引数から与えられたsession_idをそのまま返却しているため、
以前のセッションIDが再度利用されてしまうようです。

これは意図通りの動作でしょうか?

タブレットのview

3.0.4からTabletクラスが追加されてindex_tablet.html.erbがない場合にはindex_smart_phone.html.erbを使うようになっていますが、スマートフォン版よりはPC版の方がタブレット向きの画面になっているためPC用(index.html.erb)のviewを使いたいというケースがあります。

config/initializers/jpmobile.rb に以下のコードを追加して対応していますが、configなどで簡単に切り替えられるようにできないでしょうか?

class Jpmobile::Mobile::Tablet
  def variants
    []
  end
end

ご検討のほどよろしくお願いします。

1.8系でsjis<=>utf8変換について

ruby1.8系で、0x8150(sjis)がU+FFE3 (FULLWIDTH MACRON) に変換されずに
U+203E (OVERLINE) に変換されているようです。
NKFに--ic=windows-31jをつけるとFULLWIDTH MACRONに変換されそうです。

 NKF.nkf("-m0 -x -w --ic=windows-31j", sjis_str)

production 環境で hankaku_filterがエラー

production 環境で hankaku_filterを使うと下記のエラーが出ます。
development 環境で使っている時は正常に動いていました。

■使用バージョン
rails 3.2.0
jpmobile 3.0.1

■ソース

class ApplicationController < ActionController::Base
  protect_from_forgery
  include Jpmobile::ViewSelector
  hankaku_filter :input => true
  ...
end      

■エラーログ

NameError (uninitialized constant Jpmobile::HankakuFilter::Nokogiri):
  jpmobile (3.0.1) lib/jpmobile/filter.rb:61:in `to_external'
  jpmobile (3.0.1) lib/jpmobile/filter.rb:46:in `after'
  jpmobile (3.0.1) lib/jpmobile/filter.rb:10:in `block in hankaku_filter'
  activesupport (3.2.0) lib/active_support/callbacks.rb:449:in `_run__1901410530977572378__process_action__4061666883376695914__callbacks'
  activesupport (3.2.0) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.0) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  activesupport (3.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
...

Jpmobile::Mailer::Baseで:toが存在しないとエラーになる

mail メソッドで :to がない場合に、エラーになる。

default で設定している場合に問題となるので :to がない場合に default_params を見て取得するようにする。

またメールアドレスの respond_to?(:split) を見て、false の場合は何もしないように変更する。

Rails 3.2.8 で、ビューから <% if request.smart_phone? %> するとエラー

Rails 3.2.1 から少しずつバージョンを上げて 3.2.7 まで上げたのですが、3.2.8 まで上げると、ビューファイルに記述した下記のようなコードのところでエラーとなってしまいました

(深く追ってみようとしたのですが、力量不足で、どこが原因なのかわかりませんでした)

<% if request.smart_phone? %>
  スマートフォンからのアクセスです。
<% else %>
  スマートフォンからのアクセスではありません。
<% end %>
ActionView::Template::Error (undefined method `smart_phone?' for nil:NilClass):

質問なのですが、jpmobile って、Rails 3.2.8 にも対応しておりますでしょうか?もし対応しているのであればアプリ側の原因だと思うので、なんとか力技でエラーを回避しようと思うのですが。。。

[testでのエラー発生] jpmobile-ipaddressesとjpmobile-terminfoのinstallについて

jpmobileをgit cloneし、
bundle installをし、
テストを実行すると下記のエラーが発生します。

% bundle exec rspec                                                                                  (git)-[master]
IP Address test requires jpmobile-ipaddresses module
Terminal display information test requires jpmobile-terminfo module
IP Address test requires jpmobile-ipaddresses module
Terminal display information test requires jpmobile-terminfo module
Run options:
  include {:focus=>true}
  exclude {:broken=>true}

All examples were filtered out; ignoring {:focus=>true}
.............F.FF.....................F.F...********...................................................................................F.FF...F..........................................................................................................................................................................F.................................................................................................FFFFFFFFFFFFFF......................................

Pending: (Failures listed here are expected and do not affect your suite's status)

  1) 絵文字が PC で絵文字を変換するとき Jpmobile::Emoticon.pc_emoticon? がtrueになること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:71

  2) 絵文字が PC で絵文字を変換するとき docomo 絵文字が画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:75

  3) 絵文字が PC で絵文字を変換するとき docomo 絵文字コードが画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:80

  4) 絵文字が PC で絵文字を変換するとき au 絵文字が画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:85

  5) 絵文字が PC で絵文字を変換するとき au 絵文字コードが画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:90

  6) 絵文字が PC で絵文字を変換するとき softbank 絵文字が画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:95

  7) 絵文字が PC で絵文字を変換するとき softbank 絵文字コードが画像に変換されること
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:100

  8) 絵文字が PC で絵文字を変換するとき Content-Type が変換できないものである場合には変換しないこと
     # emoticon.yaml and emoticons directory don't exists
     # ./spec/rack/jpmobile/emoticon_spec.rb:105


Failures:

  1) Jpmobile::Rack::MobileCarrier au IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
     Failure/Error: expect(env['rack.jpmobile'].valid_ip?).to be_truthy
       expected: truthy value
            got: false
     # ./spec/rack/jpmobile/au_spec.rb:160:in `block (3 levels) in <top (required)>'

  2) Jpmobile::Rack::MobileCarrier au 画面情報で 端末の画面サイズを正しく取得できること
     Failure/Error: expect(env['rack.jpmobile'].display.width).to  eq(240)
     NameError:
       uninitialized constant Jpmobile::Mobile::Terminfo
     # ./lib/jpmobile/mobile/abstract_mobile.rb:41:in `display'
     # ./spec/rack/jpmobile/au_spec.rb:184:in `block (3 levels) in <top (required)>'

  3) Jpmobile::Rack::MobileCarrier au 画面情報で 端末の画面情報が渡ってない場合に正しく動作すること
     Failure/Error: expect(env['rack.jpmobile'].display.width).to  be_nil
     NameError:
       uninitialized constant Jpmobile::Mobile::Terminfo
     # ./lib/jpmobile/mobile/abstract_mobile.rb:41:in `display'
     # ./spec/rack/jpmobile/au_spec.rb:196:in `block (3 levels) in <top (required)>'

  4) Jpmobile::Rack::MobileCarrier docomo IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
     Failure/Error: expect(env['rack.jpmobile'].valid_ip?).to be_truthy
       expected: truthy value
            got: false
     # ./spec/rack/jpmobile/docomo_spec.rb:208:in `block (3 levels) in <top (required)>'

  5) Jpmobile::Rack::MobileCarrier docomo 端末サイズ SO506iCのサイズを適切に取得できること
     Failure/Error: expect(env['rack.jpmobile'].display.browser_width).to  eq(240)
     NameError:
       uninitialized constant Jpmobile::Mobile::Terminfo
     # ./lib/jpmobile/mobile/abstract_mobile.rb:41:in `display'
     # ./spec/rack/jpmobile/docomo_spec.rb:229:in `block (3 levels) in <top (required)>'

  6) Jpmobile::Rack::MobileCarrier softbank IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
     Failure/Error: expect(env['rack.jpmobile'].valid_ip?).to be_truthy
       expected: truthy value
            got: false
     # ./spec/rack/jpmobile/softbank_spec.rb:76:in `block (3 levels) in <top (required)>'

  7) Jpmobile::Rack::MobileCarrier softbank 画面情報で 端末の画面サイズを正しく取得できること
     Failure/Error: expect(env['rack.jpmobile'].display.width).to           eq(240)
     NameError:
       uninitialized constant Jpmobile::Mobile::Terminfo
     # ./lib/jpmobile/mobile/abstract_mobile.rb:41:in `display'
     # ./spec/rack/jpmobile/softbank_spec.rb:99:in `block (3 levels) in <top (required)>'

  8) Jpmobile::Rack::MobileCarrier softbank 画面情報で 端末の画面情報が渡ってない場合に正しく動作すること
     Failure/Error: expect(env['rack.jpmobile'].display.width).to  be_nil
     NameError:
       uninitialized constant Jpmobile::Mobile::Terminfo
     # ./lib/jpmobile/mobile/abstract_mobile.rb:41:in `display'
     # ./spec/rack/jpmobile/softbank_spec.rb:113:in `block (3 levels) in <top (required)>'

  9) Jpmobile::Rack::MobileCarrier willcom IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
     Failure/Error: expect(env['rack.jpmobile'].valid_ip?).to be_truthy
       expected: truthy value
            got: false
     # ./spec/rack/jpmobile/willcom_spec.rb:54:in `block (3 levels) in <top (required)>'

  10) Jpmobile::Mail delivering delivers through SMTP
      Failure/Error: expect {
        expected no Exception, got #<Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25> with backtrace:
          # ./vendor/bundle/ruby/2.2.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
          # ./vendor/bundle/ruby/2.2.0/gems/mail-2.6.3/lib/mail/message.rb:2141:in `do_delivery'
          # ./vendor/bundle/ruby/2.2.0/gems/mail-2.6.3/lib/mail/message.rb:238:in `deliver'
          # ./spec/unit/mail_spec.rb:347:in `block (4 levels) in <top (required)>'
          # ./spec/unit/mail_spec.rb:346:in `block (3 levels) in <top (required)>'
      # ./spec/unit/mail_spec.rb:346:in `block (3 levels) in <top (required)>'

  11) Jpmobile::Mobile::valid_ip? should be return true if 210.153.84.1 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  12) Jpmobile::Mobile::valid_ip? should be return true if 210.153.84.254 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  13) Jpmobile::Mobile::valid_ip? should be return true if 210.230.128.225 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  14) Jpmobile::Mobile::valid_ip? should be return true if 210.230.128.238 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  15) Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.1 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  16) Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.31 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  17) Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.1 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  18) Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.31 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  19) Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.1 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  20) Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.254 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  21) Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.1 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  22) Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.254 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  23) Jpmobile::Mobile::valid_ip? should be return true if 117.55.1.224 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

  24) Jpmobile::Mobile::valid_ip? should be return true if 117.55.1.254 is in carrier address
      Failure/Error: expect(Jpmobile::Mobile.const_get(carrier).valid_ip?(remote_ip)).to eq(true)

        expected: true
             got: false

        (compared using ==)
      # ./spec/unit/valid_ip_spec.rb:21:in `block (3 levels) in <top (required)>'

Finished in 1.99 seconds (files took 0.88327 seconds to load)
463 examples, 24 failures, 8 pending

Failed examples:

rspec ./spec/rack/jpmobile/au_spec.rb:153 # Jpmobile::Rack::MobileCarrier au IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
rspec ./spec/rack/jpmobile/au_spec.rb:175 # Jpmobile::Rack::MobileCarrier au 画面情報で 端末の画面サイズを正しく取得できること
rspec ./spec/rack/jpmobile/au_spec.rb:190 # Jpmobile::Rack::MobileCarrier au 画面情報で 端末の画面情報が渡ってない場合に正しく動作すること
rspec ./spec/rack/jpmobile/docomo_spec.rb:201 # Jpmobile::Rack::MobileCarrier docomo IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
rspec ./spec/rack/jpmobile/docomo_spec.rb:223 # Jpmobile::Rack::MobileCarrier docomo 端末サイズ SO506iCのサイズを適切に取得できること
rspec ./spec/rack/jpmobile/softbank_spec.rb:69 # Jpmobile::Rack::MobileCarrier softbank IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
rspec ./spec/rack/jpmobile/softbank_spec.rb:91 # Jpmobile::Rack::MobileCarrier softbank 画面情報で 端末の画面サイズを正しく取得できること
rspec ./spec/rack/jpmobile/softbank_spec.rb:107 # Jpmobile::Rack::MobileCarrier softbank 画面情報で 端末の画面情報が渡ってない場合に正しく動作すること
rspec ./spec/rack/jpmobile/willcom_spec.rb:47 # Jpmobile::Rack::MobileCarrier willcom IPアドレス制限で 正しいIPアドレス空間からのアクセスを判断できること
rspec ./spec/unit/mail_spec.rb:344 # Jpmobile::Mail delivering delivers through SMTP
rspec ./spec/unit/valid_ip_spec.rb[1:1] # Jpmobile::Mobile::valid_ip? should be return true if 210.153.84.1 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:2] # Jpmobile::Mobile::valid_ip? should be return true if 210.153.84.254 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:3] # Jpmobile::Mobile::valid_ip? should be return true if 210.230.128.225 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:4] # Jpmobile::Mobile::valid_ip? should be return true if 210.230.128.238 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:5] # Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.1 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:6] # Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.31 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:7] # Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.1 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:8] # Jpmobile::Mobile::valid_ip? should be return true if 123.108.237.31 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:9] # Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.1 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:10] # Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.254 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:11] # Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.1 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:12] # Jpmobile::Mobile::valid_ip? should be return true if 61.198.142.254 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:13] # Jpmobile::Mobile::valid_ip? should be return true if 117.55.1.224 is in carrier address
rspec ./spec/unit/valid_ip_spec.rb[1:14] # Jpmobile::Mobile::valid_ip? should be return true if 117.55.1.254 is in carrier address

上記のエラーはjpmobile-ipaddressesjpmobile-terminfoがインストールされていないためです。

未入力のフォームのパラメータの値が落ちてしまうバグ

Parameters: {"authenticity_token"=>"ce4xlI+Hpu8fLf7pWhVafNvVJeOQknezBGIXZVtOIDU=", "user"=>{"name"=>"aaaaaa", "name_confirmation"=>""}, "commit"=>"Create User"}

の場合にmobile_filterを通すと下記の部分で、パラメータが落ちてしまいます。

以下のように変更したところ問題が解決しました。
ご確認いただけますでしょうか?

--- a/vendor/plugins/jpmobile/lib/jpmobile/rack/params_filter.rb
+++ b/vendor/plugins/jpmobile/lib/jpmobile/rack/params_filter.rb
  @@ -37,7 +37,7 @@ module Jpmobile
           k, v = param_pair.split("=")
           k = to_internal(k) if k
           v = to_internal(v) if v
-          new_array << "#{k}=#{v}" if k and v
+          new_array << "#{k}=#{v}" if k
         end

         new_array.join("&")

iPhoneからの返信メール受信時に例外発生

Jpmobileから送信されたメールをiPhoneで受信し、リプライした時に例外が発生します。
エラーになるメールは以前送らせていただきました。

例外エラー

`eval': "\xE3" on ISO-2022-JP (Encoding::InvalidByteSequenceError)

スタックトレース

/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `eval': "\xE3" on ISO-2022-JP (Encoding::InvalidByteSequenceError) from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/util.rb:146:in `jis_to_utf8' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mobile/au.rb:116:in `to_mail_internal' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mobile/abstract_mobile.rb:160:in `decode_transfer_encoding' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:283:in `convert_encoding_jpmobile' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:99:in `parse_message_with_jpmobile' from
/usr/lib/ruby/gems/1.9.1/gems/jpmobile-3.0.4/lib/jpmobile/mail.rb:110:in `init_with_string' from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/message.rb:125:in `initialize' from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/mail.rb:50:in `new' from
/usr/lib/ruby/gems/1.9.1/gems/mail-2.4.4/lib/mail/mail.rb:50:in `new' from
/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.2.1/lib/action_mailer/base.rb:401:in `block in receive' from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications.rb:123:in `block in instrument' from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument' from
/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications.rb:123:in `instrument' from
/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.2.1/lib/action_mailer/base.rb:400:in `receive' from (eval):1:in `<top (required)>' from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `eval' from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/runner.rb:53:in `<top (required)>' from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:64:in `require' from
/usr/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:64:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'

使用バージョン

ruby : ruby 1.9.3p194 (2012-04-20) [i686-linux]
rails : 3.2.1
jpmobile : 3.0.4 + 68fbf6e パッチ

以上、宜しくお願いいたします。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.