Skip to content

Commit 67c07f1

Browse files
author
Ryan Bigg
committed
Section 6.5.5: Associate users to tickets when tickets are created
1 parent 048e606 commit 67c07f1

File tree

10 files changed

+58
-9
lines changed

10 files changed

+58
-9
lines changed

ticketee/app/controllers/application_controller.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,12 @@ def signed_in?
1414
env["warden"].authenticated?
1515
end
1616
helper_method :signed_in?
17+
18+
def require_sign_in!
19+
unless current_user.present?
20+
message = "You need to sign in or sign up before continuing."
21+
flash[:warning] = message
22+
redirect_to sign_in_url
23+
end
24+
end
1725
end

ticketee/app/controllers/tickets_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class TicketsController < ApplicationController
2+
before_action :require_sign_in!, except: [:show, :index]
23
before_action :set_project
34
before_action :set_ticket, only: [:show, :edit, :update, :destroy]
45

@@ -8,6 +9,7 @@ def new
89

910
def create
1011
@ticket = @project.tickets.build(ticket_params)
12+
@ticket.user = current_user
1113

1214
if @ticket.save
1315
flash[:success] = "Ticket has been created."

ticketee/app/models/ticket.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
class Ticket < ActiveRecord::Base
22
belongs_to :project
3+
belongs_to :user
34

45
validates :title, presence: true
56
validates :description, presence: true,

ticketee/app/views/tickets/show.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<div id='ticket'>
22
<h2><%= @ticket.title %></h2>
3+
<span id='author'>Created by <%= @ticket.user.email %></span>
34
<%= link_to "Edit Ticket",
45
[:edit, @project, @ticket],
56
class: "edit" %>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddUserIdToTickets < ActiveRecord::Migration
2+
def change
3+
add_reference :tickets, :user, index: true
4+
end
5+
end

ticketee/db/schema.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
t.integer "project_id"
2727
t.datetime "created_at", null: false
2828
t.datetime "updated_at", null: false
29+
t.integer "user_id"
2930
end
3031

3132
add_index "tickets", ["project_id"], name: "index_tickets_on_project_id"
33+
add_index "tickets", ["user_id"], name: "index_tickets_on_user_id"
3234

3335
create_table "users", force: true do |t|
3436
t.string "name"

ticketee/spec/features/creating_tickets_spec.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
require "rails_helper"
22

33
feature "Creating Tickets" do
4+
let(:user) { FactoryGirl.create(:user) }
5+
46
before do
5-
FactoryGirl.create(:project, name: "Internet Explorer")
7+
project = FactoryGirl.create(:project, name: "Internet Explorer")
68

79
visit '/'
8-
click_link "Internet Explorer"
10+
click_link project.name
11+
click_link "New Ticket"
12+
message = "You need to sign in or sign up before continuing."
13+
expect(page).to have_content(message)
14+
15+
fill_in "Email", with: user.email
16+
fill_in "Password", with: 'password'
17+
click_button "Sign in"
18+
19+
click_link project.name
920
click_link "New Ticket"
1021
end
1122

@@ -15,6 +26,9 @@
1526
click_button "Create Ticket"
1627

1728
expect(page).to have_content("Ticket has been created.")
29+
within "#ticket #author" do
30+
expect(page).to have_content("Created by #{user.email}")
31+
end
1832
end
1933

2034
scenario "Creating a ticket without valid attributes fails" do

ticketee/spec/features/deleting_tickets_spec.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
feature "Deleting tickets" do
44
let!(:project) { FactoryGirl.create(:project) }
5-
let!(:ticket) { FactoryGirl.create(:ticket, project: project) }
5+
let!(:user) { FactoryGirl.create(:user) }
6+
let!(:ticket) do
7+
FactoryGirl.create(:ticket, project: project, user: user)
8+
end
69

710
before do
11+
login_as(user)
812
visit "/"
913
click_link project.name
1014
click_link ticket.title

ticketee/spec/features/editing_tickets_spec.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
feature "Editing tickets" do
44
let!(:project) { FactoryGirl.create(:project) }
5-
let!(:ticket) { FactoryGirl.create(:ticket, project: project) }
5+
let!(:user) { FactoryGirl.create(:user) }
6+
let!(:ticket) do
7+
FactoryGirl.create(:ticket, project: project, user: user)
8+
end
69

710
before do
11+
login_as(user)
812
visit "/"
913
click_link project.name
1014
click_link ticket.title

ticketee/spec/features/viewing_tickets_spec.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@
22

33
feature "Viewing tickets" do
44
before do
5-
sublime = FactoryGirl.create(:project, name: "Sublime Text 3")
5+
sublime = FactoryGirl.create(:project,
6+
name: "Sublime Text 3")
67

7-
FactoryGirl.create(:ticket,
8+
user = FactoryGirl.create(:user)
9+
ticket = FactoryGirl.create(:ticket,
810
project: sublime,
911
title: "Make it shiny!",
10-
description: "Gradients! Starbursts! Oh my!")
12+
description: "Gradients! Starbursts! Oh my!",
13+
user: user
14+
)
15+
16+
ie = FactoryGirl.create(:project,
17+
name: "Internet Explorer")
1118

12-
ie = FactoryGirl.create(:project, name: "Internet Explorer")
1319
FactoryGirl.create(:ticket,
1420
project: ie,
1521
title: "Standards compliance",
16-
description: "Isn't a joke.")
22+
description: "Isn't a joke.",
23+
user: user
24+
)
1725

1826
visit "/"
1927
end

0 commit comments

Comments
 (0)