From 43ab8cfcfa3d1c6809a0f9e6771e96436ac67519 Mon Sep 17 00:00:00 2001 From: Sarah Mei <sarahmei@gmail.com> Date: Sat, 14 May 2011 15:44:01 -0700 Subject: [PATCH] Tell devise that :mobile is a navigational format. --- app/controllers/sessions_controller.rb | 14 ++--------- config/initializers/devise.rb | 18 +++++++++++--- spec/controllers/sessions_controller_spec.rb | 26 ++++++++++++++++---- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 32a864238f..1b29378c99 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -6,22 +6,12 @@ class SessionsController < Devise::SessionsController after_filter :enqueue_update, :only => :create - def create - resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") - set_flash_message(:notice, :signed_in) if is_navigational_format? - sign_in(resource_name, resource) - redirect_loc = redirect_location(resource_name, resource) - respond_with resource, :location => redirect_loc do |format| - format.mobile { redirect_to root_path } - end - end - protected def enqueue_update if current_user - current_user.services.each{|s| + current_user.services.each do |s| Resque.enqueue(Job::UpdateServiceUsers, s.id) if s.respond_to? :save_friends - } + end end end end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 387642b0c7..1e1771d3e5 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -4,6 +4,15 @@ # Use this hook to configure devise mailer, warden hooks and so forth. The first # four configuration values can also be set straight in your models. + +class ActionController::Responder + def to_mobile + default_render + rescue ActionView::MissingTemplate => e + navigation_behavior(e) + end +end + Devise.setup do |config| # Configure the e-mail address which will be shown in DeviseMailer. if AppConfig[:smtp_sender_address] @@ -11,9 +20,9 @@ Devise.setup do |config| else unless Rails.env == 'test' Rails.logger.warn("No smtp sender address set, mail may fail.") - puts "WARNING: No smtp sender address set, mail may fail." + puts "WARNING: No smtp sender address set, mail may fail." end - config.mailer_sender = "please-change-me@config-initializers-devise.com" + config.mailer_sender = "please-change-me@config-initializers-devise.com" end # ==> ORM configuration @@ -27,7 +36,7 @@ Devise.setup do |config| # authenticating an user, both parameters are required. Remember that those # parameters are used only when authenticating and not when retrieving from # session. If you need permissions, you should implement that in a before filter. - config.authentication_keys = [ :username ] + config.authentication_keys = [:username] # Tell if authentication through request.params is enabled. True by default. # config.params_authenticatable = true @@ -56,7 +65,7 @@ Devise.setup do |config| # Time interval where the invitation token is valid (default: 0). # If invite_for is 0 or nil, the invitation will never expire. # config.invite_for = 2.weeks - + # ==> Configuration for :confirmable # The time you want to give your user to confirm his account. During this time # he will be able to access your application without confirming. Default is nil. @@ -130,6 +139,7 @@ Devise.setup do |config| # If you have any extra navigational formats, like :iphone or :mobile, you # should add them to the navigational formats lists. Default is [:html] # config.navigational_formats = [:html, :iphone] + config.navigational_formats = [:"*/*", "*/*", :html, :mobile] # ==> Warden configuration # If you want to use other strategies, that are not (yet) supported by Devise, diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index e46ac04575..3337787e5c 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -24,23 +24,39 @@ describe SessionsController do end describe "#create" do - it "redirects to / for a normal user" do + it "redirects to / for a non-mobile user" do post :create, {"user" => {"remember_me" => "0", "username" => @user.username, "password" => "evankorth"}} response.should redirect_to root_path end + it "redirects to / for a mobile user" do @request.env['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7' post :create, {"user" => {"remember_me" => "0", "username" => @user.username, "password" => "evankorth"}} response.should redirect_to root_path end + it 'queues up an update job' do service = Services::Facebook.new(:access_token => "yeah") @user.services << service - @user.save - Resque.should_receive(:enqueue).with(Job::UpdateServiceUsers, service.id) - post :create, {"user"=>{"remember_me"=>"0", "username"=> @user.username, - "password"=>"evankorth"}} + + post :create, {"user" => {"remember_me" => "0", "username" => @user.username, "password" => "evankorth"}} + end + end + + describe "#destroy" do + before do + sign_in :user, @user + end + it "redirects to / for a non-mobile user" do + delete :destroy + response.should redirect_to root_path + end + + it "redirects to / for a mobile user" do + @request.env['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7' + delete :destroy + response.should redirect_to root_path end end end \ No newline at end of file -- GitLab