From 0285023eab939af5513486484b1ddebbbb689a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Mota?= Date: Tue, 30 Apr 2013 18:19:38 +0100 Subject: [PATCH] Extract Class. --- extract-class/lib/after.rb | 54 +++++++++++++++++++++++++++++++++++++ extract-class/lib/before.rb | 25 +++++++++++++++++ extract-class/test/test.rb | 11 ++++++++ 3 files changed, 90 insertions(+) diff --git a/extract-class/lib/after.rb b/extract-class/lib/after.rb index e69de29..0b5b4ca 100644 --- a/extract-class/lib/after.rb +++ b/extract-class/lib/after.rb @@ -0,0 +1,54 @@ +class Student + + attr_reader :terms + + def initialize + @terms = [ + Term.new(:first), + Term.new(:second), + Term.new(:third) + ] + end + + def set_all_grades_to grade + terms.each { |term| term.set_all_grades_to(grade) } + end + + def first_term_grade + term(:first).grade + end + + def second_term_grade + term(:second).grade + end + + def third_term_grade + term(:third).grade + end + + def term reference + terms.find { |term| term.name == reference } + end +end + +class Term + + attr_reader :name, :assiduity, :test, :behavior + + def initialize name + @name = name + @assiduity = 0 + @test = 0 + @behavior = 0 + end + + def set_all_grades_to grade + @assiduity = grade + @test = grade + @behavior = grade + end + + def grade + (assiduity + test + behavior) / 3 + end +end diff --git a/extract-class/lib/before.rb b/extract-class/lib/before.rb index e69de29..05af4d8 100644 --- a/extract-class/lib/before.rb +++ b/extract-class/lib/before.rb @@ -0,0 +1,25 @@ +class Student + attr_accessor :first_term_assiduity, :first_term_test, :first_term_behavior + attr_accessor :second_term_assiduity, :second_term_test, :second_term_behavior + attr_accessor :third_term_assiduity, :third_term_test, :third_term_behavior + + def set_all_grades_to grade + %w(first second third).each do |which_term| + %w(assiduity test behavior).each do |criteria| + send "#{which_term}_term_#{criteria}=".to_sym, grade + end + end + end + + def first_term_grade + (first_term_assiduity + first_term_test + first_term_behavior) / 3 + end + + def second_term_grade + (second_term_assiduity + second_term_test + second_term_behavior) / 3 + end + + def third_term_grade + (third_term_assiduity + third_term_test + third_term_behavior) / 3 + end +end diff --git a/extract-class/test/test.rb b/extract-class/test/test.rb index a8f6974..00766e4 100644 --- a/extract-class/test/test.rb +++ b/extract-class/test/test.rb @@ -3,3 +3,14 @@ require 'before' if ENV["BEFORE"] require 'after' unless ENV["BEFORE"] + +describe Student do + it "has a grade for all three terms" do + student = Student.new + student.set_all_grades_to 10 + + student.first_term_grade.must_equal 10 + student.second_term_grade.must_equal 10 + student.third_term_grade.must_equal 10 + end +end