Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.rspec
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ GEM
diff-lcs (1.1.3)
gherkin (2.10.0)
json (>= 1.4.6)
gherkin (2.10.0-x86-mingw32)
json (>= 1.4.6)
json (1.7.3)
rack (1.4.1)
rspec (2.10.0)
Expand All @@ -23,6 +25,7 @@ GEM

PLATFORMS
ruby
x86-mingw32

DEPENDENCIES
cucumber
Expand Down
22 changes: 22 additions & 0 deletions features/step_definitions/teacher_average_grade_steps.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Given /^I have multiple students$/ do
@teacher = Teacher.new
@student1 = Student.new
@student2 = Student.new
@student3 = Student.new
end

Given /^each one has submitted an assignment$/ do
@teacher.submit_assignment(@student1, Assignment.new)
@teacher.submit_assignment(@student2, Assignment.new)
@teacher.submit_assignment(@student3, Assignment.new)
end

When /^I give the assignments a grade$/ do
@teacher.record_grade(@student1, 95)
@teacher.record_grade(@student2, 50)
@teacher.record_grade(@student3, 80)
end

Then /^I can view the average grade for my class$/ do
@teacher.average_grade(@teacher.assignments).should eq(75)
end
11 changes: 11 additions & 0 deletions features/teacher_can_view_average_grade.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Feature: Teacher can view average grade for the class

As a Teacher
I can view the average grade for my class
So I can establish a grading curve

Scenario: Teacher can view average grade for the class
Given I have multiple students
And each one has submitted an assignment
When I give the assignments a grade
Then I can view the average grade for my class
8 changes: 8 additions & 0 deletions lib/teacher.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
class Teacher
attr_reader :assignments

def initialize
@assignments = {}
end
Expand All @@ -9,6 +11,12 @@ def record_grade(student, grade)
@assignments[student] = assignment
end

def average_grade(assignments)
class_grades = assignments.map { |student, assignment| assignment.grade }
sum_of_class_grades = class_grades.inject(:+)
sum_of_class_grades / assignments.size
end

def submit_assignment(student, assignment)
@assignments[student] = assignment
end
Expand Down
19 changes: 15 additions & 4 deletions spec/teacher_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,31 @@

describe Teacher do
it "should store assignments" do
student = stub
assignment = stub
student = double
assignment = double
subject.submit_assignment(student, assignment)
subject.assignment_for_student(student).should eq(assignment)
end


describe "should record a grade" do
it "should record the grade" do
student = stub
assignment = mock
student = double
assignment = double
assignment.should_receive(:grade=).with(95)
subject.submit_assignment(student, assignment)
subject.record_grade(student, 95)
end
end

describe "should provide an average grade for the class" do
it "should provide an average grade" do
assignment_doubles = {
student1: double("Assignment", grade: 95),
student2: double("Assignment", grade: 50),
student3: double("Assignment", grade: 80)
}
subject.average_grade(assignment_doubles).should eq(75)
end
end
end