From 37185c8ef20ea7563fc36f9c7998fa9083d93ccb Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 4 Sep 2018 11:34:18 -0700 Subject: [PATCH 01/23] Add coverage directory to .gitignore file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..c0ac3dc53 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +coverage From d647a3c4417a75a63b8419cb22a5c6e4603a4f43 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 4 Sep 2018 11:35:30 -0700 Subject: [PATCH 02/23] First commit w/ guard --- lib/hotel.rb | 3 +++ spec/hotel_spec.rb | 7 +++++++ spec/spec_helper.rb | 4 ++++ 3 files changed, 14 insertions(+) create mode 100644 lib/hotel.rb create mode 100644 spec/hotel_spec.rb diff --git a/lib/hotel.rb b/lib/hotel.rb new file mode 100644 index 000000000..11fed5834 --- /dev/null +++ b/lib/hotel.rb @@ -0,0 +1,3 @@ +def hotel + return "hotel" +end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb new file mode 100644 index 000000000..ee8d5f28b --- /dev/null +++ b/spec/hotel_spec.rb @@ -0,0 +1,7 @@ +require_relative 'spec_helper' +describe 'hotel' do + it 'prints hotel' do + result = hotel() + expect(result).must_equal 'hotel' + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4d1e3fdc8..617bb5f97 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,6 @@ +require 'simplecov' +SimpleCov.start + require 'minitest' require 'minitest/autorun' require 'minitest/reporters' @@ -6,3 +9,4 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # Require_relative your lib files here! +require_relative '../lib/hotel' From 380801e4407290f1d2790e2d35a9233be45174d9 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 4 Sep 2018 15:33:41 -0700 Subject: [PATCH 03/23] added room.rb with one passing test --- Guardfile | 2 +- lib/reservation.rb | 7 +++++++ lib/reservation_keeper.rb | 10 ++++++++++ lib/room.rb | 16 ++++++++++++++++ spec/hotel_spec.rb | 1 + spec/reservation_keeper_spec.rb | 1 + spec/reservation_spec.rb | 0 spec/room_spec.rb | 23 +++++++++++++++++++++++ spec/spec_helper.rb | 2 ++ 9 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 lib/reservation.rb create mode 100644 lib/reservation_keeper.rb create mode 100644 lib/room.rb create mode 100644 spec/reservation_keeper_spec.rb create mode 100644 spec/reservation_spec.rb create mode 100644 spec/room_spec.rb diff --git a/Guardfile b/Guardfile index 6760f9177..fa59fc3ef 100644 --- a/Guardfile +++ b/Guardfile @@ -1,4 +1,4 @@ -guard :minitest, bundler: false, rubygems: false do +guard :minitest, bundler: false, autorun: false, rubygems: false do # with Minitest::Spec watch(%r{^spec/(.*)_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..ca2b304a9 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,7 @@ +# Keeps track of 1 reservation +class Reservation + + def total_cost_of_one_reservation() + + end +end diff --git a/lib/reservation_keeper.rb b/lib/reservation_keeper.rb new file mode 100644 index 000000000..82f1059b1 --- /dev/null +++ b/lib/reservation_keeper.rb @@ -0,0 +1,10 @@ +# Keeps track of the list of reservations +class ReservationKeeper + + def list_of_all_rooms + end + + def list_of_reservations + end + +end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..fa3229f3b --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,16 @@ +# Keeps track of the availibility of 1 room + +class Room + attr_reader :room_number, :availibility + + def initialize(room_number, availibility) + @room_number = room_number + + room_status = [:available, :unavailable] + if room_status.include? availibility + @availibility = availibility + else + raise ArgumentError, "Not a valid status" + end + end +end diff --git a/spec/hotel_spec.rb b/spec/hotel_spec.rb index ee8d5f28b..ea73c9b0f 100644 --- a/spec/hotel_spec.rb +++ b/spec/hotel_spec.rb @@ -1,4 +1,5 @@ require_relative 'spec_helper' + describe 'hotel' do it 'prints hotel' do result = hotel() diff --git a/spec/reservation_keeper_spec.rb b/spec/reservation_keeper_spec.rb new file mode 100644 index 000000000..ae9c220ea --- /dev/null +++ b/spec/reservation_keeper_spec.rb @@ -0,0 +1 @@ +require_relative 'spec_helper' diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb new file mode 100644 index 000000000..e69de29bb diff --git a/spec/room_spec.rb b/spec/room_spec.rb new file mode 100644 index 000000000..df1c10038 --- /dev/null +++ b/spec/room_spec.rb @@ -0,0 +1,23 @@ +require 'simplecov' +SimpleCov.start +require_relative 'spec_helper' + +# describe "Room" do + # ROOM_NUMBER = 1 + # AVAILIBILITY = availibility + # room.new(room_number, availibility) + + describe 'initialize' do + it 'takes a room number and checks the availibility' do + room_number = 1 + availibility = :available + room = Room.new(room_number, availibility) + + expect(room).must_respond_to :room_number + expect(room.room_number).must_equal 1 + + expect(room).must_respond_to :availibility + expect(room.availibility).must_equal :available + end + end +# end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 617bb5f97..3b4b9149b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,3 +10,5 @@ # Require_relative your lib files here! require_relative '../lib/hotel' +require_relative '../lib/room' +require_relative '../lib/reservation_keeper' From 332855bb28e93acb314652db92d96b46b9b3be96 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 4 Sep 2018 15:45:23 -0700 Subject: [PATCH 04/23] room.rb with all tests written so far passing --- lib/room.rb | 1 + spec/room_spec.rb | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/lib/room.rb b/lib/room.rb index fa3229f3b..6358cf65f 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,4 +1,5 @@ # Keeps track of the availibility of 1 room +VALID_ROOMS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] class Room attr_reader :room_number, :availibility diff --git a/spec/room_spec.rb b/spec/room_spec.rb index df1c10038..0dc172d63 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -19,5 +19,14 @@ expect(room).must_respond_to :availibility expect(room.availibility).must_equal :available end + + it 'raises an ArgumentError for an invalid room status' do + invalid_status = ['here', 15, :bogus, nil] + invalid_status.each do |availibility| + expect { + Room.new(1, availibility) + }.must_raise ArgumentError + end + end end # end From a4dc534b357724ce504abb830ca22897e2b177c8 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Wed, 5 Sep 2018 11:39:14 -0700 Subject: [PATCH 05/23] simplified room class to take a room_number only --- lib/room.rb | 20 +++++++++----------- spec/room_spec.rb | 47 ++++++++++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/lib/room.rb b/lib/room.rb index 6358cf65f..73c609ea0 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,17 +1,15 @@ # Keeps track of the availibility of 1 room -VALID_ROOMS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - class Room - attr_reader :room_number, :availibility + attr_reader :room_number - def initialize(room_number, availibility) - @room_number = room_number + RATE = 200 - room_status = [:available, :unavailable] - if room_status.include? availibility - @availibility = availibility - else - raise ArgumentError, "Not a valid status" - end + def initialize(room_number) + @room_number = room_number end + + # def is_room_available(date) + # # TODO check list of reservations + # return true + # end end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index 0dc172d63..b4a7872bd 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -2,31 +2,40 @@ SimpleCov.start require_relative 'spec_helper' -# describe "Room" do - # ROOM_NUMBER = 1 - # AVAILIBILITY = availibility - # room.new(room_number, availibility) - describe 'initialize' do - it 'takes a room number and checks the availibility' do + it 'takes a room number' do room_number = 1 - availibility = :available - room = Room.new(room_number, availibility) + # availibility = :available + room = Room.new(room_number) expect(room).must_respond_to :room_number expect(room.room_number).must_equal 1 - expect(room).must_respond_to :availibility - expect(room.availibility).must_equal :available - end - - it 'raises an ArgumentError for an invalid room status' do - invalid_status = ['here', 15, :bogus, nil] - invalid_status.each do |availibility| - expect { - Room.new(1, availibility) - }.must_raise ArgumentError - end + # expect(room).must_respond_to :availibility + # expect(room.availibility).must_equal :available end end + + # it 'raises an ArgumentError for an invalid room status' do + # invalid_status = ['here', 15, :bogus, nil] + # invalid_status.each do |availibility| + # expect { + # Room.new(1, availibility) + # }.must_raise ArgumentError + # end + # end + + # it 'raises an ArgumentError for an invalid room number' do + # invalid_room = [21 , -3, nil] + # invalid_room.each do |room| + # expect { + # Room.new(room_number, availibility).must_raise ArgumentError + # } + # end + # end + + # describe 'is room available' do + # + # end + # end # end From 2f792881eeac7ea539518c8fb047a5ad8a6839fe Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Wed, 5 Sep 2018 14:17:48 -0700 Subject: [PATCH 06/23] added reservation class with check_in, check_out and room. Has working test --- lib/hotel.rb | 3 +++ lib/reservation.rb | 17 ++++++++++++++--- lib/reservation_keeper.rb | 2 +- spec/reservation_spec.rb | 25 +++++++++++++++++++++++++ spec/room_spec.rb | 2 +- spec/spec_helper.rb | 1 + 6 files changed, 45 insertions(+), 5 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 11fed5834..4f485ab41 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -1,3 +1,6 @@ + +ROOM_LIST = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + def hotel return "hotel" end diff --git a/lib/reservation.rb b/lib/reservation.rb index ca2b304a9..c4bbc8212 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,7 +1,18 @@ # Keeps track of 1 reservation -class Reservation +require_relative 'room' +require 'date' - def total_cost_of_one_reservation() - +class Reservation < Room + attr_reader :check_in_date, :check_out_date, :room + + def initialize(check_in_date, check_out_date, room) + @check_in_date = check_in_date + @check_out_date = check_out_date + @room = room end + + + # def total_cost_of_one_reservation() + # + # end end diff --git a/lib/reservation_keeper.rb b/lib/reservation_keeper.rb index 82f1059b1..043dc5973 100644 --- a/lib/reservation_keeper.rb +++ b/lib/reservation_keeper.rb @@ -1,5 +1,5 @@ # Keeps track of the list of reservations -class ReservationKeeper +class ReservationTracker def list_of_all_rooms end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index e69de29bb..f8c1f2a35 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -0,0 +1,25 @@ +require 'simplecov' +SimpleCov.start + +require_relative 'spec_helper' + +describe 'Reservation' do + let (:check_in_date) { Date.new(2018, 9, 5) } + let (:check_out_date) { Date.new(2018, 9, 8) } + let (:room) { Room.new(15) } + let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} + + describe 'initialize' do + it 'takes a check in date, check out date, and room number' do + + expect(a_reservation).must_respond_to :check_in_date + expect(a_reservation.check_in_date).must_equal check_in_date + + expect(a_reservation).must_respond_to :check_out_date + expect(a_reservation.check_out_date).must_equal check_out_date + + expect(a_reservation).must_respond_to :room + expect(a_reservation.room).must_equal room + end + end +end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index b4a7872bd..eb9a2951a 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -9,7 +9,7 @@ room = Room.new(room_number) expect(room).must_respond_to :room_number - expect(room.room_number).must_equal 1 + expect(room.room_number).must_equal room_number # expect(room).must_respond_to :availibility # expect(room.availibility).must_equal :available diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3b4b9149b..b1ce0f083 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,3 +12,4 @@ require_relative '../lib/hotel' require_relative '../lib/room' require_relative '../lib/reservation_keeper' +require_relative '../lib/reservation' From d7fb0cd006c8cc7dae0cbe644bd7f2b92e4041f5 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Wed, 5 Sep 2018 15:32:29 -0700 Subject: [PATCH 07/23] created booking_range and rate definitions. --- lib/reservation.rb | 16 ++++++++++++---- lib/room.rb | 2 +- spec/reservation_spec.rb | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index c4bbc8212..6d55079ba 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -2,7 +2,7 @@ require_relative 'room' require 'date' -class Reservation < Room +class Reservation attr_reader :check_in_date, :check_out_date, :room def initialize(check_in_date, check_out_date, room) @@ -11,8 +11,16 @@ def initialize(check_in_date, check_out_date, room) @room = room end + def booking_range + if check_out_date < check_in_date + raise ArgumentError, 'The end date cannot be before the start date.' + else + date_range = check_out_date - check_in_date + end + return date_range + end - # def total_cost_of_one_reservation() - # - # end + def rate + booking_range * 200 + end end diff --git a/lib/room.rb b/lib/room.rb index 73c609ea0..f7ef7494e 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,4 +1,4 @@ -# Keeps track of the availibility of 1 room +# Keeps track of 1 room class Room attr_reader :room_number diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index f8c1f2a35..6be5c3a9c 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -8,6 +8,8 @@ let (:check_out_date) { Date.new(2018, 9, 8) } let (:room) { Room.new(15) } let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} + let (:invalid_date) { Date.new(1985, 9, 8) } + let (:rate) {(check_out_date - check_in_date) * RATE} describe 'initialize' do it 'takes a check in date, check out date, and room number' do @@ -21,5 +23,17 @@ expect(a_reservation).must_respond_to :room expect(a_reservation.room).must_equal room end + + describe 'invalid_date' do + it 'raises an ArgumentError for a date out of range' do + + end + end + + describe 'rate' do + it 'calculates the rate correctly for a stay in a room' do + expect(a_reservation.rate).must_equal 600 + end + end end end From ad67f98bec8d5c63fe4818c13dc00d64f840e67f Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Wed, 5 Sep 2018 16:10:16 -0700 Subject: [PATCH 08/23] updated reservation.rb and spec file with passing tests for booking_range and rate. --- lib/reservation.rb | 8 ++------ spec/reservation_spec.rb | 9 ++++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 6d55079ba..a87a042ae 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -9,15 +9,11 @@ def initialize(check_in_date, check_out_date, room) @check_in_date = check_in_date @check_out_date = check_out_date @room = room + raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date end def booking_range - if check_out_date < check_in_date - raise ArgumentError, 'The end date cannot be before the start date.' - else - date_range = check_out_date - check_in_date - end - return date_range + return date_range = check_out_date - check_in_date end def rate diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 6be5c3a9c..e6e875588 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -8,7 +8,8 @@ let (:check_out_date) { Date.new(2018, 9, 8) } let (:room) { Room.new(15) } let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} - let (:invalid_date) { Date.new(1985, 9, 8) } + let (:invalid_range) { check_out_date <= check_in_date } + # let (:bad_date) { Date.new(1985, 12, 15)} let (:rate) {(check_out_date - check_in_date) * RATE} describe 'initialize' do @@ -24,10 +25,8 @@ expect(a_reservation.room).must_equal room end - describe 'invalid_date' do - it 'raises an ArgumentError for a date out of range' do - - end + it 'raises an ArgumentError for an invalid date range' do + expect{ (Rservation.new(invalid_range)) }.must_raise StandardError end describe 'rate' do From a969eda0ca09323943fc060d13fc0a980793e4e9 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 10:29:50 -0700 Subject: [PATCH 09/23] Add DS_Store to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c0ac3dc53..09463d230 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,5 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc coverage + +.DS_Store From cbc8582ce8b01455b3ac167231f89f12f0c90ea9 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 10:32:59 -0700 Subject: [PATCH 10/23] can access the list of all of the rooms in the hotel with passing tests complete --- lib/reservation.rb | 30 ++++++++++++------------ lib/reservation_keeper.rb | 10 -------- lib/reservation_tracker.rb | 36 +++++++++++++++++++++++++++++ lib/room.rb | 24 +++++++++++--------- spec/reservation_keeper_spec.rb | 1 - spec/reservation_spec.rb | 25 +++++++++++--------- spec/reservation_tracker_spec.rb | 39 ++++++++++++++++++++++++++++++++ spec/spec_helper.rb | 2 +- 8 files changed, 119 insertions(+), 48 deletions(-) delete mode 100644 lib/reservation_keeper.rb create mode 100644 lib/reservation_tracker.rb delete mode 100644 spec/reservation_keeper_spec.rb create mode 100644 spec/reservation_tracker_spec.rb diff --git a/lib/reservation.rb b/lib/reservation.rb index a87a042ae..bd481f608 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -2,21 +2,23 @@ require_relative 'room' require 'date' -class Reservation - attr_reader :check_in_date, :check_out_date, :room +# module Hotel + class Reservation + attr_reader :check_in_date, :check_out_date, :room - def initialize(check_in_date, check_out_date, room) - @check_in_date = check_in_date - @check_out_date = check_out_date - @room = room - raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date - end + def initialize(check_in_date, check_out_date, room) + @check_in_date = check_in_date + @check_out_date = check_out_date + @room = room + raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date + end - def booking_range - return date_range = check_out_date - check_in_date - end + def book_room + return date_range = check_out_date - check_in_date + end - def rate - booking_range * 200 + def rate + book_room * 200 + end end -end +# end diff --git a/lib/reservation_keeper.rb b/lib/reservation_keeper.rb deleted file mode 100644 index 043dc5973..000000000 --- a/lib/reservation_keeper.rb +++ /dev/null @@ -1,10 +0,0 @@ -# Keeps track of the list of reservations -class ReservationTracker - - def list_of_all_rooms - end - - def list_of_reservations - end - -end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb new file mode 100644 index 000000000..aca7bb2b1 --- /dev/null +++ b/lib/reservation_tracker.rb @@ -0,0 +1,36 @@ +require 'pry' +require_relative 'room' +# Keeps track of the list of reservations +# module Hotel +class ReservationTracker + attr_reader :rooms + + def initialize + @rooms = create_rooms + # @reservations = [] + # @existing_reservations = [] + # @unreserved_rooms = [] + + end + + def create_rooms + rooms = [] + (1..20).each do |room| + room = Room.new(room) + rooms << room + end + # binding.pry + return rooms + end + + # to access the list of all of the rooms in the hotel + def list_of_all_rooms + # binding.pry + return @rooms + end + + # def list_of_reservations + # end + +end +# end diff --git a/lib/room.rb b/lib/room.rb index f7ef7494e..ccec3c506 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,15 +1,17 @@ # Keeps track of 1 room -class Room - attr_reader :room_number +# module Hotel + class Room + attr_reader :room_number - RATE = 200 + RATE = 200 - def initialize(room_number) - @room_number = room_number - end + def initialize(room_number) + @room_number = room_number + end - # def is_room_available(date) - # # TODO check list of reservations - # return true - # end -end + # def is_room_available(date) + # # TODO check list of reservations + # return true + # end + end +# end diff --git a/spec/reservation_keeper_spec.rb b/spec/reservation_keeper_spec.rb deleted file mode 100644 index ae9c220ea..000000000 --- a/spec/reservation_keeper_spec.rb +++ /dev/null @@ -1 +0,0 @@ -require_relative 'spec_helper' diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index e6e875588..87a5c0417 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -7,22 +7,25 @@ let (:check_in_date) { Date.new(2018, 9, 5) } let (:check_out_date) { Date.new(2018, 9, 8) } let (:room) { Room.new(15) } - let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} - let (:invalid_range) { check_out_date <= check_in_date } - # let (:bad_date) { Date.new(1985, 12, 15)} - let (:rate) {(check_out_date - check_in_date) * RATE} + # let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} + # let (:invalid_range) { check_out_date <= check_in_date } + # # let (:bad_date) { Date.new(1985, 12, 15)} + # let (:rate) {(check_out_date - check_in_date) * RATE} + before do + @reservation = Reservation.new(check_in_date, check_out_date, room) + end describe 'initialize' do it 'takes a check in date, check out date, and room number' do - expect(a_reservation).must_respond_to :check_in_date - expect(a_reservation.check_in_date).must_equal check_in_date + expect(@reservation).must_respond_to :check_in_date + expect(@reservation.check_in_date).must_equal check_in_date - expect(a_reservation).must_respond_to :check_out_date - expect(a_reservation.check_out_date).must_equal check_out_date + expect(@reservation).must_respond_to :check_out_date + expect(@reservation.check_out_date).must_equal check_out_date - expect(a_reservation).must_respond_to :room - expect(a_reservation.room).must_equal room + expect(@reservation).must_respond_to :room + expect(@reservation.room).must_equal room end it 'raises an ArgumentError for an invalid date range' do @@ -31,7 +34,7 @@ describe 'rate' do it 'calculates the rate correctly for a stay in a room' do - expect(a_reservation.rate).must_equal 600 + expect(@reservation.rate).must_equal 600 end end end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb new file mode 100644 index 000000000..b89e31581 --- /dev/null +++ b/spec/reservation_tracker_spec.rb @@ -0,0 +1,39 @@ +require 'simplecov' +SimpleCov.start +require 'pry' + +require_relative 'spec_helper' + +describe 'ReservationTracker class' do + describe 'initialize' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'has an array of all rooms in hotel' do + expect(@reservation_tracker.create_rooms).must_be_kind_of Array + end + + it 'has 20 rooms in the hotel' do + expect(@reservation_tracker.create_rooms.length).must_equal 20 + end + end + # it 'returns a list of all the rooms in the hotel' do + # # arrange + # # act + # # assert + # expect(list_of_all_rooms.room_number).must_be_kind_of Array + # + # end + describe 'list_of_all_rooms method' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'returns an array of rooms in hotel' do + expect(@reservation_tracker.list_of_all_rooms).must_be_kind_of Array + # binding.pry + expect(@reservation_tracker.list_of_all_rooms.length).must_equal 20 + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b1ce0f083..3ef5b7742 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -11,5 +11,5 @@ # Require_relative your lib files here! require_relative '../lib/hotel' require_relative '../lib/room' -require_relative '../lib/reservation_keeper' +require_relative '../lib/reservation_tracker' require_relative '../lib/reservation' From b5ff6f693f6ef0d429212ac0cf5c2c9e77265bc1 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 11:28:59 -0700 Subject: [PATCH 11/23] can reserve a room for a given date range with passing test --- lib/reservation.rb | 4 ++-- lib/reservation_tracker.rb | 15 ++++++++------- spec/reservation_spec.rb | 2 +- spec/reservation_tracker_spec.rb | 24 ++++++++++-------------- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index bd481f608..dfa5a9aaf 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -13,12 +13,12 @@ def initialize(check_in_date, check_out_date, room) raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date end - def book_room + def nights_stayed return date_range = check_out_date - check_in_date end def rate - book_room * 200 + nights_stayed * 200 end end # end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index aca7bb2b1..cd36f3cde 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -1,9 +1,11 @@ require 'pry' +require 'date' require_relative 'room' +require_relative 'reservation' # Keeps track of the list of reservations # module Hotel class ReservationTracker - attr_reader :rooms + attr_reader :rooms, :check_in_date, :check_out_date def initialize @rooms = create_rooms @@ -12,21 +14,20 @@ def initialize # @unreserved_rooms = [] end - + # to create and access the list of all of the rooms in the hotel def create_rooms rooms = [] (1..20).each do |room| room = Room.new(room) rooms << room end - # binding.pry return rooms end - # to access the list of all of the rooms in the hotel - def list_of_all_rooms - # binding.pry - return @rooms + # reserve a room for a given date range + def reserve_a_room(check_in_date, check_out_date) + room = @rooms.first + reservation = Reservation.new(check_in_date, check_out_date, room) end # def list_of_reservations diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 87a5c0417..537468435 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -29,7 +29,7 @@ end it 'raises an ArgumentError for an invalid date range' do - expect{ (Rservation.new(invalid_range)) }.must_raise StandardError + expect{ (Reservation.new(check_out_date, check_in_date)) }.must_raise StandardError end describe 'rate' do diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index b89e31581..4d9fc6e75 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -11,29 +11,25 @@ end it 'has an array of all rooms in hotel' do - expect(@reservation_tracker.create_rooms).must_be_kind_of Array + expect(@reservation_tracker.rooms).must_be_kind_of Array end it 'has 20 rooms in the hotel' do - expect(@reservation_tracker.create_rooms.length).must_equal 20 + expect(@reservation_tracker.rooms.length).must_equal 20 end end - # it 'returns a list of all the rooms in the hotel' do - # # arrange - # # act - # # assert - # expect(list_of_all_rooms.room_number).must_be_kind_of Array - # - # end - describe 'list_of_all_rooms method' do + + + describe 'reserve a room method' do before do @reservation_tracker = ReservationTracker.new end - it 'returns an array of rooms in hotel' do - expect(@reservation_tracker.list_of_all_rooms).must_be_kind_of Array - # binding.pry - expect(@reservation_tracker.list_of_all_rooms.length).must_equal 20 + it 'reserves a room in a given date range' do + check_in_date = Date.new(2018, 9, 7) + check_out_date = Date.new(2018, 9, 10) + expect(@reservation_tracker.reserve_a_room(check_in_date, check_out_date)).must_be_kind_of Reservation + end end end From a2b9e42dead22721b1e1cf68aecfe8cd51f103dc Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 14:36:22 -0700 Subject: [PATCH 12/23] accesses the list of reservations for a specific date with passing test --- lib/reservation_tracker.rb | 19 +++++++++++++------ lib/room.rb | 2 -- spec/reservation_tracker_spec.rb | 19 +++++++++++++++++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index cd36f3cde..b0b036db7 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -5,16 +5,19 @@ # Keeps track of the list of reservations # module Hotel class ReservationTracker - attr_reader :rooms, :check_in_date, :check_out_date + attr_reader :rooms, :check_in_date, :check_out_date, :reservations + + RATE = 200 def initialize @rooms = create_rooms - # @reservations = [] + @reservations = [] # @existing_reservations = [] # @unreserved_rooms = [] end - # to create and access the list of all of the rooms in the hotel + + # creates and accesses the list of all of the rooms in the hotel def create_rooms rooms = [] (1..20).each do |room| @@ -24,14 +27,18 @@ def create_rooms return rooms end - # reserve a room for a given date range + # reserves a room for a given date range and adds the reservation to the list of reservations def reserve_a_room(check_in_date, check_out_date) room = @rooms.first reservation = Reservation.new(check_in_date, check_out_date, room) + @reservations << reservation + return reservation end - # def list_of_reservations - # end + # accesses the list of reservations for a specific date + def list_of_reservations(date) + return @reservations.find_all { |reservation| reservation.nights stayed == date } + end end # end diff --git a/lib/room.rb b/lib/room.rb index ccec3c506..f3404e954 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,8 +3,6 @@ class Room attr_reader :room_number - RATE = 200 - def initialize(room_number) @room_number = room_number end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index 4d9fc6e75..95d732b34 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -10,15 +10,18 @@ @reservation_tracker = ReservationTracker.new end - it 'has an array of all rooms in hotel' do + it 'has an array of all rooms in the hotel' do expect(@reservation_tracker.rooms).must_be_kind_of Array end it 'has 20 rooms in the hotel' do expect(@reservation_tracker.rooms.length).must_equal 20 end - end + it 'has an array of all the reservations in the hotel' do + expect(@reservation_tracker.reservations).must_be_kind_of Array + end + end describe 'reserve a room method' do before do @@ -32,4 +35,16 @@ end end + + describe 'list of reservations method' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'shows the list of reservations for a specific date' do + date = Date.new(2018, 9, 7) + + expect(@reservation_tracker.list_of_reservations(date)).must_be_kind_of Array + end + end end From 030ce24bcb5848f07c1fb6fbb9ca5aadb7658d8a Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 15:38:32 -0700 Subject: [PATCH 13/23] Wave 1 finished with get the total cost for a given reservation and tests passing. --- lib/reservation.rb | 27 +++++++++---------- lib/reservation_tracker.rb | 8 +++++- lib/room.rb | 20 +++++++------- spec/reservation_spec.rb | 6 ----- spec/reservation_tracker_spec.rb | 17 ++++++++++++ spec/room_spec.rb | 45 +++++++------------------------- 6 files changed, 55 insertions(+), 68 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index dfa5a9aaf..afee899f1 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -3,22 +3,19 @@ require 'date' # module Hotel - class Reservation - attr_reader :check_in_date, :check_out_date, :room +class Reservation + attr_reader :check_in_date, :check_out_date, :room, :nights_stayed - def initialize(check_in_date, check_out_date, room) - @check_in_date = check_in_date - @check_out_date = check_out_date - @room = room - raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date - end - - def nights_stayed - return date_range = check_out_date - check_in_date - end + def initialize(check_in_date, check_out_date, room) + @check_in_date = check_in_date + @check_out_date = check_out_date + @room = room + raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date + end - def rate - nights_stayed * 200 - end + def nights_stayed + date_range = check_out_date - check_in_date + return date_range.to_i end +end # end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index b0b036db7..c1bdec872 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -7,7 +7,7 @@ class ReservationTracker attr_reader :rooms, :check_in_date, :check_out_date, :reservations - RATE = 200 + ROOM_RATE = 200 def initialize @rooms = create_rooms @@ -40,5 +40,11 @@ def list_of_reservations(date) return @reservations.find_all { |reservation| reservation.nights stayed == date } end + # calculates the total cost for a given reservation + def cost_for_given_reservation(reservation) + total_cost = reservation.nights_stayed * ROOM_RATE + return total_cost + end + end # end diff --git a/lib/room.rb b/lib/room.rb index f3404e954..c4cdf85a8 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,15 +1,15 @@ # Keeps track of 1 room # module Hotel - class Room - attr_reader :room_number +class Room + attr_reader :room_number - def initialize(room_number) - @room_number = room_number - end - - # def is_room_available(date) - # # TODO check list of reservations - # return true - # end + def initialize(room_number) + @room_number = room_number end + + # def is_room_available(date) + # # TODO check list of reservations + # return true + # end +end # end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 537468435..0c2bdf64e 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -31,11 +31,5 @@ it 'raises an ArgumentError for an invalid date range' do expect{ (Reservation.new(check_out_date, check_in_date)) }.must_raise StandardError end - - describe 'rate' do - it 'calculates the rate correctly for a stay in a room' do - expect(@reservation.rate).must_equal 600 - end - end end end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index 95d732b34..a9aead6e6 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -47,4 +47,21 @@ expect(@reservation_tracker.list_of_reservations(date)).must_be_kind_of Array end end + + describe 'cost for given reservation method' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'calculates the cost of a specific reservation' do + check_in_date = Date.new(2018, 9, 6) + check_out_date = Date.new(2018, 9, 10) + room = 15 + + reservation = Reservation.new(check_in_date, check_out_date, room) + expect(@reservation_tracker.cost_for_given_reservation(reservation)).must_be_kind_of Integer + expect(@reservation_tracker.cost_for_given_reservation(reservation)).must_equal 800 + end + end + end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index eb9a2951a..7e5e7d39a 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -2,40 +2,13 @@ SimpleCov.start require_relative 'spec_helper' - describe 'initialize' do - it 'takes a room number' do - room_number = 1 - # availibility = :available - room = Room.new(room_number) - - expect(room).must_respond_to :room_number - expect(room.room_number).must_equal room_number - - # expect(room).must_respond_to :availibility - # expect(room.availibility).must_equal :available - end +describe 'Initialize' do + it 'takes a room number' do + room_number = 1 + # availibility = :available + room = Room.new(room_number) + + expect(room).must_respond_to :room_number + expect(room.room_number).must_equal room_number end - - # it 'raises an ArgumentError for an invalid room status' do - # invalid_status = ['here', 15, :bogus, nil] - # invalid_status.each do |availibility| - # expect { - # Room.new(1, availibility) - # }.must_raise ArgumentError - # end - # end - - # it 'raises an ArgumentError for an invalid room number' do - # invalid_room = [21 , -3, nil] - # invalid_room.each do |room| - # expect { - # Room.new(room_number, availibility).must_raise ArgumentError - # } - # end - # end - - # describe 'is room available' do - # - # end - # end -# end +end From d691eec86ab53b6be705b6c6fef6ea8c9e3eb636 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Fri, 7 Sep 2018 18:10:21 -0700 Subject: [PATCH 14/23] added test for nightsstayed definition in reservation.rb --- lib/reservation_tracker.rb | 9 ++++++- lib/room.rb | 3 +-- spec/reservation_spec.rb | 44 ++++++++++++++++++++------------ spec/reservation_tracker_spec.rb | 16 ++++++++++++ spec/room_spec.rb | 1 - 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index c1bdec872..c8f4dc9c9 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -12,8 +12,9 @@ class ReservationTracker def initialize @rooms = create_rooms @reservations = [] - # @existing_reservations = [] # @unreserved_rooms = [] + # @existing_reservations = [] + end @@ -32,6 +33,7 @@ def reserve_a_room(check_in_date, check_out_date) room = @rooms.first reservation = Reservation.new(check_in_date, check_out_date, room) @reservations << reservation + # @reserved_rooms << room return reservation end @@ -46,5 +48,10 @@ def cost_for_given_reservation(reservation) return total_cost end + # accesses a list of rooms that are not reserved for a given date range + def rooms_not_reserved(check_in_date, check_out_date) + + end + end # end diff --git a/lib/room.rb b/lib/room.rb index c4cdf85a8..f63d46e12 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,5 +1,4 @@ -# Keeps track of 1 room -# module Hotel +# Keeps track of 1 room_ class Room attr_reader :room_number diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 0c2bdf64e..a619896a0 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -1,35 +1,45 @@ require 'simplecov' SimpleCov.start +require 'pry' +require 'time' require_relative 'spec_helper' describe 'Reservation' do - let (:check_in_date) { Date.new(2018, 9, 5) } - let (:check_out_date) { Date.new(2018, 9, 8) } - let (:room) { Room.new(15) } - # let (:a_reservation) { Reservation.new(check_in_date, check_out_date, room)} - # let (:invalid_range) { check_out_date <= check_in_date } - # # let (:bad_date) { Date.new(1985, 12, 15)} - # let (:rate) {(check_out_date - check_in_date) * RATE} - before do - @reservation = Reservation.new(check_in_date, check_out_date, room) - end - describe 'initialize' do + check_in_date = Date.new(2018, 9, 5) + check_out_date = Date.new(2018, 9, 8) + room = Room.new(15) + reservation = Reservation.new(check_in_date, check_out_date, room) + it 'takes a check in date, check out date, and room number' do - expect(@reservation).must_respond_to :check_in_date - expect(@reservation.check_in_date).must_equal check_in_date + expect(reservation).must_respond_to :check_in_date + expect(reservation.check_in_date).must_equal check_in_date - expect(@reservation).must_respond_to :check_out_date - expect(@reservation.check_out_date).must_equal check_out_date + expect(reservation).must_respond_to :check_out_date + expect(reservation.check_out_date).must_equal check_out_date - expect(@reservation).must_respond_to :room - expect(@reservation.room).must_equal room + expect(reservation).must_respond_to :room + expect(reservation.room).must_equal room end it 'raises an ArgumentError for an invalid date range' do expect{ (Reservation.new(check_out_date, check_in_date)) }.must_raise StandardError end end + + describe 'nights stayed method' do + before do + check_in_date = Date.new(2018, 9, 6) + check_out_date = Date.new(2018, 9, 10) + room = 15 + @reservation = Reservation.new(check_in_date, check_out_date, room) + end + + it 'calculates the number of nights stayed correctly' do + + expect(@reservation.nights_stayed).must_equal 4 + end + end end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index a9aead6e6..5fbd8e3b1 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -64,4 +64,20 @@ end end + describe 'rooms that are not reserved method' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'returns a list of rooms that are not reserved for a given date range' do + check_in_date = Date.new(2018, 9, 7) + check_out_date = Date.new(2018, 9, 10) + expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array + end + + # it 'checks that room is one of the room numbers in the hotel' do + # room_number = Room.new(15) + # expect(@reservation_tracker.rooms_not_reserved.room(room_number)).must_be_kind_of Room + # end + end end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index 7e5e7d39a..b050f4e66 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -5,7 +5,6 @@ describe 'Initialize' do it 'takes a room number' do room_number = 1 - # availibility = :available room = Room.new(room_number) expect(room).must_respond_to :room_number From 0bf146e93259e2e1913489fb8f07a77233caa5e3 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Sat, 8 Sep 2018 08:55:29 -0700 Subject: [PATCH 15/23] Fixed typo in list of reservations definition. Added some code for wave 2 --- lib/reservation_tracker.rb | 2 +- lib/room.rb | 10 ++++++---- spec/reservation_tracker_spec.rb | 5 ----- spec/room_spec.rb | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index c8f4dc9c9..77d94597e 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -39,7 +39,7 @@ def reserve_a_room(check_in_date, check_out_date) # accesses the list of reservations for a specific date def list_of_reservations(date) - return @reservations.find_all { |reservation| reservation.nights stayed == date } + return @reservations.find_all { |reservation| reservation.nights_stayed == date } end # calculates the total cost for a given reservation diff --git a/lib/room.rb b/lib/room.rb index f63d46e12..e19835d34 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -6,9 +6,11 @@ def initialize(room_number) @room_number = room_number end - # def is_room_available(date) - # # TODO check list of reservations - # return true - # end + def is_room_available?(date) + @reservation.each do |reservation| + return false if reservation.check_in_date <= date && reservation.check_out_date > date + end + return true + end end # end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index 5fbd8e3b1..c44b52910 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -74,10 +74,5 @@ check_out_date = Date.new(2018, 9, 10) expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array end - - # it 'checks that room is one of the room numbers in the hotel' do - # room_number = Room.new(15) - # expect(@reservation_tracker.rooms_not_reserved.room(room_number)).must_be_kind_of Room - # end end end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index b050f4e66..e7a79d6b0 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -2,6 +2,7 @@ SimpleCov.start require_relative 'spec_helper' + describe 'Initialize' do it 'takes a room number' do room_number = 1 @@ -11,3 +12,19 @@ expect(room.room_number).must_equal room_number end end + +describe 'is room available method' do + before do + room = Room.new(15) + @reservation = Reservation.new(Date.new(2018, 1, 1), Date.new(2018, 1, 10), room) + end + + it 'can check its availability on a specific date' do + expect(room.is_room_available?(Date.new(2018, 1, 2))).must_equal false + expect(room.is_room_available?(Date.new(2018, 1, 11))).must_equal true + end + + it 'has a room to be available on the last day of a reservation' do + expect(room.is_room_available?(Date.new(2018, 1, 11))).must_equal true + end +end From a7cfbe57bf3786b07953f56a74d6faf1cddadeab Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Sun, 9 Sep 2018 18:46:24 -0700 Subject: [PATCH 16/23] created with is_room_available, one failing test and rooms_not_reserved with passing test --- lib/reservation_tracker.rb | 29 ++++++++++++++++++---- lib/room.rb | 6 ----- spec/reservation_tracker_spec.rb | 41 ++++++++++++++++++++++++++++---- spec/room_spec.rb | 16 ------------- 4 files changed, 61 insertions(+), 31 deletions(-) diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index 77d94597e..a9b937b37 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -5,14 +5,14 @@ # Keeps track of the list of reservations # module Hotel class ReservationTracker - attr_reader :rooms, :check_in_date, :check_out_date, :reservations + attr_reader :rooms, :check_in_date, :check_out_date, :reservations, :unreserved_rooms ROOM_RATE = 200 def initialize @rooms = create_rooms @reservations = [] - # @unreserved_rooms = [] + @unreserved_rooms = [] # @existing_reservations = [] @@ -29,12 +29,11 @@ def create_rooms end # reserves a room for a given date range and adds the reservation to the list of reservations - def reserve_a_room(check_in_date, check_out_date) - room = @rooms.first + def reserve_a_room(check_in_date, check_out_date, room) reservation = Reservation.new(check_in_date, check_out_date, room) @reservations << reservation # @reserved_rooms << room - return reservation + # return reservation end # accesses the list of reservations for a specific date @@ -48,9 +47,29 @@ def cost_for_given_reservation(reservation) return total_cost end + def is_room_available?(date) + @reservations.each do |reservation| + return false if reservation.check_in_date <= date && reservation.check_out_date > date + end + # binding.pry + return true + end + # accesses a list of rooms that are not reserved for a given date range def rooms_not_reserved(check_in_date, check_out_date) + return @rooms if @rooms.map { |room| room.room_number } if reservations.empty? + + unreserved_rooms = @rooms.map { |room| room.room_number } + + @reservations.each { |reservation| + if + reservation.check_in_date >= check_in_date && reservation.check_in_date <= check_out_date || + (reservation.check_out_date >= check_in_date && reservation.check_out_date <= check_out_date) + unreserved_rooms.delete(reseration.room_number) + end + } + return unreserved_rooms end end diff --git a/lib/room.rb b/lib/room.rb index e19835d34..b4dc29478 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -6,11 +6,5 @@ def initialize(room_number) @room_number = room_number end - def is_room_available?(date) - @reservation.each do |reservation| - return false if reservation.check_in_date <= date && reservation.check_out_date > date - end - return true - end end # end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index c44b52910..b7ce40cc2 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -29,10 +29,34 @@ end it 'reserves a room in a given date range' do - check_in_date = Date.new(2018, 9, 7) - check_out_date = Date.new(2018, 9, 10) - expect(@reservation_tracker.reserve_a_room(check_in_date, check_out_date)).must_be_kind_of Reservation + # check_in_date = Date.today + # check_out_date = Date.today + 5 + date = Date.today + room = Room.new(15) + expect(@reservation_tracker.reserve_a_room(date, date + 5, room)).must_be_kind_of Array + end + + end + + describe 'is room available method' do + before do + @reservation_tracker = ReservationTracker.new + @date = Date.today + # @room = Room.new(15) + end + + it 'can check its availability on a specific date' do + # reservation = Reservation.new(@date, @date + 5, + # @room) + expect(@reservation_tracker.is_room_available?(@date)).must_equal false + expect(@reservation_tracker.is_room_available?(@date + 6)).must_equal true + end + + it 'has a room to be available on the last day of a reservation' do + # reservation = Reservation.new(@date, @date + 5, + # @room) + expect(@reservation_tracker.is_room_available?(@date + 5)).must_equal true end end @@ -57,8 +81,8 @@ check_in_date = Date.new(2018, 9, 6) check_out_date = Date.new(2018, 9, 10) room = 15 - reservation = Reservation.new(check_in_date, check_out_date, room) + expect(@reservation_tracker.cost_for_given_reservation(reservation)).must_be_kind_of Integer expect(@reservation_tracker.cost_for_given_reservation(reservation)).must_equal 800 end @@ -71,8 +95,17 @@ it 'returns a list of rooms that are not reserved for a given date range' do check_in_date = Date.new(2018, 9, 7) + # check_in_date = Date.today (5 days from today) + # Date + 5 check_out_date = Date.new(2018, 9, 10) expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array end + + # it 'returns a list of rooms if there are no given reservations' do + # check_in_date = Date.now + # check_out_date = Date.now + # + # expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array + # end end end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index e7a79d6b0..6aedf4adf 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -12,19 +12,3 @@ expect(room.room_number).must_equal room_number end end - -describe 'is room available method' do - before do - room = Room.new(15) - @reservation = Reservation.new(Date.new(2018, 1, 1), Date.new(2018, 1, 10), room) - end - - it 'can check its availability on a specific date' do - expect(room.is_room_available?(Date.new(2018, 1, 2))).must_equal false - expect(room.is_room_available?(Date.new(2018, 1, 11))).must_equal true - end - - it 'has a room to be available on the last day of a reservation' do - expect(room.is_room_available?(Date.new(2018, 1, 11))).must_equal true - end -end From f21593bdfbd3b7dee9d1b54f88d96d1097b1105d Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Sun, 9 Sep 2018 22:30:12 -0700 Subject: [PATCH 17/23] wave 2 complete with passing tests wq exit! --- lib/hotel.rb | 1 - lib/reservation.rb | 6 +-- lib/reservation_tracker.rb | 49 +++++++++++++-------- spec/reservation_spec.rb | 20 ++++----- spec/reservation_tracker_spec.rb | 75 ++++++++++++++++++++------------ spec/room_spec.rb | 1 + 6 files changed, 90 insertions(+), 62 deletions(-) diff --git a/lib/hotel.rb b/lib/hotel.rb index 4f485ab41..54f48f0fe 100644 --- a/lib/hotel.rb +++ b/lib/hotel.rb @@ -1,4 +1,3 @@ - ROOM_LIST = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] def hotel diff --git a/lib/reservation.rb b/lib/reservation.rb index afee899f1..e3b98f8d1 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,12 +4,12 @@ # module Hotel class Reservation - attr_reader :check_in_date, :check_out_date, :room, :nights_stayed + attr_reader :check_in_date, :check_out_date, :room_number, :nights_stayed - def initialize(check_in_date, check_out_date, room) + def initialize(check_in_date, check_out_date, room_number) @check_in_date = check_in_date @check_out_date = check_out_date - @room = room + @room_number = room_number raise StandardError, 'The end date cannot be before the start date.' if check_out_date <= check_in_date end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index a9b937b37..1431ef7f7 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -22,20 +22,29 @@ def initialize def create_rooms rooms = [] (1..20).each do |room| - room = Room.new(room) - rooms << room + room_number = Room.new(room) + rooms << room_number end return rooms end - # reserves a room for a given date range and adds the reservation to the list of reservations - def reserve_a_room(check_in_date, check_out_date, room) - reservation = Reservation.new(check_in_date, check_out_date, room) + # creates reservation and adds the reservation to the list of reservations + def create_reservation(check_in_date, check_out_date, room_number) + reservation = Reservation.new(check_in_date, check_out_date, room_number) @reservations << reservation # @reserved_rooms << room # return reservation end + # don't think i need this anymore + # def is_a_room_available?(date) + # @reservations.each do |reservation| + # return false if reservation.check_in_date >= date && reservation.check_out_date > date + # end + # # binding.pry + # return true + # end + # accesses the list of reservations for a specific date def list_of_reservations(date) return @reservations.find_all { |reservation| reservation.nights_stayed == date } @@ -47,28 +56,32 @@ def cost_for_given_reservation(reservation) return total_cost end - def is_room_available?(date) - @reservations.each do |reservation| - return false if reservation.check_in_date <= date && reservation.check_out_date > date + # checks to see if a room is available and reserves the first available room for a given date range. Uses the rooms_not reserved method. + def reserve_room(check_in_date, check_out_date) + # set the rooms_not_reserved method and arguments to a local variable. + unreserved_rooms = rooms_not_reserved(check_in_date, check_out_date) + if unreserved_rooms.length == 0 + raise ArgumentError, 'No Available Rooms for Given Dates' + else + # uses the create reservation method if there are available rooms + create_reservation(check_in_date, check_out_date, unreserved_rooms[0]) + # binding.pry end - # binding.pry - return true end # accesses a list of rooms that are not reserved for a given date range def rooms_not_reserved(check_in_date, check_out_date) - return @rooms if @rooms.map { |room| room.room_number } if reservations.empty? - + # if the reservations array is empty, this returns an array of available room numbers. If there are no reservations, all rooms can be reserved. + return @rooms.map { |room| room.room_number } if @reservations.empty? unreserved_rooms = @rooms.map { |room| room.room_number } - + # if @reservation.empty? is not empty @reservations.each { |reservation| - if - reservation.check_in_date >= check_in_date && reservation.check_in_date <= check_out_date || - (reservation.check_out_date >= check_in_date && reservation.check_out_date <= check_out_date) - unreserved_rooms.delete(reseration.room_number) + if (reservation.check_in_date >= check_in_date && reservation.check_in_date <= check_out_date) || (reservation.check_out_date >= check_in_date && reservation.check_out_date <= check_out_date) + unreserved_rooms.delete(reservation.room_number) end } - + # unreserved_rooms returns an empty array if nothing is availible in the given date range or it will return an array of available room numbers in date range given. + # for use in the reserve_room method return unreserved_rooms end diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index a619896a0..49bf0d727 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -7,10 +7,10 @@ describe 'Reservation' do describe 'initialize' do - check_in_date = Date.new(2018, 9, 5) - check_out_date = Date.new(2018, 9, 8) - room = Room.new(15) - reservation = Reservation.new(check_in_date, check_out_date, room) + check_in_date = Date.new(2018, 9, 5) + check_out_date = Date.new(2018, 9, 8) + room_number = Room.new(15) + reservation = Reservation.new(check_in_date, check_out_date, room_number) it 'takes a check in date, check out date, and room number' do @@ -20,8 +20,8 @@ expect(reservation).must_respond_to :check_out_date expect(reservation.check_out_date).must_equal check_out_date - expect(reservation).must_respond_to :room - expect(reservation.room).must_equal room + expect(reservation).must_respond_to :room_number + expect(reservation.room_number).must_equal room_number end it 'raises an ArgumentError for an invalid date range' do @@ -30,16 +30,14 @@ end describe 'nights stayed method' do - before do check_in_date = Date.new(2018, 9, 6) check_out_date = Date.new(2018, 9, 10) - room = 15 - @reservation = Reservation.new(check_in_date, check_out_date, room) - end + room_number = 15 + reservation = Reservation.new(check_in_date, check_out_date, room_number) it 'calculates the number of nights stayed correctly' do - expect(@reservation.nights_stayed).must_equal 4 + expect(reservation.nights_stayed).must_equal 4 end end end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index b7ce40cc2..0518c193a 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -23,7 +23,7 @@ end end - describe 'reserve a room method' do + describe 'create reservation method' do before do @reservation_tracker = ReservationTracker.new end @@ -33,32 +33,41 @@ # check_out_date = Date.today + 5 date = Date.today room = Room.new(15) - expect(@reservation_tracker.reserve_a_room(date, date + 5, room)).must_be_kind_of Array + expect(@reservation_tracker.create_reservation(date, date + 5, room)).must_be_kind_of Array end end - describe 'is room available method' do - before do - @reservation_tracker = ReservationTracker.new - @date = Date.today - # @room = Room.new(15) - end - - it 'can check its availability on a specific date' do - # reservation = Reservation.new(@date, @date + 5, - # @room) - expect(@reservation_tracker.is_room_available?(@date)).must_equal false - expect(@reservation_tracker.is_room_available?(@date + 6)).must_equal true - end - - it 'has a room to be available on the last day of a reservation' do - # reservation = Reservation.new(@date, @date + 5, - # @room) - expect(@reservation_tracker.is_room_available?(@date + 5)).must_equal true - end - end + # don't think I need this since I check this in the reserve_room method. + # describe 'is a room available method' do + # before do + # @reservation_tracker = ReservationTracker.new + # #.create_reservation(check_in_date, check_out_date, room) + # + # # @date = Date.today + # # @room = Room.new(15) + # end + # + # it 'can check its availability on a specific date' do + # + # check_in_date = Date.new(2018, 9, 6) + # check_out_date = Date.new(2018, 9, 10) + # room = 15 + # reservation = Reservation.new(check_in_date, check_out_date, room) + # + # expect(@reservation_tracker.is_a_room_available?(Date.new(2018, 9, 7))).must_equal false + # expect(@reservation_tracker.is_a_room_available?(Date.new(2018, 9, 11))).must_equal true + # end + # + # it 'has a room to be available on the last day of a reservation' do + # check_in_date = Date.new(2018, 9, 6) + # check_out_date = Date.new(2018, 9, 10) + # # room = 15 + # # reservation = Reservation.new(check_in_date, check_out_date, room) + # expect(@reservation_tracker.is_a_room_available?(Date.new(2018, 9, 10))).must_equal true + # end + # end describe 'list of reservations method' do before do @@ -88,6 +97,21 @@ end end + describe 'reserve_room method' do + before do + @reservation_tracker = ReservationTracker.new + @date = Date.today + 20.times do |i| + @reservation_tracker.reserve_room(@date, @date + 5) + end + end + + it "Raises ArgumentError if there are no available rooms" do + + expect { @reservation_tracker.reserve_room(@date, @date + 5) }.must_raise ArgumentError + end + end + describe 'rooms that are not reserved method' do before do @reservation_tracker = ReservationTracker.new @@ -100,12 +124,5 @@ check_out_date = Date.new(2018, 9, 10) expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array end - - # it 'returns a list of rooms if there are no given reservations' do - # check_in_date = Date.now - # check_out_date = Date.now - # - # expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array - # end end end diff --git a/spec/room_spec.rb b/spec/room_spec.rb index 6aedf4adf..190c1defb 100644 --- a/spec/room_spec.rb +++ b/spec/room_spec.rb @@ -11,4 +11,5 @@ expect(room).must_respond_to :room_number expect(room.room_number).must_equal room_number end + end From 8b3b4e89ca99f1f55f165978dd68a7f6bcd27109 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Sun, 9 Sep 2018 23:01:16 -0700 Subject: [PATCH 18/23] added a couple of tests. --- spec/reservation_tracker_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index 0518c193a..23bb22fd1 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -21,6 +21,16 @@ it 'has an array of all the reservations in the hotel' do expect(@reservation_tracker.reservations).must_be_kind_of Array end + + it 'has an array of all the unreserved rooms in the hotel' do + expect(@reservation_tracker.unreserved_rooms).must_be_kind_of Array + end + + # it 'should be able to access the list of rooms' do + # binding.pry + # expect(@reservation_tracker.rooms[0]).must_equal 1 + # expect(@reservation_tracker.rooms[20]).must_equal 20 + # end end describe 'create reservation method' do @@ -36,7 +46,19 @@ expect(@reservation_tracker.create_reservation(date, date + 5, room)).must_be_kind_of Array end + it "should be able to add a reservation" do + reservation = Reservation.new(Date.new(2018,9,5), Date.new(2018,9,10), 15) + @reservation_tracker.reservations << reservation + @reservation_tracker.reservations.must_equal [reservation] + end + # it "creates a reservation with a specific date range" do + # check_in_date = Date.new(2018,9,5) + # check_out_date = Date.new(2018,9,10) + # reservation = Reservation.new(check_in_date, check_out_date, 15) + # @reservation_tracker.reservations[check_in_date].must_equal Date.new(2018,9,5) + # @reservation_tracker.reservations[check_out_date].must_equal Date.new(2018,9,10) + # end end # don't think I need this since I check this in the reserve_room method. From d5404eca0e81bc8dda3e3707947715cee13986d5 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 18 Sep 2018 20:26:25 -0700 Subject: [PATCH 19/23] added a block class and spec sheet with passing tests. --- lib/block.rb | 22 ++++++++++++++++++++++ lib/room.rb | 1 - spec/block_spec.rb | 32 ++++++++++++++++++++++++++++++++ spec/spec_helper.rb | 1 + 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 lib/block.rb create mode 100644 spec/block_spec.rb diff --git a/lib/block.rb b/lib/block.rb new file mode 100644 index 000000000..c2370fd3e --- /dev/null +++ b/lib/block.rb @@ -0,0 +1,22 @@ +require 'date' +require 'securerandom' + +class Block + attr_reader :check_in_date, :check_out_date, :id, :block_of_rooms, :rooms + + BLOCKRATE = 100 + + def initialize(id, check_in_date, check_out_date, block_of_rooms) + @id = SecureRandom.uuid + @check_in_date = check_in_date + @check_out_date = check_out_date + @block_of_rooms = block_of_rooms + @rooms = [] + end + + def valid_block_of_rooms + if block_of_rooms > 5 + raise ArgumentError, 'Blocks can have up to 5 rooms.' + end + end +end diff --git a/lib/room.rb b/lib/room.rb index b4dc29478..9665e27a7 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -7,4 +7,3 @@ def initialize(room_number) end end -# end diff --git a/spec/block_spec.rb b/spec/block_spec.rb new file mode 100644 index 000000000..074d21dfd --- /dev/null +++ b/spec/block_spec.rb @@ -0,0 +1,32 @@ +require 'simplecov' +SimpleCov.start +require_relative 'spec_helper' + +describe 'Block Class' do + it 'creates a new instance of a block' do + check_in_date = Date.new(2018, 9, 5) + check_out_date = Date.new(2018, 9, 8) + new_block = Block.new(1, check_in_date, check_out_date, 5) + expect(new_block).must_be_instance_of Block + end + + it 'charges a rate of 100 for the BLOCKRATE' do + Block::BLOCKRATE.must_equal 100 + end + + it 'block of rooms must equal 5' do + check_in_date = Date.new(2018, 9, 5) + check_out_date = Date.new(2018, 9, 8) + new_block = Block.new(1, check_in_date, check_out_date, 5) + expect(new_block.block_of_rooms).must_equal 5 + end +end + +describe 'validate block of rooms' do + it 'raises an Argument Error, if there are more than 5 rooms in a block' do + check_in_date = Date.new(2018, 9, 5) + check_out_date = Date.new(2018, 9, 8) + new_block = Block.new(1, check_in_date, check_out_date, 6) + expect { new_block.valid_block_of_rooms }.must_raise ArgumentError + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3ef5b7742..3b732f2ae 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -13,3 +13,4 @@ require_relative '../lib/room' require_relative '../lib/reservation_tracker' require_relative '../lib/reservation' +require_relative '../lib/block' From b6848dad958db2921849133011fd83b20c515bea Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 18 Sep 2018 20:44:19 -0700 Subject: [PATCH 20/23] added BlockReservation to reservation.rb with passing test. --- lib/reservation.rb | 12 ++++++++++++ lib/reservation_tracker.rb | 4 +--- lib/room.rb | 2 ++ spec/reservation_spec.rb | 11 +++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index e3b98f8d1..3c7ac8fd3 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -18,4 +18,16 @@ def nights_stayed return date_range.to_i end end + +class BlockReservation < Reservation + def initialize(check_in_date, check_out_date, room_number) + super + end + + def block_rate + date_range = @check_out_date - @check_in_date + date_range.to_i + end + +end # end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index 1431ef7f7..bdc543c6c 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -7,8 +7,6 @@ class ReservationTracker attr_reader :rooms, :check_in_date, :check_out_date, :reservations, :unreserved_rooms - ROOM_RATE = 200 - def initialize @rooms = create_rooms @reservations = [] @@ -52,7 +50,7 @@ def list_of_reservations(date) # calculates the total cost for a given reservation def cost_for_given_reservation(reservation) - total_cost = reservation.nights_stayed * ROOM_RATE + total_cost = reservation.nights_stayed * Room::ROOM_RATE return total_cost end diff --git a/lib/room.rb b/lib/room.rb index 9665e27a7..3772b8d0b 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,6 +1,8 @@ # Keeps track of 1 room_ class Room attr_reader :room_number + + ROOM_RATE = 200 def initialize(room_number) @room_number = room_number diff --git a/spec/reservation_spec.rb b/spec/reservation_spec.rb index 49bf0d727..e4fefb78b 100644 --- a/spec/reservation_spec.rb +++ b/spec/reservation_spec.rb @@ -41,3 +41,14 @@ end end end + +describe 'BlockReservation' do + it 'instantiates a block reservation' do + check_in_date = Date.new(2018, 9, 6) + check_out_date = Date.new(2018, 9, 10) + room_number = 15 + block_reservation = BlockReservation.new(check_in_date, check_out_date, room_number) + expect(block_reservation).must_be_instance_of BlockReservation + end + +end From eea072e6a84457d6cc84ba571af90ab8ac07859d Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Tue, 18 Sep 2018 21:29:53 -0700 Subject: [PATCH 21/23] added block section to rooms not reserved definition. Fixed test. --- lib/reservation.rb | 1 - lib/reservation_tracker.rb | 8 ++++++++ spec/reservation_tracker_spec.rb | 15 +++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 3c7ac8fd3..17ab64b37 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -28,6 +28,5 @@ def block_rate date_range = @check_out_date - @check_in_date date_range.to_i end - end # end diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index bdc543c6c..438e55924 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -1,6 +1,7 @@ require 'pry' require 'date' require_relative 'room' +require_relative 'block' require_relative 'reservation' # Keeps track of the list of reservations # module Hotel @@ -11,6 +12,7 @@ def initialize @rooms = create_rooms @reservations = [] @unreserved_rooms = [] + @blocks = [] # @existing_reservations = [] @@ -78,6 +80,12 @@ def rooms_not_reserved(check_in_date, check_out_date) unreserved_rooms.delete(reservation.room_number) end } + + @blocks.each { |block| + if (block.check_in_date >= check_in_date && block.check_in_date <= check_out_date) || (block.check_out_date >= check_in_date && block.check_out_date <= check_out_date) + unreserved_rooms - block.rooms + end + } # unreserved_rooms returns an empty array if nothing is availible in the given date range or it will return an array of available room numbers in date range given. # for use in the reserve_room method return unreserved_rooms diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index 23bb22fd1..c093e9a14 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -134,17 +134,24 @@ end end - describe 'rooms that are not reserved method' do + describe 'rooms not reserved method' do before do @reservation_tracker = ReservationTracker.new end - it 'returns a list of rooms that are not reserved for a given date range' do + it 'returns an array of rooms that are not reserved for a given date range' do check_in_date = Date.new(2018, 9, 7) - # check_in_date = Date.today (5 days from today) - # Date + 5 check_out_date = Date.new(2018, 9, 10) expect(@reservation_tracker.rooms_not_reserved(check_in_date, check_out_date)).must_be_kind_of Array end + + it 'returns a list of rooms not reserved' do + date = Date.today + @reservation_tracker.create_rooms + @reservation_tracker.create_reservation(date, date + 5, 5) + @reservation_tracker.create_reservation(date, date + 5, 10) + @reservation_tracker.create_reservation(date + 10, date + 25, 15) + @reservation_tracker.rooms_not_reserved(date, date + 5).must_equal [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + end end end From 97d3845b435c0f9f60b6c6663d5cd6e2d55e879d Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Wed, 19 Sep 2018 22:34:46 -0700 Subject: [PATCH 22/23] added method to create a block with passing test. --- lib/block.rb | 5 +++-- lib/reservation_tracker.rb | 17 +++++++++++++++-- spec/block_spec.rb | 6 +++--- spec/reservation_tracker_spec.rb | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index c2370fd3e..efe251f29 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -2,11 +2,12 @@ require 'securerandom' class Block - attr_reader :check_in_date, :check_out_date, :id, :block_of_rooms, :rooms + attr_reader :check_in_date, :check_out_date, :id, :block_of_rooms + attr_accessor :rooms BLOCKRATE = 100 - def initialize(id, check_in_date, check_out_date, block_of_rooms) + def initialize(check_in_date, check_out_date, block_of_rooms) @id = SecureRandom.uuid @check_in_date = check_in_date @check_out_date = check_out_date diff --git a/lib/reservation_tracker.rb b/lib/reservation_tracker.rb index 438e55924..75e912aed 100644 --- a/lib/reservation_tracker.rb +++ b/lib/reservation_tracker.rb @@ -6,7 +6,7 @@ # Keeps track of the list of reservations # module Hotel class ReservationTracker - attr_reader :rooms, :check_in_date, :check_out_date, :reservations, :unreserved_rooms + attr_reader :rooms, :check_in_date, :check_out_date, :reservations, :unreserved_rooms, :blocks def initialize @rooms = create_rooms @@ -36,9 +36,22 @@ def create_reservation(check_in_date, check_out_date, room_number) # return reservation end + def create_a_block(check_in_date, check_out_date, block_of_rooms) + # rooms_available is an arrary from rooms_not_reserved + rooms_available = rooms_not_reserved(check_in_date, + check_out_date) + block_reservation = Block.new(check_in_date, + check_out_date, + block_of_rooms) + block_reservation.rooms = rooms_available.pop(block_of_rooms) + @blocks << block_reservation + + return block_reservation + end + # don't think i need this anymore # def is_a_room_available?(date) - # @reservations.each do |reservation| + # @reservations.each do |reservation | # return false if reservation.check_in_date >= date && reservation.check_out_date > date # end # # binding.pry diff --git a/spec/block_spec.rb b/spec/block_spec.rb index 074d21dfd..12f21ca36 100644 --- a/spec/block_spec.rb +++ b/spec/block_spec.rb @@ -6,7 +6,7 @@ it 'creates a new instance of a block' do check_in_date = Date.new(2018, 9, 5) check_out_date = Date.new(2018, 9, 8) - new_block = Block.new(1, check_in_date, check_out_date, 5) + new_block = Block.new(check_in_date, check_out_date, 5) expect(new_block).must_be_instance_of Block end @@ -17,7 +17,7 @@ it 'block of rooms must equal 5' do check_in_date = Date.new(2018, 9, 5) check_out_date = Date.new(2018, 9, 8) - new_block = Block.new(1, check_in_date, check_out_date, 5) + new_block = Block.new(check_in_date, check_out_date, 5) expect(new_block.block_of_rooms).must_equal 5 end end @@ -26,7 +26,7 @@ it 'raises an Argument Error, if there are more than 5 rooms in a block' do check_in_date = Date.new(2018, 9, 5) check_out_date = Date.new(2018, 9, 8) - new_block = Block.new(1, check_in_date, check_out_date, 6) + new_block = Block.new(check_in_date, check_out_date, 6) expect { new_block.valid_block_of_rooms }.must_raise ArgumentError end end diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index c093e9a14..fdaf7cdf7 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -61,6 +61,20 @@ # end end + describe 'create a block method' do + before do + @reservation_tracker = ReservationTracker.new + end + + it 'should create a new block' do + date = Date.today + @reservation_tracker.create_rooms + @reservation_tracker.create_a_block(date + 2, date + 7, 5) + # binding.pry + expect(@reservation_tracker.blocks.length ).must_equal 1 + end + end + # don't think I need this since I check this in the reserve_room method. # describe 'is a room available method' do # before do From 4fd6a9b6ee0b07cf4043c279a02c7816005a29c8 Mon Sep 17 00:00:00 2001 From: Dionisia Montanez Date: Sun, 30 Sep 2018 13:47:01 -0700 Subject: [PATCH 23/23] Added design-activity.md and answered prompts. --- design-activity.md | 20 ++++++++++++++++++++ spec/reservation_tracker_spec.rb | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 design-activity.md diff --git a/design-activity.md b/design-activity.md new file mode 100644 index 000000000..399afa279 --- /dev/null +++ b/design-activity.md @@ -0,0 +1,20 @@ +1. Implementation A has three classes: CartEntry, ShoppingCart, and Order. +Implementation B has the same three classes as well. + +2. For implementation A, CartEntry initializes the unit price and quantity for each item. ShoppingCart stores the entries of each item in an array. Order creates a new instance of a shopping cart and then calculates the total price of all the items in a cart with the sales tax. + +For implementation B, CartEntry initializes the unit price and quantity for each item. ShoppingCart stores the entry of each item in an array and also calculates the price of each item. Order creates a new instance of a shopping cart and calculates the total price of each cart with all the items and the sales tax. + +3. For implementation A, the CartEntry establishes the quantity and price of each item. ShoppingCart stores each entry. These two classes are needed for the Order class which creates a new instance of a shopping cart and then goes through each entry in the cart to calculate the sum of all the items and their prices. It returns the total price. + +For implementation B, CartEntry is responsible for establishing the unit price and and quantity of each item. Then it calculates the price of each type of item depending on the quantity ordered. ShoppingCart stores the entry of each item in a shopping cart. It also calculates the price of each entry by calling on the price method in CartEntry and then adding up the sums. Order creates a new instance of shopping cart. It calculates the subtotal by calling on the price method from ShoppingCart. Then it calculates the overall cost by multiplying the subtotal to the sales tax and adding that to the original subtotal amount. + +4. CartEntry stores each item's price and quantity. ShoppingCart stores all the entries. Order retrieves the information from CartEntry and ShoppingCart to return the total price of each cart. Both store the same info. However, I think implementation A does a better job of creating single responsibility for each class without relying too heavily on the Order class to calculate the total price. However, the subtotal variable in implementation B is much clearer on what is being calculated vs, implementation A where the variable sum is used. I wasn't sure why sum was being returned at first. + +5. Initially, it seemed logical to compute the the price in "lower level" classes like ShoppingCart and CartEntry. However that creates a tie between all the classes and if one is changed, then the others must be modified as well. In the first implementation, ShoppingCart doesn't rely on price being calculated in CartEntry and then Order doesn't rely on ShoppingCart for price to be calculated in order for the total price to be calculated. Total price does not directly manipulate the instance variables of the other classes. + +6. If items were bought in bulk, I think this would be done in a new method called bulk. I think because method A is more loosely coupled than B, it would be easier to implement in A. + +7. Implementation A. + +8. Implementation A. Although I think implementation B is a little easier to read because the variable subtotal in the method total_price was clearer to me. diff --git a/spec/reservation_tracker_spec.rb b/spec/reservation_tracker_spec.rb index fdaf7cdf7..1bbbc7dc8 100644 --- a/spec/reservation_tracker_spec.rb +++ b/spec/reservation_tracker_spec.rb @@ -73,6 +73,14 @@ # binding.pry expect(@reservation_tracker.blocks.length ).must_equal 1 end + + it 'should create an array of rooms for the block' do + date = Date.today + @reservation_tracker.create_rooms + @reservation_tracker.create_a_block(date + 2, date + 7, 5) + expect(@reservation_tracker.blocks).must_be_kind_of Array + end + end # don't think I need this since I check this in the reserve_room method.