I have a controller sessions that can create session. I'd like to call it from the console, like controller.create. Here is the action:
def create
#raise request.env["omniauth.auth"].to_yaml
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
user.create_or_update_profile(auth)
session[:user_id] = user.id
if user.needs_to_create_profile?
redirect_to new_profile_path, :notice => "Signed in!. We just need your contact e-mail"
else
redirect_to root_url, :notice => "Signed in!"
end
end
As the two answers said, you should not be calling controller methods from your models. It is not recommended. Read into Model View Controller (MVC). To keep things independent.
Action Controller is the C in MVC. After the router has determined which controller to use for a request, the controller is responsible for making sense of the request and producing the appropriate output.
Routing decides which controller receives which requests. Often, there is more than one route to each controller, and different routes can be served by different actions. Each action's purpose is to collect information to provide it to a view.
From the console:
include ActionController::TestProcess
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@controller = SomeController.new
@request.env["omniauth.auth"] = {'provider' => "twitter", 'uid' => "1234", 'user_info' => {'name' => "foo"}}
app.get "/signup" etc
From rspec:
it "should allow login" do
request.env["omniauth.auth"] = {'provider' => "twitter", 'uid' => "1234", 'user_info' => {'name' => "foo"}}
post :create
puts @current_user.name
assigns(@current_user).should_not be_nil
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With