Skip to content
Browse files

Done with Chapter 9

  • Loading branch information...
1 parent f52f1aa commit 1fa707e1df4589b5c90d7836e4d3ecc34aad95a5 @cken99 committed May 8, 2011
View
BIN .redcar/lucene/_2i.cfs
Binary file not shown.
View
BIN .redcar/lucene/segments.gen
Binary file not shown.
View
BIN .redcar/lucene/segments_2b
Binary file not shown.
View
2 .redcar/lucene_last_updated
@@ -1 +1 @@
-1304822047
+1304835436
View
17 .redcar/tags
@@ -1,4 +1,4 @@
-1304822047
+1304835436
AddEmailUniquenessIndex /Users/chris/dev/rails_projects/sample_app/db/migrate/20110505013321_add_email_uniqueness_index.rb class AddEmailUniquenessIndex
AddPasswordToUsers /Users/chris/dev/rails_projects/sample_app/db/migrate/20110505023109_add_password_to_users.rb class AddPasswordToUsers
AddSaltToUsers /Users/chris/dev/rails_projects/sample_app/db/migrate/20110505045344_add_salt_to_users.rb class AddSaltToUsers
@@ -9,6 +9,8 @@ CreateUsers /Users/chris/dev/rails_projects/sample_app/db/migrate/20110504232921
PagesController /Users/chris/dev/rails_projects/sample_app/app/controllers/pages_controller.rb class PagesController
PagesHelper /Users/chris/dev/rails_projects/sample_app/app/helpers/pages_helper.rb module PagesHelper
SampleApp /Users/chris/dev/rails_projects/sample_app/config/application.rb module SampleApp
+SessionsController /Users/chris/dev/rails_projects/sample_app/app/controllers/sessions_controller.rb class SessionsController
+SessionsHelper /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb module SessionsHelper
Str /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function Str(key, holder, stack)
Type /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function Type(o)
User /Users/chris/dev/rails_projects/sample_app/app/models/user.rb class User
@@ -23,6 +25,7 @@ all /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js f
any /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function any(iterator, context)
argumentNames /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function argumentNames()
authenticate /Users/chris/dev/rails_projects/sample_app/app/models/user.rb def self.authenticate(email, submitted_password)
+authenticate_with_salt /Users/chris/dev/rails_projects/sample_app/app/models/user.rb def self.authenticate_with_salt(id, cookie_salt)
bind /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function bind(context)
bindAsEventListener /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function bindAsEventListener(context)
blank /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function blank()
@@ -40,16 +43,20 @@ compact /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.
concat /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function concat()
contact /Users/chris/dev/rails_projects/sample_app/app/controllers/pages_controller.rb def contact
copy /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function copy(methods, destination, onlyIfAbsent)
+create /Users/chris/dev/rails_projects/sample_app/app/controllers/sessions_controller.rb def create
create /Users/chris/dev/rails_projects/sample_app/app/controllers/users_controller.rb def create
create /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function create()
cssNameFor /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function cssNameFor(key)
cumulativeOffset /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function cumulativeOffset(element)
cumulativeScrollOffset /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function cumulativeScrollOffset(element)
+current_user /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def current_user
+current_user= /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def current_user=(user)
curry /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function curry()
dasherize /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function dasherize()
defer /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function defer()
define /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function define(D)
delay /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function delay(timeout)
+destroy /Users/chris/dev/rails_projects/sample_app/app/controllers/sessions_controller.rb def destroy
detect /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function detect(iterator, context)
dirCheck /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML )
dirNodeCheck /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML )
@@ -138,6 +145,7 @@ keys /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js
klass /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function klass()
last /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function last()
lastIndexOf /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function lastIndexOf(item, i)
+logo /Users/chris/dev/rails_projects/sample_app/app/helpers/application_helper.rb def logo
make_salt /Users/chris/dev/rails_projects/sample_app/app/models/user.rb def make_salt
match /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function match()
match /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function match(element, selector)
@@ -147,6 +155,7 @@ merge /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js
merge /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function merge(object)
methodize /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function methodize()
min /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function min(iterator, context)
+new /Users/chris/dev/rails_projects/sample_app/app/controllers/sessions_controller.rb def new
new /Users/chris/dev/rails_projects/sample_app/app/controllers/users_controller.rb def new
observe /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function observe(element, eventName, handler)
on /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function on(element, eventName, selector, callback)
@@ -164,6 +173,7 @@ prepareReplacement /Users/chris/dev/rails_projects/sample_app/public/javascripts
purgeElement /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function purgeElement(element)
reject /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function reject(iterator, context)
relativize /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function relativize(element)
+remember_token /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def remember_token
reverse /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function reverse(inline)
round /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function round()
scan /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function scan(pattern, iterator)
@@ -172,6 +182,9 @@ select /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.j
select /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function select(selector, scope)
set /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function set(key, value)
show /Users/chris/dev/rails_projects/sample_app/app/controllers/users_controller.rb def show
+sign_in /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def sign_in(user)
+sign_out /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def sign_out
+signed_in? /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def signed_in?
size /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function size()
size /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function size()
sortBy /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function sortBy(iterator, context)
@@ -187,6 +200,7 @@ sub /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js f
subclass /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function subclass()
succ /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function succ()
succ /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function succ()
+test_sign_in /Users/chris/dev/rails_projects/sample_app/spec/spec_helper.rb def test_sign_in(user)
times /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function times(count)
times /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function times(iterator, context)
title /Users/chris/dev/rails_projects/sample_app/app/helpers/application_helper.rb def title
@@ -218,6 +232,7 @@ up /Users/chris/dev/rails_projects/sample_app/db/migrate/20110505045344_add_salt
update /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function update(array, args)
update /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function update(element, content)
update /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function update(object)
+user_from_remember_token /Users/chris/dev/rails_projects/sample_app/app/helpers/sessions_helper.rb def user_from_remember_token
values /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function values()
values /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function values(object)
viewportOffset /Users/chris/dev/rails_projects/sample_app/public/javascripts/prototype.js function viewportOffset(forElement)
View
1 app/controllers/application_controller.rb
@@ -1,3 +1,4 @@
class ApplicationController < ActionController::Base
protect_from_forgery
+ include SessionsHelper
end
View
25 app/controllers/sessions_controller.rb
@@ -0,0 +1,25 @@
+class SessionsController < ApplicationController
+
+def new
+ @title = "Sign in"
+ end
+
+ def create
+ user = User.authenticate(params[:session][:email],
+ params[:session][:password])
+ if user.nil?
+ flash.now[:error] = "Invalid email/password combination."
+ @title = "Sign in"
+ render 'new'
+ else
+ sign_in user
+ redirect_to user
+ end
+ end
+
+ def destroy
+ sign_out
+ redirect_to root_path
+ end
+
+end
View
1 app/controllers/users_controller.rb
@@ -13,6 +13,7 @@ def new
def create
@user = User.new(params[:user])
if @user.save
+ sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
View
4 app/helpers/application_helper.rb
@@ -10,4 +10,8 @@ def title
end
end
+ def logo
+ image_tag("logo.png", :alt => "Sample App", :class => "round")
+ end
+
end
View
35 app/helpers/sessions_helper.rb
@@ -0,0 +1,35 @@
+module SessionsHelper
+
+ def sign_in(user)
+ cookies.permanent.signed[:remember_token] = [user.id, user.salt]
+ self.current_user = user
+ end
+
+ def current_user=(user)
+ @current_user = user
+ end
+
+ def current_user
+ @current_user ||= user_from_remember_token
+ end
+
+ def signed_in?
+ !current_user.nil?
+ end
+
+ def sign_out
+ cookies.delete(:remember_token)
+ self.current_user = nil
+ end
+
+ private
+
+ def user_from_remember_token
+ User.authenticate_with_salt(*remember_token)
+ end
+
+ def remember_token
+ cookies.signed[:remember_token] || [nil, nil]
+ end
+
+end
View
5 app/models/user.rb
@@ -42,6 +42,11 @@ def self.authenticate(email, submitted_password)
return user if user.has_password?(submitted_password)
end
+ def self.authenticate_with_salt(id, cookie_salt)
+ user = find_by_id(id)
+ (user && user.salt == cookie_salt) ? user : nil
+ end
+
before_save :encrypt_password
private
View
10 app/views/layouts/_header.html.erb
@@ -1,11 +1,17 @@
<header>
- <% logo = image_tag("logo.png", :alt => "Sample App", :class => "round") %>
<%= link_to logo, root_path %>
<nav class="round">
<ul>
<li><%= link_to "Home", root_path %></li>
+ <% if signed_in? %>
+ <li><%= link_to "Profile", current_user %></li>
+ <% end %>
<li><%= link_to "Help", help_path %></li>
- <li><%= link_to "Sign in", '#' %></li>
+ <% if signed_in? %>
+ <li><%= link_to "Sign out", signout_path, :method => :delete %></li>
+ <% else %>
+ <li><%= link_to "Sign in", signin_path %></li>
+ <% end %>
</ul>
</nav>
</header>
View
17 app/views/sessions/new.html.erb
@@ -0,0 +1,17 @@
+<h1>Sign in</h1>
+
+<%= form_for(:session, :url => sessions_path) do |f| %>
+ <div class="field">
+ <%= f.label :email %><br />
+ <%= f.text_field :email %>
+ </div>
+ <div class="field">
+ <%= f.label :password %><br />
+ <%= f.password_field :password %>
+ </div>
+ <div class="actions">
+ <%= f.submit "Sign in" %>
+ </div>
+<% end %>
+
+<p>New user? <%= link_to "Sign up now!", signup_path %></p>
View
5 config/routes.rb
@@ -1,8 +1,11 @@
SampleApp::Application.routes.draw do
resources :users
-
+ resources :sessions, :only => [:new, :create, :destroy]
+
match '/signup', :to => 'users#new'
+ match '/signin', :to => 'sessions#new'
+ match '/signout', :to => 'sessions#destroy'
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
View
74 spec/controllers/sessions_controller_spec.rb
@@ -0,0 +1,74 @@
+require 'spec_helper'
+
+describe SessionsController do
+
+ render_views
+
+ describe "GET 'new'" do
+
+ it "should be successful" do
+ get :new
+ response.should be_success
+ end
+
+ it "should have the right title" do
+ get :new
+ response.should have_selector("title", :content => "Sign in")
+ end
+ end
+
+ describe "POST 'create'" do
+
+ describe "with valid email and password" do
+
+ before(:each) do
+ @user = Factory(:user)
+ @attr = { :email => @user.email, :password => @user.password }
+ end
+
+ it "should sign the user in" do
+ post :create, :session => @attr
+ controller.current_user.should == @user
+ controller.should be_signed_in
+ end
+
+ it "should redirect to the user show page" do
+ post :create, :session => @attr
+ response.should redirect_to(user_path(@user))
+ end
+ end
+
+ describe "invalid signin" do
+
+ before(:each) do
+ @attr = { :email => "email@example.com", :password => "invalid" }
+ end
+
+ it "should re-render the new page" do
+ post :create, :session => @attr
+ response.should render_template('new')
+ end
+
+ it "should have the right title" do
+ post :create, :session => @attr
+ response.should have_selector("title", :content => "Sign in")
+ end
+
+ it "should have a flash.now message" do
+ post :create, :session => @attr
+ flash.now[:error].should =~ /invalid/i
+ end
+ end
+ end
+
+ describe "DELETE 'destroy'" do
+
+ it "should sign a user out" do
+ test_sign_in(Factory(:user))
+ delete :destroy
+ controller.should_not be_signed_in
+ response.should redirect_to(root_path)
+ end
+ end
+
+end
View
5 spec/controllers/users_controller_spec.rb
@@ -96,6 +96,11 @@
flash[:success].should =~ /welcome to the sample app/i
end
+ it "should sign the user in" do
+ post :create, :user => @attr
+ controller.should be_signed_in
+ end
+
end
end
View
33 spec/requests/layout_links_spec.rb
@@ -26,4 +26,37 @@
get '/signup'
response.should have_selector('title', :content => "Sign up")
end
+
+ describe "when not signed in" do
+ it "should have a signin link" do
+ visit root_path
+ response.should have_selector("a", :href => signin_path,
+ :content => "Sign in")
+ end
+ end
+
+ describe "when signed in" do
+
+ before(:each) do
+ @user = Factory(:user)
+ visit signin_path
+ fill_in :email, :with => @user.email
+ fill_in :password, :with => @user.password
+ click_button
+ end
+
+ it "should have a signout link" do
+ visit root_path
+ response.should have_selector("a", :href => signout_path,
+ :content => "Sign out")
+ end
+
+ it "should have a profile link" do
+ visit root_path
+ response.should have_selector("a", :href => user_path(@user),
+ :content => "Profile")
+ end
+
+ end
+
end
View
25 spec/requests/users_spec.rb
@@ -39,4 +39,29 @@
end
end
+ describe "sign in/out" do
+
+ describe "failure" do
+ it "should not sign a user in" do
+ visit signin_path
+ fill_in :email, :with => ""
+ fill_in :password, :with => ""
+ click_button
+ response.should have_selector("div.flash.error", :content => "Invalid")
+ end
+ end
+
+ describe "success" do
+ it "should sign a user in and out" do
+ user = Factory(:user)
+ visit signin_path
+ fill_in :email, :with => user.email
+ fill_in :password, :with => user.password
+ click_button
+ controller.should be_signed_in
+ click_link "Sign out"
+ controller.should_not be_signed_in
+ end
+ end
+ end
end
View
5 spec/spec_helper.rb
@@ -29,6 +29,11 @@
# examples within a transaction, comment the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
+
+ def test_sign_in(user)
+ controller.sign_in(user)
+ end
+
end
end
View
148 webrat.log
@@ -8,3 +8,151 @@ REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Exa
REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET / with {} and HTTP headers {}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET / with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"user@example.com", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
+REQUESTING PAGE: GET /signup with {} and HTTP headers {}
+REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"", "password"=>""}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET /signin with {} and HTTP headers {}
+REQUESTING PAGE: POST /sessions with {"utf8"=>"\xE2\x9C\x93", "session"=>{"email"=>"chris@example.com", "password"=>"foobar"}, "commit"=>"Sign in"} and HTTP headers {"HTTP_REFERER"=>"/signin"}
+REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/sessions"}
+REQUESTING PAGE: GET /signout with {} and HTTP headers {"HTTP_REFERER"=>"http://www.example.com/users/1"}
+REQUESTING PAGE: GET http://www.example.com/ with {} and HTTP headers {"HTTP_REFERER"=>"/signout"}

0 comments on commit 1fa707e

Please sign in to comment.
Something went wrong with that request. Please try again.