From 7245619df4350c63d5d858c23efbe1057933a2e4 Mon Sep 17 00:00:00 2001 From: mo khan Date: Mon, 26 May 2014 16:34:16 -0600 Subject: split apart files and add first spec. --- lib/customer.rb | 46 ++++++++++++++++++++++++++++++++ lib/movie.rb | 12 +++++++++ lib/refactoring.rb | 66 ---------------------------------------------- lib/rental.rb | 7 +++++ spec/spec_helper.rb | 3 +++ spec/unit/customer_spec.rb | 10 +++++++ 6 files changed, 78 insertions(+), 66 deletions(-) create mode 100644 lib/customer.rb create mode 100644 lib/movie.rb delete mode 100644 lib/refactoring.rb create mode 100644 lib/rental.rb create mode 100644 spec/unit/customer_spec.rb diff --git a/lib/customer.rb b/lib/customer.rb new file mode 100644 index 0000000..c2ce3b0 --- /dev/null +++ b/lib/customer.rb @@ -0,0 +1,46 @@ +class Customer + attr_reader :name + + def initialize(name) + @name = name + @rentals = [] + end + + def add_rental(arg) + @rentals << arg + end + + def statement + total_amount, frequent_renter_points = 0, 0 + result = "Rental Record for #{@name}\n" + @rentals.each do |element| + this_amount = 0 + + # determine amounts for each line + case element.movie.price_code + when Movie::REGULAR + this_amount += 2 + this_amount += (element.days_rented - 2) * 1.5 if element.days_rented > 2 + when Movie::NEW_RELEASE + this_amount += element.days_rented * 3 + when Movie::CHILDRENS + this_amount += 1.5 + this_amount += (element.days_rented - 3) * 1.5 if element.days_rented > 3 + end + + # add frequent renter points + frequent_renter_points += 1 + # add bonus for a two day new release rental + if element.movie.price_code == Movie.NEW_RELEASE && element.days_rented > 1 + frequent_renter_points += 1 + end + # show figures for this rental + result += "\t" + element.movie.title + "\t" + this_amount.to_s + "\n" + total_amount += this_amount + end + # add footer lines + result += "Amount owed is #{total_amount}\n" + result += "You earned #{frequent_renter_points} frequent renter points" + result + end +end diff --git a/lib/movie.rb b/lib/movie.rb new file mode 100644 index 0000000..a085d46 --- /dev/null +++ b/lib/movie.rb @@ -0,0 +1,12 @@ +class Movie + REGULAR = 0 + NEW_RELEASE = 1 + CHILDRENS = 2 + + attr_reader :title + attr_accessor :price_code + + def initialize(title, price_code) + @title, @price_code = title, price_code + end +end diff --git a/lib/refactoring.rb b/lib/refactoring.rb deleted file mode 100644 index 52bfafb..0000000 --- a/lib/refactoring.rb +++ /dev/null @@ -1,66 +0,0 @@ -class Movie - REGULAR = 0 - NEW_RELEASE = 1 - CHILDRENS = 2 - - attr_reader :title - attr_accessor :price_code - - def initialize(title, price_code) - @title, @price_code = title, price_code - end -end - -class Rental - attr_reader :movie, :days_rented - - def initialize(movie, days_rented) - @movie, @days_rented = movie, days_rented - end -end - -class Customer - attr_reader :name - - def initialize(name) - @name = name - @rentals = [] - end - - def add_rental(arg) - @rentals << arg - end - - def statement - total_amount, frequent_renter_points = 0, 0 - result = "Rental Record for #{@name}\n" - @rentals.each do |element| - this_amount = 0 - - # determine amounts for each line - case element.movie.price_code - when Movie::REGULAR - this_amount += 2 - this_amount += (element.days_rented - 2) * 1.5 if element.days_rented > 2 - when Movie::NEW_RELEASE - this_amount += element.days_rented * 3 - when Movie::CHILDRENS - this_amount += 1.5 - this_amount += (element.days_rented - 3) * 1.5 if element.days_rented > 3 - end - - # add frequent renter points - frequent_renter_points += 1 - # add bonus for a two day new release rental - if element.movie.price_code == Movie.NEW_RELEASE && element.days_rented > 1 - frequent_renter_points += 1 - end - # show figures for this rental - result += "\t" + element.movie.title + "\t" + this_amount.to_s + "\n" - total_amount += this_amount - end - # add footer lines - result += "Amount owed is #{total_amount}\n" - result += "You earned #{frequent_renter_points} frequent renter points" - result - end \ No newline at end of file diff --git a/lib/rental.rb b/lib/rental.rb new file mode 100644 index 0000000..3409359 --- /dev/null +++ b/lib/rental.rb @@ -0,0 +1,7 @@ +class Rental + attr_reader :movie, :days_rented + + def initialize(movie, days_rented) + @movie, @days_rented = movie, days_rented + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index dbc4f1a..8c72aae 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,6 +4,9 @@ # loaded once. # # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +require 'customer' +require 'movie' +require 'rental' RSpec.configure do |config| config.treat_symbols_as_metadata_keys_with_true_values = true config.run_all_when_everything_filtered = true diff --git a/spec/unit/customer_spec.rb b/spec/unit/customer_spec.rb new file mode 100644 index 0000000..703693e --- /dev/null +++ b/spec/unit/customer_spec.rb @@ -0,0 +1,10 @@ +require "spec_helper" + +describe Customer do + describe "#statement" do + it "produces a statement" do + customer = Customer.new('george') + customer.statement.should_not be_nil + end + end +end -- cgit v1.2.3