From 627ed96b1d5c89b1e4aa14de00a2d17089b2b2fa Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 16:57:12 -0700 Subject: [PATCH 01/61] Add spechelper and rakefile --- Rakefile | 9 +++++++++ specs/spec_helper.rb | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 Rakefile create mode 100644 specs/spec_helper.rb diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..deb52f2cd --- /dev/null +++ b/Rakefile @@ -0,0 +1,9 @@ +require 'rake/testtask' + +Rake::TestTask.new do |t| + t.libs = ["lib"] + t.warning = true + t.test_files = FileList['specs/*_spec.rb'] +end + +task default: :test diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb new file mode 100644 index 000000000..8aabdf3e5 --- /dev/null +++ b/specs/spec_helper.rb @@ -0,0 +1,17 @@ +# specs/spec_helper.rb +require 'simplecov' +SimpleCov.start +require 'minitest' +require 'minitest/autorun' +require 'minitest/reporters' +require 'minitest/pride' +require 'minitest/skip_dsl' +require 'pry' + + +# Require any classes +# require_relative '../lib/scoring' +# require_relative '../lib/player' +# require_relative '../lib/tilebag' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From e7af91b15b8d0fc9b6d1c12dbe4c828e6da43151 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 17:10:58 -0700 Subject: [PATCH 02/61] update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..2b79cd853 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ /test/tmp/ /test/version_tmp/ /tmp/ +/DS_Store/ # Used by dotenv library to load environment variables. # .env From 02af24f2fff072f571bb8502e4d2bc4b420bf521 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 17:11:51 -0700 Subject: [PATCH 03/61] Create reservations file with basic architecture and psedocode --- lib/reservations.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/reservations.rb diff --git a/lib/reservations.rb b/lib/reservations.rb new file mode 100644 index 000000000..9dd06a5cb --- /dev/null +++ b/lib/reservations.rb @@ -0,0 +1,26 @@ +module Hotel + class Reservations + #@allrooms - initializes with 20 instances of the room class + #all_reservations - array of instances of the reservation class + + def make_reservation(start_date, end_date) + #1 take start_date and end_date and pass it to date range class, date range will validate user input + + #2 do we have availability? If yes make a reservation.new and push to all_reservations + # check_reservation + # check_availability + end + + def check_reservation(start_date, end_date) + #1 take start_date and end_date and pass it to date range class, date range will validate user input + #@all_reservations check if each find date + #if reservation.date.include?(date_range[0]) + #not_available << room + #return not_available + end + + def check_availability + # return the inverse not_available + end + end +end From 78febe7c0f6fa9aefbf893e8145ebd1171edba84 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 17:17:23 -0700 Subject: [PATCH 04/61] Create reservations spec file and updates spec helper --- .gitignore | 2 +- specs/reservations_spec.rb | 7 +++++++ specs/spec_helper.rb | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 specs/reservations_spec.rb diff --git a/.gitignore b/.gitignore index 2b79cd853..adf47c3b4 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /test/tmp/ /test/version_tmp/ /tmp/ -/DS_Store/ +/.DS_Store/ # Used by dotenv library to load environment variables. # .env diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb new file mode 100644 index 000000000..cce75388c --- /dev/null +++ b/specs/reservations_spec.rb @@ -0,0 +1,7 @@ +require_relative 'spec_helper' + +describe "Reservations class" do + it "" do + + end +end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 8aabdf3e5..1a2d304eb 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -10,7 +10,7 @@ # Require any classes -# require_relative '../lib/scoring' +require_relative '../lib/reservations' # require_relative '../lib/player' # require_relative '../lib/tilebag' From d6087233b71ddcab9903f5f28cb497ceafbc68ff Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 17:22:32 -0700 Subject: [PATCH 05/61] Add room class and spec files --- .gitignore | 2 +- lib/room.rb | 6 ++++++ specs/room_spec.rb | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 lib/room.rb create mode 100644 specs/room_spec.rb diff --git a/.gitignore b/.gitignore index adf47c3b4..8a3238615 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /test/tmp/ /test/version_tmp/ /tmp/ -/.DS_Store/ +.DS_Store # Used by dotenv library to load environment variables. # .env diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..6eaba9804 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,6 @@ +module Hotel + class Room + #room_number + #cost + end +end diff --git a/specs/room_spec.rb b/specs/room_spec.rb new file mode 100644 index 000000000..eca16a1ea --- /dev/null +++ b/specs/room_spec.rb @@ -0,0 +1,7 @@ +require_relative 'spec_helper' + +describe "Room Class" do + it "" do + + end +end From 4deac25926df32499432814d5cd9bedaf75feba1 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 17:36:23 -0700 Subject: [PATCH 06/61] create daterange and booking files and specs --- lib/booking.rb | 11 +++++++++++ lib/date_range.rb | 10 ++++++++++ specs/booking_spec.rb | 7 +++++++ specs/date_range_spec.rb | 7 +++++++ 4 files changed, 35 insertions(+) create mode 100644 lib/booking.rb create mode 100644 lib/date_range.rb create mode 100644 specs/booking_spec.rb create mode 100644 specs/date_range_spec.rb diff --git a/lib/booking.rb b/lib/booking.rb new file mode 100644 index 000000000..b49740a2c --- /dev/null +++ b/lib/booking.rb @@ -0,0 +1,11 @@ +module Hotel + class Booking + #initialize will have the following parameters (date_range, num_rooms) + #id + #total cost + #room(s) + #date_range + def total_cost + end + end +end diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..b7c48e963 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,10 @@ +module Hotel + class DateRange + #in start date [5], end date[6] + #out array of nights [5,6] + + #check that is vaild input, that the dates are appropriate range and are of type dates. + + #use for booking a reservation and for checking reservations + end +end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb new file mode 100644 index 000000000..e039d53de --- /dev/null +++ b/specs/booking_spec.rb @@ -0,0 +1,7 @@ +require_relative 'spec_helper' + +describe "Booking class" do + it "" do + + end +end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb new file mode 100644 index 000000000..89214b3c1 --- /dev/null +++ b/specs/date_range_spec.rb @@ -0,0 +1,7 @@ +require_relative 'spec_helper' + +describe "DateRange Class" do + it " " do + + end +end From 17ec8999e75910cf883cf62113bb82d392576d34 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Tue, 5 Sep 2017 19:18:43 -0700 Subject: [PATCH 07/61] Adds test for daterange spec initialize --- lib/date_range.rb | 12 ++++++++++++ specs/date_range_spec.rb | 22 ++++++++++++++++++++-- specs/spec_helper.rb | 5 +++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index b7c48e963..96580b326 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,8 +1,20 @@ +require 'pry' +require 'date' + module Hotel class DateRange + + def initialize(check_in, check_out) + @check_in = check_in + @check_out = check_out + @nights = (@check_out - @check_in).to_i + @nights_arr = [] + + end #in start date [5], end date[6] #out array of nights [5,6] + #check that is vaild input, that the dates are appropriate range and are of type dates. #use for booking a reservation and for checking reservations diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 89214b3c1..1c3574fd5 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -1,7 +1,25 @@ require_relative 'spec_helper' describe "DateRange Class" do - it " " do - + before do + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,8) + @vacation = Hotel::DateRange.new(check_in,check_out) + end + # will respond to @check_in, @check_out + #will create a new instance of date_range that will output an array + #will validate inputs + describe "initialize" do + it "Instance of DateRange class must respond to check_in and check_out" do + @vacation.must_respond_to :check_in + @vacation.must_respond_to :check_out + end + it "check_in and check_out are of the Date class" do + @vacation.check_in.must_be_kind_of Date + @vacation.check_out.must_be_kind_of Date + end + end + describe "make_nights_arr method" do + end end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 1a2d304eb..0b44fa6a8 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -11,7 +11,8 @@ # Require any classes require_relative '../lib/reservations' -# require_relative '../lib/player' -# require_relative '../lib/tilebag' +require_relative '../lib/booking' +require_relative '../lib/date_range' +require_relative '../lib/room' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 3b34daa604cf34b46befb0e9623914a6e172dac7 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 08:36:07 -0700 Subject: [PATCH 08/61] Changes the name of reservation class to booking for clarity --- lib/booking.rb | 3 +++ lib/reservations.rb | 7 +++++-- lib/room.rb | 3 +++ specs/spec_helper.rb | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index b49740a2c..e07155526 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -1,3 +1,6 @@ +require 'pry' +require 'date' + module Hotel class Booking #initialize will have the following parameters (date_range, num_rooms) diff --git a/lib/reservations.rb b/lib/reservations.rb index 9dd06a5cb..1dd19caf9 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -1,12 +1,15 @@ +require 'pry' +require 'date' + module Hotel class Reservations #@allrooms - initializes with 20 instances of the room class - #all_reservations - array of instances of the reservation class + #all_reservations - array of instances of the booking class def make_reservation(start_date, end_date) #1 take start_date and end_date and pass it to date range class, date range will validate user input - #2 do we have availability? If yes make a reservation.new and push to all_reservations + #2 do we have availability? If yes make a booking.new(range_of_dates) and push to all_reservations # check_reservation # check_availability end diff --git a/lib/room.rb b/lib/room.rb index 6eaba9804..b39bbc843 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,3 +1,6 @@ +require 'pry' +require 'date' + module Hotel class Room #room_number diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 0b44fa6a8..f136fed0c 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -7,6 +7,7 @@ require 'minitest/pride' require 'minitest/skip_dsl' require 'pry' +require 'date' # Require any classes From 97fb45fd82df8800d748229d5765f355f9678771 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 11:21:53 -0700 Subject: [PATCH 09/61] Adds attr reader helper to date range class file --- lib/date_range.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/date_range.rb b/lib/date_range.rb index 96580b326..d27854592 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -3,6 +3,7 @@ module Hotel class DateRange + attr_reader :check_in, :check_out, :nights, :nights_arr def initialize(check_in, check_out) @check_in = check_in From 876b033b28e0081f9d782432bd0c7a4b641249d7 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 11:48:29 -0700 Subject: [PATCH 10/61] Adds spec test for valid date method that includes a custom exception --- specs/date_range_spec.rb | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 1c3574fd5..1fb9fdf40 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -4,22 +4,42 @@ before do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) + # check_out_bad = Date.new(2017,9,2) @vacation = Hotel::DateRange.new(check_in,check_out) + @vacation_bad_dates = Hotel::DateRange.new(check_out,check_in) end # will respond to @check_in, @check_out #will create a new instance of date_range that will output an array #will validate inputs describe "initialize" do - it "Instance of DateRange class must respond to check_in and check_out" do + it "Instance of DateRange class must respond to instance variables (check_in,check_out,nights, nights_arr" do @vacation.must_respond_to :check_in @vacation.must_respond_to :check_out + @vacation.must_respond_to :nights + @vacation.must_respond_to :nights_arr end it "check_in and check_out are of the Date class" do @vacation.check_in.must_be_kind_of Date @vacation.check_out.must_be_kind_of Date end + it "nights is an Integer" do + @vacation.nights.must_be_kind_of Integer + end + it "nights returns the correct number equal to the difference of checkout-checkin" do + @vacation.nights.must_equal 3 + end + it "nights_arr is an array" do + @vacation.nights.must_be_kind_of Array + end + end + describe "valid_date? method" do + it "valid_date? will raise an error if check_out if prior to check_in" do + proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError + end end describe "make_nights_arr method" do - + # it "" do + # binding.pry + # end end end From ccc6b10662692e0e5f48df9dd48b0f0cd053eef1 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 11:57:07 -0700 Subject: [PATCH 11/61] Created custom exception that will raise for an invalid date range --- lib/custom_exceptions.rb | 2 ++ lib/date_range.rb | 8 ++++++-- specs/date_range_spec.rb | 7 +++++-- specs/spec_helper.rb | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 lib/custom_exceptions.rb diff --git a/lib/custom_exceptions.rb b/lib/custom_exceptions.rb new file mode 100644 index 000000000..1c06c806e --- /dev/null +++ b/lib/custom_exceptions.rb @@ -0,0 +1,2 @@ +class InvalidDateRangeError < StandardError +end diff --git a/lib/date_range.rb b/lib/date_range.rb index d27854592..a8c6bb577 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -10,12 +10,16 @@ def initialize(check_in, check_out) @check_out = check_out @nights = (@check_out - @check_in).to_i @nights_arr = [] - end + #in start date [5], end date[6] #out array of nights [5,6] - + def valid_date? + if @check_in > @check_out + raise InvalidDateRangeError.new("Invalid Date Range: Check-out #{@check_out} is before Check-in #{@check_in}") + end + end #check that is vaild input, that the dates are appropriate range and are of type dates. #use for booking a reservation and for checking reservations diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 1fb9fdf40..45b5cb835 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -29,12 +29,15 @@ @vacation.nights.must_equal 3 end it "nights_arr is an array" do - @vacation.nights.must_be_kind_of Array + @vacation.nights_arr.must_be_kind_of Array end end describe "valid_date? method" do it "valid_date? will raise an error if check_out if prior to check_in" do - proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,8) + trip = Hotel::DateRange.new(check_out,check_in) + proc{trip.valid_date?}.must_raise InvalidDateRangeError end end describe "make_nights_arr method" do diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index f136fed0c..714b01e2b 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -15,5 +15,6 @@ require_relative '../lib/booking' require_relative '../lib/date_range' require_relative '../lib/room' +require_relative '../lib/custom_exceptions' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 95de54ddca748e3d861d4ad7b566a8898b246ba2 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 12:13:23 -0700 Subject: [PATCH 12/61] adds tests and method code for make nights arr method --- lib/date_range.rb | 20 ++++++++++++-------- specs/date_range_spec.rb | 23 ++++++++++++++++++++--- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index a8c6bb577..3e4ade2dc 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -12,16 +12,20 @@ def initialize(check_in, check_out) @nights_arr = [] end - #in start date [5], end date[6] - #out array of nights [5,6] - def valid_date? if @check_in > @check_out raise InvalidDateRangeError.new("Invalid Date Range: Check-out #{@check_out} is before Check-in #{@check_in}") end - end - #check that is vaild input, that the dates are appropriate range and are of type dates. + end #end valid_date? method - #use for booking a reservation and for checking reservations - end -end + def make_nights_arr + valid_date? + counter = 0 + @nights.times do + @nights_arr << (@check_in + counter) + counter += 1 + end + return @nights_arr + end #end make_nights_arr method + end #end DateRange class +end #end Hotel module diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 45b5cb835..163900c49 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -41,8 +41,25 @@ end end describe "make_nights_arr method" do - # it "" do - # binding.pry - # end + it "returns array" do + @vacation.make_nights_arr.must_be_kind_of Array + end + it "increase the size of instance variable @nights_arr" do + before = @vacation.nights_arr.length + # before.must_equal 0 + @vacation.make_nights_arr + after = @vacation.nights_arr.length + after.must_be :>, before + after.must_equal @vacation.nights + end + it "will generate an array that has a length equal to nights" do + @vacation.make_nights_arr.length.must_equal @vacation.nights + end + it "nested method valid_date? will raise exception if checkout is prior to checkin" do + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,8) + trip = Hotel::DateRange.new(check_out,check_in) + proc{trip.make_nights_arr}.must_raise InvalidDateRangeError + end end end From fd2fb92005fb07e449e755e6c624d6d9fb24c770 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 12:28:39 -0700 Subject: [PATCH 13/61] Adds room class spec tests and then the logic for rooms class to apass them --- lib/room.rb | 8 ++++++-- specs/room_spec.rb | 24 ++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/room.rb b/lib/room.rb index b39bbc843..f377f870c 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,7 +3,11 @@ module Hotel class Room - #room_number - #cost + attr_reader :room_number, :cost + + def initialize(room_number) + @room_number = room_number + @cost = 200 + end end end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index eca16a1ea..47fd07908 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -1,7 +1,27 @@ require_relative 'spec_helper' describe "Room Class" do - it "" do - + before do + @suite1 = Hotel::Room.new(15) + end + it "can be instantiated" do + room = Hotel::Room.new(15) + room.must_be_kind_of Hotel::Room + end + it "must respond to room_number and cost" do + @suite1.must_respond_to :room_number + @suite1.must_respond_to :cost end + it "cost must equal 200" do + @suite1.cost.must_equal 200 + end + it "cost must be a kind of Integer" do + @suite1.cost.must_be_kind_of Integer + end + it "room number must equal room number" do + @suite1.room_number.must_equal 15 + end + it "room number must be a kind of Integer" do + @suite1.room_number.must_be_kind_of Integer + end end From d241790d200af8d4c7a6144f42096d4ac5392847 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 13:51:41 -0700 Subject: [PATCH 14/61] Wrote tests for booking class spec file --- specs/booking_spec.rb | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index e039d53de..bc51104a4 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -1,7 +1,28 @@ require_relative 'spec_helper' describe "Booking class" do - it "" do - + before do + id = 1 + rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,8) + date_range = Hotel::DateRange.new(check_in,check_out) + @reservation = Hotel::Booking.new(id, rooms, date_range) + end + describe "Initialize" do + it "can be instantiated" do + @reservation.must_be_kind_of Hotel::Booking + end + it "must respond to all intance variables" do + @reservation.must_respond_to :id + @reservation.must_respond_to :total_cost + @reservation.must_respond_to :rooms + @reservation.must_respond_to :date_range + @reservation.must_respond_to :nights + end + it "total cost must return the appropriate amount, and be an Integer" do + @reservation.total_cost.must_be_kind_of Integer + @reservation.total_cost.must_equal 200 + end end end From 6eb99489c009fa5a71fca6140263b5779384d5ff Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 14:13:31 -0700 Subject: [PATCH 15/61] Added make nights array method to initialize method so it doesn't need to be called later --- lib/date_range.rb | 5 +++-- specs/date_range_spec.rb | 29 ++++------------------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 3e4ade2dc..df2ef4ae8 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -10,6 +10,7 @@ def initialize(check_in, check_out) @check_out = check_out @nights = (@check_out - @check_in).to_i @nights_arr = [] + make_nights_arr end def valid_date? @@ -25,7 +26,7 @@ def make_nights_arr @nights_arr << (@check_in + counter) counter += 1 end - return @nights_arr - end #end make_nights_arr method + # return @nights_arr + end #end make_nights_arr method end #end DateRange class end #end Hotel module diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 163900c49..58e699180 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -6,11 +6,8 @@ check_out = Date.new(2017,9,8) # check_out_bad = Date.new(2017,9,2) @vacation = Hotel::DateRange.new(check_in,check_out) - @vacation_bad_dates = Hotel::DateRange.new(check_out,check_in) + # @vacation_bad_dates = Hotel::DateRange.new(check_out,check_in) end - # will respond to @check_in, @check_out - #will create a new instance of date_range that will output an array - #will validate inputs describe "initialize" do it "Instance of DateRange class must respond to instance variables (check_in,check_out,nights, nights_arr" do @vacation.must_respond_to :check_in @@ -36,30 +33,12 @@ it "valid_date? will raise an error if check_out if prior to check_in" do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) - trip = Hotel::DateRange.new(check_out,check_in) - proc{trip.valid_date?}.must_raise InvalidDateRangeError + proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError end end describe "make_nights_arr method" do - it "returns array" do - @vacation.make_nights_arr.must_be_kind_of Array - end - it "increase the size of instance variable @nights_arr" do - before = @vacation.nights_arr.length - # before.must_equal 0 - @vacation.make_nights_arr - after = @vacation.nights_arr.length - after.must_be :>, before - after.must_equal @vacation.nights - end - it "will generate an array that has a length equal to nights" do - @vacation.make_nights_arr.length.must_equal @vacation.nights - end - it "nested method valid_date? will raise exception if checkout is prior to checkin" do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,8) - trip = Hotel::DateRange.new(check_out,check_in) - proc{trip.make_nights_arr}.must_raise InvalidDateRangeError + it "will populate nights array so that it is equal to the length of nights" do + @vacation.nights_arr.length.must_equal @vacation.nights end end end From 3499b1367e60e862ed39c3f52a5210c100422c15 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 14:21:13 -0700 Subject: [PATCH 16/61] Adds attr reader helper method to booking class --- lib/booking.rb | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index e07155526..935e9a95b 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -3,12 +3,18 @@ module Hotel class Booking - #initialize will have the following parameters (date_range, num_rooms) - #id - #total cost - #room(s) - #date_range - def total_cost + attr_reader :id, :rooms, :date_range, :nights, :total_cost + + def initialize(id, rooms, date_range) + @id = id + @rooms = rooms + @date_range = date_range + @nights = date_range.nights + @total_cost = '' end + #initialize will have the following parameters + #@rooms = @rooms.each {|room| @total_cost += room.cost} + # def total_cost + # end end end From d495c37c493bd015a1a476cd545380dbf1d97ec0 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 14:22:38 -0700 Subject: [PATCH 17/61] Adds some hash comments and updates spec tests for booking spec --- lib/booking.rb | 4 +--- specs/date_range_spec.rb | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index 935e9a95b..dcec616dd 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -12,9 +12,7 @@ def initialize(id, rooms, date_range) @nights = date_range.nights @total_cost = '' end - #initialize will have the following parameters + # figure out total cost method and them put it in initialize #@rooms = @rooms.each {|room| @total_cost += room.cost} - # def total_cost - # end end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 58e699180..3e0e4d0e4 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -9,7 +9,7 @@ # @vacation_bad_dates = Hotel::DateRange.new(check_out,check_in) end describe "initialize" do - it "Instance of DateRange class must respond to instance variables (check_in,check_out,nights, nights_arr" do + it "Instance of DateRange class must respond to instance variables" do @vacation.must_respond_to :check_in @vacation.must_respond_to :check_out @vacation.must_respond_to :nights From 08c533ab5922a2999c354234dc72a7e80d42230c Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 17:07:29 -0700 Subject: [PATCH 18/61] Update total cost of booking in initialize --- lib/booking.rb | 4 +--- specs/booking_spec.rb | 6 ++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index dcec616dd..a86bf89c7 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -10,9 +10,7 @@ def initialize(id, rooms, date_range) @rooms = rooms @date_range = date_range @nights = date_range.nights - @total_cost = '' + @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) end - # figure out total cost method and them put it in initialize - #@rooms = @rooms.each {|room| @total_cost += room.cost} end end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index bc51104a4..539549c74 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -20,9 +20,11 @@ @reservation.must_respond_to :date_range @reservation.must_respond_to :nights end - it "total cost must return the appropriate amount, and be an Integer" do + it "total cost must return the appropriate amount for 2 rooms, and be an Integer" do + @reservation.total_cost.must_equal 1200 + end + it "total cost must be an integer" do @reservation.total_cost.must_be_kind_of Integer - @reservation.total_cost.must_equal 200 end end end From d86ef753be5fdc4abfa068dd49300c444436ccc6 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Wed, 6 Sep 2017 17:48:22 -0700 Subject: [PATCH 19/61] Adds room creation to initialize method for reservation class --- lib/reservations.rb | 11 ++++++++++- specs/reservations_spec.rb | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 1dd19caf9..bb01e0624 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -3,7 +3,16 @@ module Hotel class Reservations - #@allrooms - initializes with 20 instances of the room class + attr_reader :all_rooms, :all_reservations + def initialize + @all_rooms = [] + @all_reservations = [] + 20.times do |i| + i += 1 + @all_rooms << Hotel::Room.new(i) + end + end + #@all_rooms - initializes with 20 instances of the room class #all_reservations - array of instances of the booking class def make_reservation(start_date, end_date) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index cce75388c..c777e38bb 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,7 +1,21 @@ require_relative 'spec_helper' describe "Reservations class" do - it "" do - + before do + @reservations = Hotel::Reservations.new + end + describe "initializes" do + it "initializes" do + @reservations.must_be_kind_of Hotel::Reservations + end + it "must respond to all_rooms and all_reservations" do + @reservations.must_respond_to :all_rooms && :all_reservations + end + it "all_rooms must give a list of all of the rooms in the hotel" do + @reservations.all_rooms.length.must_equal 20 + end + it "all_reservations must be a kind of array" do + @reservations.all_reservations.must_be_kind_of Array + end end end From a7e7a9416dd9c50311e60eaa1e6a256a8cfd6216 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 09:36:32 -0700 Subject: [PATCH 20/61] Cleans up spacing and comments --- specs/booking_spec.rb | 6 ++++++ specs/date_range_spec.rb | 1 + specs/spec_helper.rb | 1 + 3 files changed, 8 insertions(+) diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index 539549c74..17338268c 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -27,4 +27,10 @@ @reservation.total_cost.must_be_kind_of Integer end end + describe "check_reservations method" do + # returns an array of the dates that are unavailable + it "" do + + end + end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 3e0e4d0e4..80b4eff36 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -31,6 +31,7 @@ end describe "valid_date? method" do it "valid_date? will raise an error if check_out if prior to check_in" do + binding.pry check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 714b01e2b..510380768 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -8,6 +8,7 @@ require 'minitest/skip_dsl' require 'pry' require 'date' +require 'pry-nav' # Require any classes From d6a488587249f809b970bbba6ed76b9c1d542924 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 14:18:07 -0700 Subject: [PATCH 21/61] Add spec test for check reservations method, skipped some tests --- lib/booking.rb | 4 ++-- lib/reservations.rb | 7 +++--- specs/booking_spec.rb | 4 ++-- specs/date_range_spec.rb | 4 ++-- specs/reservations_spec.rb | 45 +++++++++++++++++++++++++++++++++----- specs/room_spec.rb | 2 +- specs/spec_helper.rb | 2 +- 7 files changed, 51 insertions(+), 17 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index a86bf89c7..384925c49 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -1,5 +1,5 @@ -require 'pry' -require 'date' +# require 'pry' +# require 'date' module Hotel class Booking diff --git a/lib/reservations.rb b/lib/reservations.rb index bb01e0624..6f04caed5 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -12,8 +12,6 @@ def initialize @all_rooms << Hotel::Room.new(i) end end - #@all_rooms - initializes with 20 instances of the room class - #all_reservations - array of instances of the booking class def make_reservation(start_date, end_date) #1 take start_date and end_date and pass it to date range class, date range will validate user input @@ -21,9 +19,12 @@ def make_reservation(start_date, end_date) #2 do we have availability? If yes make a booking.new(range_of_dates) and push to all_reservations # check_reservation # check_availability + # Hotel::Booking.new(id, rooms, date_range) end - def check_reservation(start_date, end_date) + def check_reservations(start_date, end_date) + #start_date and end date must be an instance of the date class + #1 take start_date and end_date and pass it to date range class, date range will validate user input #@all_reservations check if each find date #if reservation.date.include?(date_range[0]) diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index 17338268c..dc89f753f 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe "Booking class" do +xdescribe "Booking class" do before do id = 1 rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] @@ -28,7 +28,7 @@ end end describe "check_reservations method" do - # returns an array of the dates that are unavailable + # returns an array of the dates that are unavailable it "" do end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 80b4eff36..ec63a48e0 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe "DateRange Class" do +xdescribe "DateRange Class" do before do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) @@ -31,7 +31,7 @@ end describe "valid_date? method" do it "valid_date? will raise an error if check_out if prior to check_in" do - binding.pry + # binding.pry check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index c777e38bb..7961be54d 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,21 +1,54 @@ require_relative 'spec_helper' - describe "Reservations class" do before do - @reservations = Hotel::Reservations.new + # rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] + # check_in = Date.new(2017,9,5) + # check_out = Date.new(2017,9,6) + # dr1 = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6)) + # dr2 = Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7)) + # dr3 = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8)) + @res1 = Hotel::Booking.new(1, [Hotel::Room.new(1),Hotel::Room.new(2)], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) + @res2 = Hotel::Booking.new(2, [Hotel::Room.new(3),], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) + @res3 = Hotel::Booking.new(3, [Hotel::Room.new(4),], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) + @res4 = Hotel::Booking.new(4, [Hotel::Room.new(3),], Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) + res_arr = [@res1,@res2,@res3,@res4] + @hotel = Hotel::Reservations.new + res_arr.each do |res| + @hotel.all_reservations << res + end end describe "initializes" do it "initializes" do - @reservations.must_be_kind_of Hotel::Reservations + @hotel.must_be_kind_of Hotel::Reservations end it "must respond to all_rooms and all_reservations" do - @reservations.must_respond_to :all_rooms && :all_reservations + @hotel.must_respond_to :all_rooms && :all_reservations end it "all_rooms must give a list of all of the rooms in the hotel" do - @reservations.all_rooms.length.must_equal 20 + @hotel.all_rooms.length.must_equal 20 end it "all_reservations must be a kind of array" do - @reservations.all_reservations.must_be_kind_of Array + @hotel.all_reservations.must_be_kind_of Array + end + end + describe "check_reservations" do + #put in a date range and see a list of the rooms booked on that date + #return a list of rooms booked on that date in an array + it "must be an array of room objects" do + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,6) + @hotel.check_reservations(check_in,check_out)[0].must_be_kind_of Hotel::Room + @hotel.check_reservations(check_in,check_out).must_be_kind_of Array + end + it "return a list of rooms booked for a given date range" do + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,6) + @hotel.check_reservations(check_in,check_out).length.must_equal 4 + end + it "returns an empty array if nothing is booked" do + check_in = Date.new(2017,10,5) + check_out = Date.new(2017,10,6) + @hotel.check_reservations(check_in,check_out).must_be_empty end end end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 47fd07908..f946a3c9e 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -describe "Room Class" do +xdescribe "Room Class" do before do @suite1 = Hotel::Room.new(15) end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 510380768..5e92e97b7 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -8,7 +8,7 @@ require 'minitest/skip_dsl' require 'pry' require 'date' -require 'pry-nav' +# require 'pry-nav' # Require any classes From 3a12eb749307989f421971904b40a6c39984eed8 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 15:15:56 -0700 Subject: [PATCH 22/61] Wrote check reservation method passes every test except returns unique rooms --- lib/reservations.rb | 24 ++++++++++++++++++++---- specs/reservations_spec.rb | 11 ++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 6f04caed5..688433a0b 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -13,7 +13,7 @@ def initialize end end - def make_reservation(start_date, end_date) + def make_reservation(check_in,check_out) #1 take start_date and end_date and pass it to date range class, date range will validate user input #2 do we have availability? If yes make a booking.new(range_of_dates) and push to all_reservations @@ -22,9 +22,25 @@ def make_reservation(start_date, end_date) # Hotel::Booking.new(id, rooms, date_range) end - def check_reservations(start_date, end_date) - #start_date and end date must be an instance of the date class - + def check_reservations(check_in,check_out) + # run through valid_date? + range = DateRange.new(check_in,check_out).nights_arr + booked_rooms = [] + # binding.pry + range.each do |date| + @all_reservations.each do |booking| + # binding.pry + if booking.date_range.nights_arr.include?(date) + booking.rooms.each do |room| + if (!booked_rooms.include?(room)) + booked_rooms << room + end + end + end + end + end + # binding.pry + return booked_rooms #1 take start_date and end_date and pass it to date range class, date range will validate user input #@all_reservations check if each find date #if reservation.date.include?(date_range[0]) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 7961be54d..42a1426df 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -34,6 +34,11 @@ describe "check_reservations" do #put in a date range and see a list of the rooms booked on that date #return a list of rooms booked on that date in an array + it "will raise an error if invalid date range" do + check_in = Date.new(2017,9,5) + check_out = Date.new(2017,9,6) + proc{@hotel.check_reservations(check_out,check_in)}.must_raise InvalidDateRangeError + end it "must be an array of room objects" do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,6) @@ -42,8 +47,12 @@ end it "return a list of rooms booked for a given date range" do check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,6) + check_out = Date.new(2017,9,8) + binding.pry @hotel.check_reservations(check_in,check_out).length.must_equal 4 + end + it "returns a list of books rooms that is unique" do + end it "returns an empty array if nothing is booked" do check_in = Date.new(2017,10,5) From 72797cc805094b2ad5ce71148e1fc6c06bf2708a Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 15:38:16 -0700 Subject: [PATCH 23/61] updates spec test to test for unique returns --- lib/reservations.rb | 6 ------ specs/reservations_spec.rb | 32 +++++++++++++++----------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 688433a0b..73ec9451c 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -39,13 +39,7 @@ def check_reservations(check_in,check_out) end end end - # binding.pry return booked_rooms - #1 take start_date and end_date and pass it to date range class, date range will validate user input - #@all_reservations check if each find date - #if reservation.date.include?(date_range[0]) - #not_available << room - #return not_available end def check_availability diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 42a1426df..09f0bb61f 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,16 +1,11 @@ require_relative 'spec_helper' describe "Reservations class" do before do - # rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] - # check_in = Date.new(2017,9,5) - # check_out = Date.new(2017,9,6) - # dr1 = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6)) - # dr2 = Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7)) - # dr3 = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8)) + room3 = [Hotel::Room.new(3)] @res1 = Hotel::Booking.new(1, [Hotel::Room.new(1),Hotel::Room.new(2)], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res2 = Hotel::Booking.new(2, [Hotel::Room.new(3),], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res3 = Hotel::Booking.new(3, [Hotel::Room.new(4),], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) - @res4 = Hotel::Booking.new(4, [Hotel::Room.new(3),], Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) + @res2 = Hotel::Booking.new(2,room3, Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) + @res3 = Hotel::Booking.new(3, [Hotel::Room.new(4)], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) + @res4 = Hotel::Booking.new(4, room3, Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) res_arr = [@res1,@res2,@res3,@res4] @hotel = Hotel::Reservations.new res_arr.each do |res| @@ -32,8 +27,6 @@ end end describe "check_reservations" do - #put in a date range and see a list of the rooms booked on that date - #return a list of rooms booked on that date in an array it "will raise an error if invalid date range" do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,6) @@ -45,14 +38,13 @@ @hotel.check_reservations(check_in,check_out)[0].must_be_kind_of Hotel::Room @hotel.check_reservations(check_in,check_out).must_be_kind_of Array end - it "return a list of rooms booked for a given date range" do + it "return a list of rooms booked for a given date range, rooms should be unique" do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) - binding.pry - @hotel.check_reservations(check_in,check_out).length.must_equal 4 - end - it "returns a list of books rooms that is unique" do - + arr_booked = @hotel.check_reservations(check_in,check_out) + arr_booked.length.must_equal 4 + arr_booked_unique = arr_booked.uniq + arr_booked.length.must_equal arr_booked_unique.length end it "returns an empty array if nothing is booked" do check_in = Date.new(2017,10,5) @@ -60,4 +52,10 @@ @hotel.check_reservations(check_in,check_out).must_be_empty end end + describe "check_availability" do + it "returns an array of room objects" do + end + it "returns a list of rooms available, rooms should be unique" do + end + end end From ff52fe2c50db3dc91dd8f73b0a866eb8b6a7c018 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 16:30:34 -0700 Subject: [PATCH 24/61] update instances of rooms class in testing methods --- specs/reservations_spec.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 09f0bb61f..9163b647c 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,13 +1,13 @@ require_relative 'spec_helper' describe "Reservations class" do before do - room3 = [Hotel::Room.new(3)] - @res1 = Hotel::Booking.new(1, [Hotel::Room.new(1),Hotel::Room.new(2)], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res2 = Hotel::Booking.new(2,room3, Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res3 = Hotel::Booking.new(3, [Hotel::Room.new(4)], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) - @res4 = Hotel::Booking.new(4, room3, Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) - res_arr = [@res1,@res2,@res3,@res4] @hotel = Hotel::Reservations.new + @res1 = Hotel::Booking.new(1, [@hotel.all_rooms[0],@hotel.all_rooms[1]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) + @res2 = Hotel::Booking.new(2,[@hotel.all_rooms[2]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) + @res3 = Hotel::Booking.new(3, [@hotel.all_rooms[3]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) + @res4 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) + res_arr = [@res1,@res2,@res3,@res4] + res_arr.each do |res| @hotel.all_reservations << res end @@ -54,8 +54,10 @@ end describe "check_availability" do it "returns an array of room objects" do + end it "returns a list of rooms available, rooms should be unique" do + end end end From 190c6300213c3ab01dc575c78b0a4827aa364db5 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 16:31:14 -0700 Subject: [PATCH 25/61] sketched out make reservation method --- lib/reservations.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 73ec9451c..1259b3e10 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -13,8 +13,14 @@ def initialize end end - def make_reservation(check_in,check_out) + def make_reservation(check_in,check_out,num_rooms) + date_range = DateRange.new(check_in,check_out) + id = (@all_reservations.length + 1) + booking = Booking.new(id, num_rooms,date_range) + + @all_reservations << booking #1 take start_date and end_date and pass it to date range class, date range will validate user input + #make sure you have enough rooms available #2 do we have availability? If yes make a booking.new(range_of_dates) and push to all_reservations # check_reservation @@ -42,8 +48,13 @@ def check_reservations(check_in,check_out) return booked_rooms end - def check_availability + def check_availability(check_in,check_out) + booked_rooms = check_reservations(check_in,check_out) + available_rooms = [] + + # return the inverse not_available + end end end From 06b3aa892ff6c4acdd2c3a956f3f30b57742e11e Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 19:44:37 -0700 Subject: [PATCH 26/61] DRY up spec tests --- specs/reservations_spec.rb | 45 ++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 9163b647c..d3928b29e 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,13 +1,16 @@ require_relative 'spec_helper' describe "Reservations class" do before do + @check_in = Date.new(2017,9,5) + @check_out = Date.new(2017,9,6) @hotel = Hotel::Reservations.new - @res1 = Hotel::Booking.new(1, [@hotel.all_rooms[0],@hotel.all_rooms[1]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res2 = Hotel::Booking.new(2,[@hotel.all_rooms[2]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,6))) - @res3 = Hotel::Booking.new(3, [@hotel.all_rooms[3]], Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8))) - @res4 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(Date.new(2017,9,6),Date.new(2017,9,7))) + @res1 = Hotel::Booking.new(1, [@hotel.all_rooms[0],@hotel.all_rooms[1]], Hotel::DateRange.new(@check_in,@check_out)) + @res2 = Hotel::Booking.new(2,[@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in,@check_out)) + @res3 = Hotel::Booking.new(3, [@hotel.all_rooms[3]], Hotel::DateRange.new(@check_in,@check_out + 2)) + @res4 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in,@check_out + 1)) res_arr = [@res1,@res2,@res3,@res4] - + # @res5 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in - 1,@check_out - 1)) + # res_arr = [@res1,@res2,@res3,@res4] res_arr.each do |res| @hotel.all_reservations << res end @@ -28,36 +31,36 @@ end describe "check_reservations" do it "will raise an error if invalid date range" do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,6) - proc{@hotel.check_reservations(check_out,check_in)}.must_raise InvalidDateRangeError + proc{@hotel.check_reservations(@check_out,@check_in)}.must_raise InvalidDateRangeError end it "must be an array of room objects" do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,6) - @hotel.check_reservations(check_in,check_out)[0].must_be_kind_of Hotel::Room - @hotel.check_reservations(check_in,check_out).must_be_kind_of Array + holder = @hotel.check_reservations(@check_in,@check_out) + holder[0].must_be_kind_of Hotel::Room + holder.must_be_kind_of Array end it "return a list of rooms booked for a given date range, rooms should be unique" do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,8) - arr_booked = @hotel.check_reservations(check_in,check_out) - arr_booked.length.must_equal 4 + arr_booked = @hotel.check_reservations(@check_in,@check_out + 3) arr_booked_unique = arr_booked.uniq + arr_booked.length.must_equal 4 arr_booked.length.must_equal arr_booked_unique.length end it "returns an empty array if nothing is booked" do - check_in = Date.new(2017,10,5) - check_out = Date.new(2017,10,6) - @hotel.check_reservations(check_in,check_out).must_be_empty + @hotel.check_reservations(@check_in + 5,@check_out + 6).must_be_empty end end describe "check_availability" do it "returns an array of room objects" do - + @hotel.check_availability(@check_in,@check_out).must_be_kind_of Array + @hotel.check_availability(@check_in,@check_out)[0].must_be_kind_of Hotel::Room end it "returns a list of rooms available, rooms should be unique" do - + rooms_available = @hotel.check_availability(@check_in,@check_out) + rooms_available_unique = rooms_available.uniq + rooms_available.length.must_equal rooms_available_unique.length + end + it "returns an empty array if everything is booked" do + #will fail until we do make booking method + @hotel.check_availability(@check_in - 1,@check_out - 1).must_be_empty end end end From 46cf79369a59e61a95bd1526913d54c72644bd36 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Thu, 7 Sep 2017 19:45:14 -0700 Subject: [PATCH 27/61] Adds check availability method in reservations class --- lib/reservations.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 1259b3e10..87ee3e7eb 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -52,9 +52,12 @@ def check_availability(check_in,check_out) booked_rooms = check_reservations(check_in,check_out) available_rooms = [] - - # return the inverse not_available - + all_rooms.each do |room| + if !(booked_rooms.include?(room)) + available_rooms << room + end + end + return available_rooms end end end From 7fefb8400c2783a762b3b98121058bcd7c76fe86 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 10:55:52 -0700 Subject: [PATCH 28/61] Added a method for checking user input for checkin and out and test for edge case anything that isn't a date object --- lib/date_range.rb | 10 +++++++++- specs/date_range_spec.rb | 8 ++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index df2ef4ae8..33b303b58 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -8,12 +8,19 @@ class DateRange def initialize(check_in, check_out) @check_in = check_in @check_out = check_out - @nights = (@check_out - @check_in).to_i + # @nights = (@check_out - @check_in).to_i + @nights = '' @nights_arr = [] make_nights_arr end + def valid_input? + if @check_in.class != Date && @check_out.class != Date + raise ArgumentError.new("User input Check-in: #{@check_in} and Check-out: #{@check_out} are not valid inputs, must be a Date Object.") + end + end def valid_date? + valid_input? if @check_in > @check_out raise InvalidDateRangeError.new("Invalid Date Range: Check-out #{@check_out} is before Check-in #{@check_in}") end @@ -21,6 +28,7 @@ def valid_date? def make_nights_arr valid_date? + @nights = (@check_out - @check_in).to_i counter = 0 @nights.times do @nights_arr << (@check_in + counter) diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index ec63a48e0..b7dcfb476 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -xdescribe "DateRange Class" do +describe "DateRange Class" do before do check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) @@ -31,11 +31,15 @@ end describe "valid_date? method" do it "valid_date? will raise an error if check_out if prior to check_in" do - # binding.pry check_in = Date.new(2017,9,5) check_out = Date.new(2017,9,8) proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError end + it "valid_date? will raise an error if parameters check-in/out are not Date objects" do + check_in = "9/6/2017" + check_out = Date.new(2017,9,8) + proc{Hotel::DateRange.new(check_out,check_in)}.must_raise ArgumentError + end end describe "make_nights_arr method" do it "will populate nights array so that it is equal to the length of nights" do From 87141c0a4cd2fbe16cfd8da38fc000c5f6437a31 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:20:35 -0700 Subject: [PATCH 29/61] Adds more tests for make reservations method --- specs/reservations_spec.rb | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index d3928b29e..11b57fa67 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -58,9 +58,38 @@ rooms_available_unique = rooms_available.uniq rooms_available.length.must_equal rooms_available_unique.length end - it "returns an empty array if everything is booked" do + xit "returns an empty array if everything is booked" do #will fail until we do make booking method @hotel.check_availability(@check_in - 1,@check_out - 1).must_be_empty end end + describe "make_reservation" do + it "it will make create object of booking class" do + reservation = @hotel.make_reservation(@check_in,@check_out,1) + reservation.must_be_kind_of Hotel::Booking + end + it "will raise an ArgumentError if no rooms are avabilable" do + proc{@hotel.make_reservation(@check_in,@check_out,21)}.must_raise InvalidRoomQuantity + end + it "it adds a new reservation to all_reservations" do + before = @hotel.all_reservations.length + @hotel.make_reservation(@check_in,@check_out,1) + after = @hotel.all_reservations.length + after.must_equal (before + 1) + end + xit "make sure it creates consecutive ID numbers" do + id1 = @hotel.make_reservation(@check_in,@check_out,1).id + id2 = @hotel.make_reservation(@check_in,@check_out,1).id + id2.must_equal (id1 + 1) + end + xit "picks the next consecutive room number available" do + #not sure how to to test this + end + xit "you can book a room on the check out date" do + # not sure about this... + end + it "raise ArgumentError if you request more than 20 rooms" do + proc{@hotel.make_reservation(@check_in-3,@check_out-3,21)}.must_raise InvalidRoomQuantity + end + end end From 0f12b18783df2584b6ec0904cef321b060496d80 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:21:10 -0700 Subject: [PATCH 30/61] Addd a new custom exception for invalid numbers of rooms requested --- lib/custom_exceptions.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/custom_exceptions.rb b/lib/custom_exceptions.rb index 1c06c806e..bf581e0d1 100644 --- a/lib/custom_exceptions.rb +++ b/lib/custom_exceptions.rb @@ -1,2 +1,5 @@ class InvalidDateRangeError < StandardError end + +class InvalidRoomQuantity < StandardError +end From 0f7173e8822c3936b4e783807d6be91730484af2 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:23:02 -0700 Subject: [PATCH 31/61] Minor changes to spec files dealing with exceptions --- specs/booking_spec.rb | 2 +- specs/room_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index dc89f753f..b82751747 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -xdescribe "Booking class" do +describe "Booking class" do before do id = 1 rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] diff --git a/specs/room_spec.rb b/specs/room_spec.rb index f946a3c9e..47fd07908 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -1,6 +1,6 @@ require_relative 'spec_helper' -xdescribe "Room Class" do +describe "Room Class" do before do @suite1 = Hotel::Room.new(15) end From a252fb1b9affacc2efff112da8c6eee1f086dd79 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:23:57 -0700 Subject: [PATCH 32/61] Updates make reservation method to have rooms formatted as an array --- lib/reservations.rb | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 87ee3e7eb..c8ee803ec 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -16,26 +16,24 @@ def initialize def make_reservation(check_in,check_out,num_rooms) date_range = DateRange.new(check_in,check_out) id = (@all_reservations.length + 1) - booking = Booking.new(id, num_rooms,date_range) + rooms_available = check_availability(check_in,check_out) + if rooms_available.length < num_rooms && num_rooms > 20 + raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms, in your date range, to handle your request of #{num_rooms} rooms.") + end + #rooms needs to be an arry of rooms + rooms_to_book = rooms_available.shift(num_rooms) + booking = Booking.new(id,rooms_to_book,date_range) @all_reservations << booking - #1 take start_date and end_date and pass it to date range class, date range will validate user input - #make sure you have enough rooms available - - #2 do we have availability? If yes make a booking.new(range_of_dates) and push to all_reservations - # check_reservation - # check_availability - # Hotel::Booking.new(id, rooms, date_range) + return booking end def check_reservations(check_in,check_out) - # run through valid_date? - range = DateRange.new(check_in,check_out).nights_arr booked_rooms = [] - # binding.pry + range = DateRange.new(check_in,check_out).nights_arr + range.each do |date| @all_reservations.each do |booking| - # binding.pry if booking.date_range.nights_arr.include?(date) booking.rooms.each do |room| if (!booked_rooms.include?(room)) @@ -49,15 +47,16 @@ def check_reservations(check_in,check_out) end def check_availability(check_in,check_out) - booked_rooms = check_reservations(check_in,check_out) + booked_rooms = available_rooms = [] + check_reservations(check_in,check_out) all_rooms.each do |room| if !(booked_rooms.include?(room)) available_rooms << room end end - return available_rooms + return available_rooms end end end From 4722c92f5f4c288f6c82a9e2068ff29c80786cb9 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:49:56 -0700 Subject: [PATCH 33/61] Dry up specs before do statement and fixed variables in check_availability method --- lib/reservations.rb | 4 ++-- specs/reservations_spec.rb | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index c8ee803ec..35da380ea 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -47,9 +47,9 @@ def check_reservations(check_in,check_out) end def check_availability(check_in,check_out) - booked_rooms = + booked_rooms = check_reservations(check_in,check_out) available_rooms = [] - check_reservations(check_in,check_out) + all_rooms.each do |room| if !(booked_rooms.include?(room)) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 11b57fa67..4b080331a 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -4,16 +4,10 @@ @check_in = Date.new(2017,9,5) @check_out = Date.new(2017,9,6) @hotel = Hotel::Reservations.new - @res1 = Hotel::Booking.new(1, [@hotel.all_rooms[0],@hotel.all_rooms[1]], Hotel::DateRange.new(@check_in,@check_out)) - @res2 = Hotel::Booking.new(2,[@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in,@check_out)) - @res3 = Hotel::Booking.new(3, [@hotel.all_rooms[3]], Hotel::DateRange.new(@check_in,@check_out + 2)) - @res4 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in,@check_out + 1)) - res_arr = [@res1,@res2,@res3,@res4] - # @res5 = Hotel::Booking.new(4, [@hotel.all_rooms[2]], Hotel::DateRange.new(@check_in - 1,@check_out - 1)) - # res_arr = [@res1,@res2,@res3,@res4] - res_arr.each do |res| - @hotel.all_reservations << res - end + @hotel.make_reservation(@check_in,@check_out,1) + @hotel.make_reservation(@check_in,@check_out,1) + @hotel.make_reservation(@check_in,@check_out + 2,1) + @hotel.make_reservation(@check_in + 1,@check_out + 1,4) end describe "initializes" do it "initializes" do @@ -41,7 +35,7 @@ it "return a list of rooms booked for a given date range, rooms should be unique" do arr_booked = @hotel.check_reservations(@check_in,@check_out + 3) arr_booked_unique = arr_booked.uniq - arr_booked.length.must_equal 4 + arr_booked.length.must_equal 5 arr_booked.length.must_equal arr_booked_unique.length end it "returns an empty array if nothing is booked" do @@ -58,7 +52,9 @@ rooms_available_unique = rooms_available.uniq rooms_available.length.must_equal rooms_available_unique.length end - xit "returns an empty array if everything is booked" do + it "returns an empty array if everything is booked" do + @hotel.make_reservation(@check_in - 1,@check_out - 1,20) + # binding.pry #will fail until we do make booking method @hotel.check_availability(@check_in - 1,@check_out - 1).must_be_empty end @@ -77,9 +73,10 @@ after = @hotel.all_reservations.length after.must_equal (before + 1) end - xit "make sure it creates consecutive ID numbers" do + it "make sure it creates consecutive ID numbers" do id1 = @hotel.make_reservation(@check_in,@check_out,1).id id2 = @hotel.make_reservation(@check_in,@check_out,1).id + binding.pry id2.must_equal (id1 + 1) end xit "picks the next consecutive room number available" do From 13dd2dc35480f7cda026a45d81906a2c1d3d9c49 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 11:56:32 -0700 Subject: [PATCH 34/61] Changes a conditional statement from and to or in date range validate method --- lib/date_range.rb | 2 +- specs/date_range_spec.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 33b303b58..7dbe082d2 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -14,7 +14,7 @@ def initialize(check_in, check_out) make_nights_arr end def valid_input? - if @check_in.class != Date && @check_out.class != Date + if @check_in.class != Date || @check_out.class != Date raise ArgumentError.new("User input Check-in: #{@check_in} and Check-out: #{@check_out} are not valid inputs, must be a Date Object.") end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index b7dcfb476..938ae83bd 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -35,9 +35,10 @@ check_out = Date.new(2017,9,8) proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError end - it "valid_date? will raise an error if parameters check-in/out are not Date objects" do + it "valid_date? will raise an error if parameters check_in in check_out are not Date objects" do check_in = "9/6/2017" check_out = Date.new(2017,9,8) + proc{Hotel::DateRange.new(check_in,check_out)}.must_raise ArgumentError proc{Hotel::DateRange.new(check_out,check_in)}.must_raise ArgumentError end end From 1ebef790dbe4a5b56c94027c1ad67aad88d3172c Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 12:26:17 -0700 Subject: [PATCH 35/61] Attempt to DRY up reservations spec tests --- specs/reservations_spec.rb | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 4b080331a..a59134e1d 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -6,8 +6,6 @@ @hotel = Hotel::Reservations.new @hotel.make_reservation(@check_in,@check_out,1) @hotel.make_reservation(@check_in,@check_out,1) - @hotel.make_reservation(@check_in,@check_out + 2,1) - @hotel.make_reservation(@check_in + 1,@check_out + 1,4) end describe "initializes" do it "initializes" do @@ -33,13 +31,13 @@ holder.must_be_kind_of Array end it "return a list of rooms booked for a given date range, rooms should be unique" do - arr_booked = @hotel.check_reservations(@check_in,@check_out + 3) + arr_booked = @hotel.check_reservations(@check_in,@check_out) arr_booked_unique = arr_booked.uniq - arr_booked.length.must_equal 5 + arr_booked.length.must_equal 2 arr_booked.length.must_equal arr_booked_unique.length end it "returns an empty array if nothing is booked" do - @hotel.check_reservations(@check_in + 5,@check_out + 6).must_be_empty + @hotel.check_reservations(@check_in + 1,@check_out + + 1).must_be_empty end end describe "check_availability" do @@ -47,25 +45,23 @@ @hotel.check_availability(@check_in,@check_out).must_be_kind_of Array @hotel.check_availability(@check_in,@check_out)[0].must_be_kind_of Hotel::Room end - it "returns a list of rooms available, rooms should be unique" do + it "returns a list of the correct number of rooms available, rooms should be unique" do rooms_available = @hotel.check_availability(@check_in,@check_out) + rooms_available.length.must_equal 18 rooms_available_unique = rooms_available.uniq - rooms_available.length.must_equal rooms_available_unique.length + rooms_available.length.must_equal rooms_available_unique.length end it "returns an empty array if everything is booked" do - @hotel.make_reservation(@check_in - 1,@check_out - 1,20) - # binding.pry - #will fail until we do make booking method - @hotel.check_availability(@check_in - 1,@check_out - 1).must_be_empty + @hotel.make_reservation(@check_in,@check_out,18) + @hotel.check_availability(@check_in,@check_out).must_be_empty end end describe "make_reservation" do it "it will make create object of booking class" do - reservation = @hotel.make_reservation(@check_in,@check_out,1) - reservation.must_be_kind_of Hotel::Booking + @hotel.make_reservation(@check_in,@check_out,1).must_be_kind_of Hotel::Booking end it "will raise an ArgumentError if no rooms are avabilable" do - proc{@hotel.make_reservation(@check_in,@check_out,21)}.must_raise InvalidRoomQuantity + proc{@hotel.make_reservation(@check_in,@check_out,19)}.must_raise InvalidRoomQuantity end it "it adds a new reservation to all_reservations" do before = @hotel.all_reservations.length @@ -76,17 +72,21 @@ it "make sure it creates consecutive ID numbers" do id1 = @hotel.make_reservation(@check_in,@check_out,1).id id2 = @hotel.make_reservation(@check_in,@check_out,1).id - binding.pry id2.must_equal (id1 + 1) end - xit "picks the next consecutive room number available" do - #not sure how to to test this - end - xit "you can book a room on the check out date" do - # not sure about this... + it "picks the next consecutive room number available" do + room_num1 = @hotel.all_reservations[0].rooms[0].room_number + room_num2 = @hotel.all_reservations[1].rooms[0].room_number + room_num2.must_equal (room_num1 + 1) end it "raise ArgumentError if you request more than 20 rooms" do proc{@hotel.make_reservation(@check_in-3,@check_out-3,21)}.must_raise InvalidRoomQuantity end + it "lets you book on the check out date" do + # books all room on a given date + @hotel.make_reservation(@check_in + 1, @check_out + 1,20) + # can book rooms on the following day AKA checkout day + @hotel.make_reservation(@check_in + 2, @check_out + 2,20) + end end end From bc65f7238de9a3c8878da6f38e9e833b8c0ef9d8 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 12:28:06 -0700 Subject: [PATCH 36/61] Removes white space --- lib/reservations.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 35da380ea..977cce6b4 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -18,10 +18,9 @@ def make_reservation(check_in,check_out,num_rooms) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) - if rooms_available.length < num_rooms && num_rooms > 20 - raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms, in your date range, to handle your request of #{num_rooms} rooms.") + if rooms_available.length < num_rooms || num_rooms > 20 + raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") end - #rooms needs to be an arry of rooms rooms_to_book = rooms_available.shift(num_rooms) booking = Booking.new(id,rooms_to_book,date_range) @all_reservations << booking @@ -31,7 +30,6 @@ def make_reservation(check_in,check_out,num_rooms) def check_reservations(check_in,check_out) booked_rooms = [] range = DateRange.new(check_in,check_out).nights_arr - range.each do |date| @all_reservations.each do |booking| if booking.date_range.nights_arr.include?(date) @@ -49,8 +47,6 @@ def check_reservations(check_in,check_out) def check_availability(check_in,check_out) booked_rooms = check_reservations(check_in,check_out) available_rooms = [] - - all_rooms.each do |room| if !(booked_rooms.include?(room)) available_rooms << room From 0e03759a5f923fe758eea895664612f09f3f8d08 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 12:29:24 -0700 Subject: [PATCH 37/61] Minor formating changes and white space work in lib directory --- lib/booking.rb | 4 ++-- lib/date_range.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index 384925c49..a86bf89c7 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -1,5 +1,5 @@ -# require 'pry' -# require 'date' +require 'pry' +require 'date' module Hotel class Booking diff --git a/lib/date_range.rb b/lib/date_range.rb index 7dbe082d2..5da5c2169 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -8,16 +8,16 @@ class DateRange def initialize(check_in, check_out) @check_in = check_in @check_out = check_out - # @nights = (@check_out - @check_in).to_i @nights = '' @nights_arr = [] make_nights_arr end + def valid_input? if @check_in.class != Date || @check_out.class != Date raise ArgumentError.new("User input Check-in: #{@check_in} and Check-out: #{@check_out} are not valid inputs, must be a Date Object.") end - end + end #end valid_input? method def valid_date? valid_input? From 1380c482c8b08ee0cbb141d04edb49ea0167cfff Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 12:36:08 -0700 Subject: [PATCH 38/61] Dry up date range and booking spec --- specs/booking_spec.rb | 10 +--------- specs/date_range_spec.rb | 18 ++++++------------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index b82751747..4e15388e8 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -4,9 +4,7 @@ before do id = 1 rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,8) - date_range = Hotel::DateRange.new(check_in,check_out) + date_range = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8)) @reservation = Hotel::Booking.new(id, rooms, date_range) end describe "Initialize" do @@ -27,10 +25,4 @@ @reservation.total_cost.must_be_kind_of Integer end end - describe "check_reservations method" do - # returns an array of the dates that are unavailable - it "" do - - end - end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 938ae83bd..a4edd7d65 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -2,11 +2,9 @@ describe "DateRange Class" do before do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,8) - # check_out_bad = Date.new(2017,9,2) - @vacation = Hotel::DateRange.new(check_in,check_out) - # @vacation_bad_dates = Hotel::DateRange.new(check_out,check_in) + @check_in = Date.new(2017,9,5) + @check_out = Date.new(2017,9,8) + @vacation = Hotel::DateRange.new(@check_in,@check_out) end describe "initialize" do it "Instance of DateRange class must respond to instance variables" do @@ -31,15 +29,11 @@ end describe "valid_date? method" do it "valid_date? will raise an error if check_out if prior to check_in" do - check_in = Date.new(2017,9,5) - check_out = Date.new(2017,9,8) - proc{Hotel::DateRange.new(check_out,check_in)}.must_raise InvalidDateRangeError + proc{Hotel::DateRange.new(@check_out,@check_in)}.must_raise InvalidDateRangeError end it "valid_date? will raise an error if parameters check_in in check_out are not Date objects" do - check_in = "9/6/2017" - check_out = Date.new(2017,9,8) - proc{Hotel::DateRange.new(check_in,check_out)}.must_raise ArgumentError - proc{Hotel::DateRange.new(check_out,check_in)}.must_raise ArgumentError + proc{Hotel::DateRange.new(@check_in.to_s,@check_out)}.must_raise ArgumentError + proc{Hotel::DateRange.new(@check_out,@check_in.to_s)}.must_raise ArgumentError end end describe "make_nights_arr method" do From 097396b9f515bcf67dbaca8fca331e2b5155944d Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 14:25:52 -0700 Subject: [PATCH 39/61] Adds block.rb file --- lib/block.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 lib/block.rb diff --git a/lib/block.rb b/lib/block.rb new file mode 100644 index 000000000..0301235f0 --- /dev/null +++ b/lib/block.rb @@ -0,0 +1,13 @@ +require 'pry' +require 'date' +require_relative 'booking' + +module Hotel + class Block < Booking + def initialize(id, rooms, date_range, block_info, block_name, discount) + super(rooms, date_range, block_info) + @discount_room_price = discount + @block_name = id + end + end +end From 570072fc5ab5b23f57812756d55db52711c93e6b Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 14:40:53 -0700 Subject: [PATCH 40/61] Adding a new parameter for booking class called block infor that defaults to nil --- lib/booking.rb | 13 +++++++++++-- specs/booking_spec.rb | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index a86bf89c7..fda9f9084 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -3,14 +3,23 @@ module Hotel class Booking - attr_reader :id, :rooms, :date_range, :nights, :total_cost + attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info - def initialize(id, rooms, date_range) + def initialize(id, rooms, date_range, block_info = nil) #blockname and price? or whole block? @id = id + @block_info = block_info @rooms = rooms @date_range = date_range @nights = date_range.nights @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) end + # to book a roomin a block we would need to have total_cost update with the discounted range_of_dates + # def total_cost + # if @block == '' + # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + # else + # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + block.discount}) + # end + # end end end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index 4e15388e8..91d379d9c 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -5,7 +5,8 @@ id = 1 rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] date_range = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8)) - @reservation = Hotel::Booking.new(id, rooms, date_range) + block_info = [] + @reservation = Hotel::Booking.new(id, rooms, date_range,block_info) end describe "Initialize" do it "can be instantiated" do @@ -17,6 +18,8 @@ @reservation.must_respond_to :rooms @reservation.must_respond_to :date_range @reservation.must_respond_to :nights + @reservation.must_respond_to :block_info + end it "total cost must return the appropriate amount for 2 rooms, and be an Integer" do @reservation.total_cost.must_equal 1200 From 2413e55df5129c655e017f42992558c47d0f3415 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 14:41:54 -0700 Subject: [PATCH 41/61] Adds block to spec helper file --- specs/spec_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 5e92e97b7..a9e103dc4 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -17,5 +17,6 @@ require_relative '../lib/date_range' require_relative '../lib/room' require_relative '../lib/custom_exceptions' +require_relative '../lib/block' Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From ad8791c683e93427f7112ce9d1fc41c3c5088b66 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 14:44:58 -0700 Subject: [PATCH 42/61] updates make reservation method with new parameter for booking class --- lib/reservations.rb | 10 ++++++++-- specs/reservations_spec.rb | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 977cce6b4..e7309f7af 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -12,17 +12,23 @@ def initialize @all_rooms << Hotel::Room.new(i) end end + #def make_block(check_in,check_out,num_rooms) + # check_availability(check_in,check_out) + # date_range = DateRange.new(check_in,check_out) - def make_reservation(check_in,check_out,num_rooms) + def make_reservation(check_in,check_out,num_rooms, block_info = nil) date_range = DateRange.new(check_in,check_out) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) + # make this in to separate method if rooms_available.length < num_rooms || num_rooms > 20 raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") end + + # make this in to separate method rooms_to_book = rooms_available.shift(num_rooms) - booking = Booking.new(id,rooms_to_book,date_range) + booking = Booking.new(id,rooms_to_book,date_range, block_info) @all_reservations << booking return booking end diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index a59134e1d..bb3e3efd5 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -82,7 +82,7 @@ it "raise ArgumentError if you request more than 20 rooms" do proc{@hotel.make_reservation(@check_in-3,@check_out-3,21)}.must_raise InvalidRoomQuantity end - it "lets you book on the check out date" do + it "A reservation is allowed start on the same day that another reservation for the same room ends" do # books all room on a given date @hotel.make_reservation(@check_in + 1, @check_out + 1,20) # can book rooms on the following day AKA checkout day From f4a76c9874360e31edf0fd0ea67f048b842bf959 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Fri, 8 Sep 2017 15:56:24 -0700 Subject: [PATCH 43/61] playing with total cost method for booking and block classes --- lib/block.rb | 8 +++++--- lib/booking.rb | 8 +++++--- specs/block_spec.rb | 22 ++++++++++++++++++++++ specs/booking_spec.rb | 1 - 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 specs/block_spec.rb diff --git a/lib/block.rb b/lib/block.rb index 0301235f0..c2cd9a7c2 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -4,10 +4,12 @@ module Hotel class Block < Booking - def initialize(id, rooms, date_range, block_info, block_name, discount) - super(rooms, date_range, block_info) + attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info, :block_name, :discount + + def initialize(id, rooms, date_range, block_info = nil, block_name, discount) + super(id, rooms, date_range, block_info) @discount_room_price = discount - @block_name = id + @block_name = block_name end end end diff --git a/lib/booking.rb b/lib/booking.rb index fda9f9084..a03dd41f9 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -12,13 +12,15 @@ def initialize(id, rooms, date_range, block_info = nil) #blockname and price? or @date_range = date_range @nights = date_range.nights @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + # @total_cost = '' + total_cost end - # to book a roomin a block we would need to have total_cost update with the discounted range_of_dates + #to book a roomin a block we would need to have total_cost update with the discounted range_of_dates # def total_cost - # if @block == '' + # if @block_info == nil # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) # else - # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + block.discount}) + # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) # end # end end diff --git a/specs/block_spec.rb b/specs/block_spec.rb new file mode 100644 index 000000000..62c6d8bf9 --- /dev/null +++ b/specs/block_spec.rb @@ -0,0 +1,22 @@ +require_relative 'spec_helper' + +describe "Block Class" do + before do + id = 1 + rooms = [Hotel::Room.new(3),Hotel::Room.new(2),Hotel::Room.new(1)] + date_range = Hotel::DateRange.new(Date.new(2017,3,9),Date.new(2017,3,13)) + @wedding = Hotel::Block.new(id, rooms, date_range, "Royal Wedding",175) + end + it "can be instantiated" do + @wedding.must_be_kind_of Hotel::Block + # binding.pry + end + it "must respond to all intance variables" do + @wedding.must_respond_to :id + @wedding.must_respond_to :total_cost + @wedding.must_respond_to :rooms + @wedding.must_respond_to :date_range + @wedding.must_respond_to :nights + @wedding.must_respond_to :block_info + end +end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index 91d379d9c..bab5471d1 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -19,7 +19,6 @@ @reservation.must_respond_to :date_range @reservation.must_respond_to :nights @reservation.must_respond_to :block_info - end it "total cost must return the appropriate amount for 2 rooms, and be an Integer" do @reservation.total_cost.must_equal 1200 From e195727b495f8f30c968c5efe7c4f98e53778feb Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 16:22:03 -0700 Subject: [PATCH 44/61] first pass at adding block logic --- lib/block.rb | 29 ++++++++++++++++++++++++++++- lib/booking.rb | 25 +++++++++++++------------ lib/reservations.rb | 3 ++- specs/block_spec.rb | 21 +++++++++++++++++++++ specs/booking_spec.rb | 1 + 5 files changed, 65 insertions(+), 14 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index c2cd9a7c2..5ff3af089 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -4,12 +4,39 @@ module Hotel class Block < Booking - attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info, :block_name, :discount + attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info, :block_name, :discount, :reserved_rooms def initialize(id, rooms, date_range, block_info = nil, block_name, discount) super(id, rooms, date_range, block_info) @discount_room_price = discount @block_name = block_name + @reserved_rooms = [] + end + + def rooms_available_block + # count = @rooms.length - @reserved_rooms.length + return @rooms + end + + def book_room_in_block(num_rooms) + if num_rooms > 5 || num_rooms > @rooms.length + + block_info = [@block_name, @discount_room_price] + rooms_available_block.length + raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough rooms left in the block to handle your request of #{num_rooms} rooms.") + end + + rooms_arr = [] + num_rooms.times do + copy = self.rooms.shift(1) + copy1 = copy + self.reserved_rooms << copy1 + rooms_arr << copy1 + end + + booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) + + return booking end end end diff --git a/lib/booking.rb b/lib/booking.rb index a03dd41f9..e99aeec93 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -5,23 +5,24 @@ module Hotel class Booking attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info - def initialize(id, rooms, date_range, block_info = nil) #blockname and price? or whole block? + def initialize(id, rooms, date_range, block_info = []) #blockname and price? or whole block? @id = id @block_info = block_info @rooms = rooms @date_range = date_range @nights = date_range.nights - @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - # @total_cost = '' - total_cost + # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + @total_cost = 0 + # total_cost[@block_name + end + # to book a roomin a block we would need to have total_cost update with the discounted range_of_dates + def calc_total_cost + if @block_info.length > 0 + total = @rooms.length * @nights * @block_info[1] + @total_cost = total + else + @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + end end - #to book a roomin a block we would need to have total_cost update with the discounted range_of_dates - # def total_cost - # if @block_info == nil - # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - # else - # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - # end - # end end end diff --git a/lib/reservations.rb b/lib/reservations.rb index e7309f7af..069f1c403 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -16,7 +16,7 @@ def initialize # check_availability(check_in,check_out) # date_range = DateRange.new(check_in,check_out) - def make_reservation(check_in,check_out,num_rooms, block_info = nil) + def make_reservation(check_in,check_out,num_rooms, block_info = []) date_range = DateRange.new(check_in,check_out) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) @@ -28,6 +28,7 @@ def make_reservation(check_in,check_out,num_rooms, block_info = nil) # make this in to separate method rooms_to_book = rooms_available.shift(num_rooms) + # binding.pry booking = Booking.new(id,rooms_to_book,date_range, block_info) @all_reservations << booking return booking diff --git a/specs/block_spec.rb b/specs/block_spec.rb index 62c6d8bf9..8ae85cc5c 100644 --- a/specs/block_spec.rb +++ b/specs/block_spec.rb @@ -18,5 +18,26 @@ @wedding.must_respond_to :date_range @wedding.must_respond_to :nights @wedding.must_respond_to :block_info + @wedding.must_respond_to :reserved_rooms + end + describe "rooms_available_block" do + it "returns an array with the available rooms" do + @wedding.rooms_available_block.length.must_equal 3 + @wedding.rooms_available_block.must_be_kind_of Array + end + it "returns rooms objects" do + @wedding.rooms_available_block[0].must_be_kind_of Hotel::Room + end + end + describe "book_room_in_block" do + it "will raise exception if user tries book more rooms than are available" do + proc{@wedding.book_room_in_block(4)}.must_raise InvalidRoomQuantity + end + it "will return a booking object" do + @wedding.book_room_in_block(2).must_be_kind_of Hotel::Booking + end + it "booking will have correct total_cost" do + + end end end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index bab5471d1..ca4a8e756 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -21,6 +21,7 @@ @reservation.must_respond_to :block_info end it "total cost must return the appropriate amount for 2 rooms, and be an Integer" do + # binding.pry @reservation.total_cost.must_equal 1200 end it "total cost must be an integer" do From a26eee4201d66e84399bb9237779612dd1daabc5 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 16:24:55 -0700 Subject: [PATCH 45/61] Back track to get my old tests working --- lib/block.rb | 26 +++++++++++++------------- lib/booking.rb | 20 ++++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index 5ff3af089..744c34749 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -21,22 +21,22 @@ def rooms_available_block def book_room_in_block(num_rooms) if num_rooms > 5 || num_rooms > @rooms.length - block_info = [@block_name, @discount_room_price] + # block_info = [@block_name, @discount_room_price] rooms_available_block.length raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough rooms left in the block to handle your request of #{num_rooms} rooms.") end - - rooms_arr = [] - num_rooms.times do - copy = self.rooms.shift(1) - copy1 = copy - self.reserved_rooms << copy1 - rooms_arr << copy1 - end - - booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) - - return booking + # + # rooms_arr = [] + # num_rooms.times do + # copy = self.rooms.shift(1) + # copy1 = copy + # self.reserved_rooms << copy1 + # rooms_arr << copy1 + # end + # + # booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) + # + # return booking end end end diff --git a/lib/booking.rb b/lib/booking.rb index e99aeec93..94224859e 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -11,18 +11,18 @@ def initialize(id, rooms, date_range, block_info = []) #blockname and price? or @rooms = rooms @date_range = date_range @nights = date_range.nights - # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - @total_cost = 0 + @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + # @total_cost = 0 # total_cost[@block_name end # to book a roomin a block we would need to have total_cost update with the discounted range_of_dates - def calc_total_cost - if @block_info.length > 0 - total = @rooms.length * @nights * @block_info[1] - @total_cost = total - else - @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - end - end + # def calc_total_cost + # if @block_info.length > 0 + # total = @rooms.length * @nights * @block_info[1] + # @total_cost = total + # else + # @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) + # end + # end end end From 92cb7774943e15d963ed2e19feb8c9f2aad11424 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 16:40:16 -0700 Subject: [PATCH 46/61] changed the booking and block class parameters and then modified the test specs so they all pass again --- lib/block.rb | 7 +++---- lib/booking.rb | 2 +- lib/reservations.rb | 2 +- lib/room.rb | 3 ++- specs/block_spec.rb | 4 ++-- specs/booking_spec.rb | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index 744c34749..202f8d582 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -6,10 +6,9 @@ module Hotel class Block < Booking attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info, :block_name, :discount, :reserved_rooms - def initialize(id, rooms, date_range, block_info = nil, block_name, discount) - super(id, rooms, date_range, block_info) - @discount_room_price = discount - @block_name = block_name + def initialize(id, rooms, date_range, block_info) + super(id, rooms, date_range) + @block_info = block_info @reserved_rooms = [] end diff --git a/lib/booking.rb b/lib/booking.rb index 94224859e..9f292b42a 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -5,7 +5,7 @@ module Hotel class Booking attr_reader :id, :rooms, :date_range, :nights, :total_cost, :block_info - def initialize(id, rooms, date_range, block_info = []) #blockname and price? or whole block? + def initialize(id, rooms, date_range, block_info: nil) #blockname and price? or whole block? @id = id @block_info = block_info @rooms = rooms diff --git a/lib/reservations.rb b/lib/reservations.rb index 069f1c403..191989790 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -29,7 +29,7 @@ def make_reservation(check_in,check_out,num_rooms, block_info = []) # make this in to separate method rooms_to_book = rooms_available.shift(num_rooms) # binding.pry - booking = Booking.new(id,rooms_to_book,date_range, block_info) + booking = Booking.new(id,rooms_to_book,date_range, block_info: false) @all_reservations << booking return booking end diff --git a/lib/room.rb b/lib/room.rb index f377f870c..b045127e2 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -5,9 +5,10 @@ module Hotel class Room attr_reader :room_number, :cost - def initialize(room_number) + def initialize(room_number, booked: nil) @room_number = room_number @cost = 200 + @booked = booked end end end diff --git a/specs/block_spec.rb b/specs/block_spec.rb index 8ae85cc5c..37773560e 100644 --- a/specs/block_spec.rb +++ b/specs/block_spec.rb @@ -5,7 +5,7 @@ id = 1 rooms = [Hotel::Room.new(3),Hotel::Room.new(2),Hotel::Room.new(1)] date_range = Hotel::DateRange.new(Date.new(2017,3,9),Date.new(2017,3,13)) - @wedding = Hotel::Block.new(id, rooms, date_range, "Royal Wedding",175) + @wedding = Hotel::Block.new(id, rooms, date_range, "Royal Wedding") end it "can be instantiated" do @wedding.must_be_kind_of Hotel::Block @@ -37,7 +37,7 @@ @wedding.book_room_in_block(2).must_be_kind_of Hotel::Booking end it "booking will have correct total_cost" do - + end end end diff --git a/specs/booking_spec.rb b/specs/booking_spec.rb index ca4a8e756..d79b0f8ff 100644 --- a/specs/booking_spec.rb +++ b/specs/booking_spec.rb @@ -6,7 +6,7 @@ rooms = [Hotel::Room.new(15),Hotel::Room.new(16)] date_range = Hotel::DateRange.new(Date.new(2017,9,5),Date.new(2017,9,8)) block_info = [] - @reservation = Hotel::Booking.new(id, rooms, date_range,block_info) + @reservation = Hotel::Booking.new(id, rooms, date_range) end describe "Initialize" do it "can be instantiated" do From 79a34c76338c3121b69ac4cd60e3b11d7158c201 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 19:40:00 -0700 Subject: [PATCH 47/61] Refactored check availability in block method --- lib/block.rb | 49 +++++++++++++++++++++++++-------------------- specs/block_spec.rb | 23 ++++++++++----------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index 202f8d582..386a26478 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -9,33 +9,38 @@ class Block < Booking def initialize(id, rooms, date_range, block_info) super(id, rooms, date_range) @block_info = block_info - @reserved_rooms = [] + # @reserved_rooms = [] end def rooms_available_block + rooms_available = [] + @rooms.each do |room| + if room.booked == false || room.booked == nil + rooms_available << room + end + end # count = @rooms.length - @reserved_rooms.length - return @rooms + return rooms_available end - def book_room_in_block(num_rooms) - if num_rooms > 5 || num_rooms > @rooms.length - - # block_info = [@block_name, @discount_room_price] - rooms_available_block.length - raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough rooms left in the block to handle your request of #{num_rooms} rooms.") - end - # - # rooms_arr = [] - # num_rooms.times do - # copy = self.rooms.shift(1) - # copy1 = copy - # self.reserved_rooms << copy1 - # rooms_arr << copy1 - # end - # - # booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) - # - # return booking - end + # def book_room_in_block(num_rooms) + # if num_rooms > 5 || num_rooms > @rooms.length + # + # rooms_available_block.length + # raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough rooms left in the block to handle your request of #{num_rooms} rooms.") + # end + # # + # # rooms_arr = [] + # # num_rooms.times do + # # copy = self.rooms.shift(1) + # # copy1 = copy + # # self.reserved_rooms << copy1 + # # rooms_arr << copy1 + # # end + # # + # # booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) + # # + # # return booking + # end end end diff --git a/specs/block_spec.rb b/specs/block_spec.rb index 37773560e..549bee657 100644 --- a/specs/block_spec.rb +++ b/specs/block_spec.rb @@ -9,7 +9,6 @@ end it "can be instantiated" do @wedding.must_be_kind_of Hotel::Block - # binding.pry end it "must respond to all intance variables" do @wedding.must_respond_to :id @@ -29,15 +28,15 @@ @wedding.rooms_available_block[0].must_be_kind_of Hotel::Room end end - describe "book_room_in_block" do - it "will raise exception if user tries book more rooms than are available" do - proc{@wedding.book_room_in_block(4)}.must_raise InvalidRoomQuantity - end - it "will return a booking object" do - @wedding.book_room_in_block(2).must_be_kind_of Hotel::Booking - end - it "booking will have correct total_cost" do - - end - end + # describe "book_room_in_block" do + # it "will raise exception if user tries book more rooms than are available" do + # proc{@wedding.book_room_in_block(4)}.must_raise InvalidRoomQuantity + # end + # it "will return a booking object" do + # @wedding.book_room_in_block(2).must_be_kind_of Hotel::Booking + # end + # it "booking will have correct total_cost" do + # + # end + # # end end From d36e017baca210bf68c118d76e7bca2aed09d8bf Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 19:40:41 -0700 Subject: [PATCH 48/61] adds booked to attr reader method --- lib/room.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/room.rb b/lib/room.rb index b045127e2..d39246974 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -3,7 +3,7 @@ module Hotel class Room - attr_reader :room_number, :cost + attr_reader :room_number, :cost, :booked def initialize(room_number, booked: nil) @room_number = room_number From 27262e86895ce63c91084d020decf8a71d2a7947 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 21:15:06 -0700 Subject: [PATCH 49/61] Updates accessor in rooms class --- lib/room.rb | 1 + specs/room_spec.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/room.rb b/lib/room.rb index d39246974..5262e8cef 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -4,6 +4,7 @@ module Hotel class Room attr_reader :room_number, :cost, :booked + attr_accessor :booked def initialize(room_number, booked: nil) @room_number = room_number diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 47fd07908..8d8210c42 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -11,6 +11,7 @@ it "must respond to room_number and cost" do @suite1.must_respond_to :room_number @suite1.must_respond_to :cost + @suite1.must_respond_to :booked end it "cost must equal 200" do @suite1.cost.must_equal 200 From e3c9c59e7d45527d9bbea6dbf39d6c3bcdd0c7e5 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 21:16:09 -0700 Subject: [PATCH 50/61] Got make reservations method to work with block logic --- lib/reservations.rb | 43 +++++++++++++++++++++++++++++--------- specs/reservations_spec.rb | 7 +++++++ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 191989790..811147d1b 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -12,24 +12,27 @@ def initialize @all_rooms << Hotel::Room.new(i) end end - #def make_block(check_in,check_out,num_rooms) - # check_availability(check_in,check_out) - # date_range = DateRange.new(check_in,check_out) - def make_reservation(check_in,check_out,num_rooms, block_info = []) + def make_reservation(check_in,check_out,num_rooms, block_name:false) + date_range = DateRange.new(check_in,check_out) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) # make this in to separate method - if rooms_available.length < num_rooms || num_rooms > 20 - raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") + enough_rooms?(rooms_available, num_rooms) + rooms_to_book = rooms_available.shift(num_rooms) + + if block_name == false + booking = Booking.new(id,rooms_to_book,date_range, block_info: false) + else + num_rooms.times do |i| + room = rooms_to_book[i] + room.booked = true + end + booking = Block.new(id,rooms_to_book,date_range,block_name) end - # make this in to separate method - rooms_to_book = rooms_available.shift(num_rooms) - # binding.pry - booking = Booking.new(id,rooms_to_book,date_range, block_info: false) @all_reservations << booking return booking end @@ -61,5 +64,25 @@ def check_availability(check_in,check_out) end return available_rooms end + + def enough_rooms?(rooms_available, num_rooms) + if rooms_available.length < num_rooms || num_rooms > 20 + raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") + end + end + + def reserve_from_block + + end + + def prime_room_for_block(rooms_to_book) + updated_rooms = [] + rooms_to_book.times do |i| + room = rooms_to_book[i] + room.booked = true + updated_rooms << room + end + return updated_rooms + end end end diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index bb3e3efd5..69d21b3c1 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -6,6 +6,7 @@ @hotel = Hotel::Reservations.new @hotel.make_reservation(@check_in,@check_out,1) @hotel.make_reservation(@check_in,@check_out,1) + @block = @hotel.make_reservation(@check_in - 10,@check_out - 10,5, block_name: "party") end describe "initializes" do it "initializes" do @@ -88,5 +89,11 @@ # can book rooms on the following day AKA checkout day @hotel.make_reservation(@check_in + 2, @check_out + 2,20) end + it "will create a block, " do + @block.must_be_kind_of Hotel::Booking + end + it "will raise an exception if user tried to block off more than 5 rooms." do + proc{@hotel.make_reservation(@check_in - 10,@check_out - 10,7, block_name: "pool party")}.must_raise InvalidRoomQuantity + end end end From d787e1fccfaf28a179e84f5a84d73a11bf499a69 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 21:26:14 -0700 Subject: [PATCH 51/61] Update enough rooms method to that is raises exception for block trying to reserve more then 5 rooms --- lib/reservations.rb | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 811147d1b..6ad6cb4f5 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -19,8 +19,7 @@ def make_reservation(check_in,check_out,num_rooms, block_name:false) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) - # make this in to separate method - enough_rooms?(rooms_available, num_rooms) + enough_rooms?(rooms_available, num_rooms, block_name) rooms_to_book = rooms_available.shift(num_rooms) if block_name == false @@ -65,7 +64,10 @@ def check_availability(check_in,check_out) return available_rooms end - def enough_rooms?(rooms_available, num_rooms) + def enough_rooms?(rooms_available, num_rooms, block_name) + if block_name != false && num_rooms > 5 + raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") + end if rooms_available.length < num_rooms || num_rooms > 20 raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") end @@ -74,15 +76,5 @@ def enough_rooms?(rooms_available, num_rooms) def reserve_from_block end - - def prime_room_for_block(rooms_to_book) - updated_rooms = [] - rooms_to_book.times do |i| - room = rooms_to_book[i] - room.booked = true - updated_rooms << room - end - return updated_rooms - end end end From dcd97fa73a10b02b2d7999b8c263e85aac3b680b Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:47:14 -0700 Subject: [PATCH 52/61] Adds new test specs --- specs/reservations_spec.rb | 39 ++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 69d21b3c1..9690dafd8 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -89,11 +89,42 @@ # can book rooms on the following day AKA checkout day @hotel.make_reservation(@check_in + 2, @check_out + 2,20) end - it "will create a block, " do - @block.must_be_kind_of Hotel::Booking + describe "make a block " do + it "will create a block, " do + @block.must_be_kind_of Hotel::Booking + end + it "will raise an exception if user tried to block off more than 5 rooms." do + proc{@hotel.make_reservation(@check_in - 10,@check_out - 10,7, block_name: "pool party")}.must_raise InvalidRoomQuantity + end + it "block 5 rooms and none are reserved" do + @block.rooms.length.must_equal 5 + @block.rooms.each do |room| + room.booked.must_equal false + end + end + it "return an array of availbe rooms within the block" do + @block.rooms_available_block.must_be_kind_of Array + @block.rooms_available_block.each do |room| + room.booked.must_equal false + end + end end - it "will raise an exception if user tried to block off more than 5 rooms." do - proc{@hotel.make_reservation(@check_in - 10,@check_out - 10,7, block_name: "pool party")}.must_raise InvalidRoomQuantity + end + describe "reserve_from_block" do + it "returns a booking" do + @hotel.reserve_from_block(@block,1).must_be_kind_of Hotel::Booking + end + it "raises an error if user tries to reserve more rooms than are available" do + proc{@hotel.reserve_from_block(@block,7)}.must_raise InvalidRoomQuantity + end + it "changes the status of rooms booked from nil to true" do + @hotel.reserve_from_block(@block,1) + @block.rooms.each do |room| + room.booked.must_equal false + end + end + it "booked room has same date range as block" do + @hotel.reserve_from_block(@block,1).date_range.must_equal @block.date_range end end end From affc5f2a72dc37f334df4824b54b531f5e844892 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:47:55 -0700 Subject: [PATCH 53/61] adds new method to update room state --- lib/reservations.rb | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 6ad6cb4f5..0b4f3065e 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -23,12 +23,16 @@ def make_reservation(check_in,check_out,num_rooms, block_name:false) rooms_to_book = rooms_available.shift(num_rooms) if block_name == false + update_room_state(rooms_to_book,num_rooms,true) + # num_rooms.times do |i| + # rooms_to_book[i].booked = true + # end booking = Booking.new(id,rooms_to_book,date_range, block_info: false) else - num_rooms.times do |i| - room = rooms_to_book[i] - room.booked = true - end + update_room_state(rooms_to_book,num_rooms,false) + # num_rooms.times do |i| + # rooms_to_book[i].booked = false + # end booking = Block.new(id,rooms_to_book,date_range,block_name) end @@ -65,16 +69,33 @@ def check_availability(check_in,check_out) end def enough_rooms?(rooms_available, num_rooms, block_name) - if block_name != false && num_rooms > 5 - raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") + if block_name != false && num_rooms > 5 + raise InvalidRoomQuantity.new("You cannot book more than 5 rooms in a block.") end if rooms_available.length < num_rooms || num_rooms > 20 raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough available rooms to handle your request of #{num_rooms} rooms.") end end - def reserve_from_block + def reserve_from_block(block, num_rooms) + rooms_to_book = block.rooms_available_block + enough_rooms?(rooms_to_book,num_rooms,false) + rooms_to_book = update_room_state(rooms_to_book,num_rooms,false) + # num_rooms.times do |i| + # rooms_to_book[i].booked = false + # end + + id = all_reservations.length + 1 + booking = Booking.new(id,rooms_to_book,block.date_range, block_info:block.block_name) + return booking + end + + def update_room_state(rooms_to_book,num_rooms,state) + num_rooms.times do |i| + rooms_to_book[i].booked = state + end + return rooms_to_book end end end From 535c97b6ed7367f184afd74b9bb65c0b25393233 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:48:58 -0700 Subject: [PATCH 54/61] Clean up old hashed out code from block spec --- lib/block.rb | 1 - specs/block_spec.rb | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index 386a26478..4a6b59759 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -19,7 +19,6 @@ def rooms_available_block rooms_available << room end end - # count = @rooms.length - @reserved_rooms.length return rooms_available end diff --git a/specs/block_spec.rb b/specs/block_spec.rb index 549bee657..582d446f8 100644 --- a/specs/block_spec.rb +++ b/specs/block_spec.rb @@ -28,15 +28,4 @@ @wedding.rooms_available_block[0].must_be_kind_of Hotel::Room end end - # describe "book_room_in_block" do - # it "will raise exception if user tries book more rooms than are available" do - # proc{@wedding.book_room_in_block(4)}.must_raise InvalidRoomQuantity - # end - # it "will return a booking object" do - # @wedding.book_room_in_block(2).must_be_kind_of Hotel::Booking - # end - # it "booking will have correct total_cost" do - # - # end - # # end end From 7341b7f394e410ded7fe24c22509a70b5fe03171 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:51:27 -0700 Subject: [PATCH 55/61] Clean up old hashed out code from reservations --- lib/reservations.rb | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/lib/reservations.rb b/lib/reservations.rb index 0b4f3065e..ae338d786 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -14,28 +14,19 @@ def initialize end def make_reservation(check_in,check_out,num_rooms, block_name:false) - date_range = DateRange.new(check_in,check_out) id = (@all_reservations.length + 1) rooms_available = check_availability(check_in,check_out) - enough_rooms?(rooms_available, num_rooms, block_name) rooms_to_book = rooms_available.shift(num_rooms) if block_name == false update_room_state(rooms_to_book,num_rooms,true) - # num_rooms.times do |i| - # rooms_to_book[i].booked = true - # end booking = Booking.new(id,rooms_to_book,date_range, block_info: false) else update_room_state(rooms_to_book,num_rooms,false) - # num_rooms.times do |i| - # rooms_to_book[i].booked = false - # end booking = Block.new(id,rooms_to_book,date_range,block_name) end - @all_reservations << booking return booking end @@ -81,11 +72,6 @@ def reserve_from_block(block, num_rooms) rooms_to_book = block.rooms_available_block enough_rooms?(rooms_to_book,num_rooms,false) rooms_to_book = update_room_state(rooms_to_book,num_rooms,false) - - # num_rooms.times do |i| - # rooms_to_book[i].booked = false - # end - id = all_reservations.length + 1 booking = Booking.new(id,rooms_to_book,block.date_range, block_info:block.block_name) return booking From da1e6f4bd6c46232149202c784119e430bafca83 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:55:04 -0700 Subject: [PATCH 56/61] Cleaned up Block class --- lib/block.rb | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/lib/block.rb b/lib/block.rb index 4a6b59759..3666f4302 100644 --- a/lib/block.rb +++ b/lib/block.rb @@ -9,7 +9,6 @@ class Block < Booking def initialize(id, rooms, date_range, block_info) super(id, rooms, date_range) @block_info = block_info - # @reserved_rooms = [] end def rooms_available_block @@ -21,25 +20,5 @@ def rooms_available_block end return rooms_available end - - # def book_room_in_block(num_rooms) - # if num_rooms > 5 || num_rooms > @rooms.length - # - # rooms_available_block.length - # raise InvalidRoomQuantity.new("Unfortunately the hotel does not have enough rooms left in the block to handle your request of #{num_rooms} rooms.") - # end - # # - # # rooms_arr = [] - # # num_rooms.times do - # # copy = self.rooms.shift(1) - # # copy1 = copy - # # self.reserved_rooms << copy1 - # # rooms_arr << copy1 - # # end - # # - # # booking = Hotel::Booking.new(0,rooms_arr, @date_range, [@block_name, @discount_room_price]) - # # - # # return booking - # end end end From af98d6e91c85dc8fa2ee15f860d50e11f132c7b7 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 10 Sep 2017 22:56:31 -0700 Subject: [PATCH 57/61] Making comments for future work --- lib/booking.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/booking.rb b/lib/booking.rb index 9f292b42a..e0fa142d0 100644 --- a/lib/booking.rb +++ b/lib/booking.rb @@ -12,9 +12,8 @@ def initialize(id, rooms, date_range, block_info: nil) #blockname and price? or @date_range = date_range @nights = date_range.nights @total_cost = (@nights * rooms.inject(0){|sum,room| sum + room.cost}) - # @total_cost = 0 - # total_cost[@block_name end + # ran out of time to update total cost for a block, ideally I would pass through a discount and have that applied to total cost # to book a roomin a block we would need to have total_cost update with the discounted range_of_dates # def calc_total_cost # if @block_info.length > 0 From a5be186f083c196362eed3d7b16d71085e58b789 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 1 Oct 2017 14:35:18 -0700 Subject: [PATCH 58/61] Adds design activity --- design-activity.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 design-activity.md diff --git a/design-activity.md b/design-activity.md new file mode 100644 index 000000000..d7d70c8a2 --- /dev/null +++ b/design-activity.md @@ -0,0 +1,48 @@ + +Both implementations include the following three classes - CartEntry, ShoppingCart, and Order + + +The CartEntry class holds information on price and quantity for a given entry into a shopping cart. +ShoppingCart - is a collection of CartEntry objects. +Order - Responsible for the shopping cart and the total price of the cart. + + + +The order class is the biggest class and draws upon the shopping cart class which in turn is in itself a collection of CartEntries. + + +CartEntry: Stores the unit price and the quantity of each CartEntry object. +ShoppingCart: Stores a collection of CartEntry object in an array. +Order: Stores a ShoppingCart object. + + +CartEntry: + Implementation A - No methods. + Implementation B - A price method to calculate and return the price of the CartEntry. + +ShoppingCart: + Implementation A - No methods. + Implementation B - Has a price method that looks at each entry in the shopping cart, calls the CartEntry price method, and updates the variable sum, then returns the sum variable. + +Order: + Both implementations Order class have a total_price method. They each use the same structure to calculate and add sales tax but they ways they go about calculating the total price of the cart are they are quite different. + + Implementation A - table the total_price method loops through each entry in the cart (CartEntry), calculates the price per entry, updates the sum variable with each entries price. Then the sales tax is calculates and added to the sum and the total_price is returned. + + Implementation B - the Order class total_price method calls the price method built into the ShoppingCart class on the instance of the ShoppingCart object and stores the price into a variable. Then the sales tax is calculates and added to the sum and the total_price is returned. + + Implementation A's total_price method is self contained while the total_price method in implementation B is dependent on the price method in each of the other classes. + + + + In implementation A the total_price method logic is relatively self contained or retained while in Imp B the logic is delegated to both Shopping Cart and CartEntry classes by stringing their price methods together. + + + In implementation A the total_price directly manipulate the instance variables of the CartEntry instances while implementation B just calls the classes method on the instance of the class object. + + +Implementation B would be easier to change because you could add some logic into the CartEntry class so that when a certain quantity is reached you discount the price. In order to do that in Implementation A you would have to add logic to the Orders class which is messy and would be out of place. + + +Implementation B + From e5f5e4c20c847233fdf25974dea0f56284514518 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 1 Oct 2017 19:13:18 -0700 Subject: [PATCH 59/61] update design activity doc --- design-activity.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/design-activity.md b/design-activity.md index d7d70c8a2..8c91e8a81 100644 --- a/design-activity.md +++ b/design-activity.md @@ -8,7 +8,7 @@ Order - Responsible for the shopping cart and the total price of the cart. -The order class is the biggest class and draws upon the shopping cart class which in turn is in itself a collection of CartEntries. +The order class is the biggest class and draws upon the shopping cart class which in turn is in itself a collection of CartEntries. CartEntry: Stores the unit price and the quantity of each CartEntry object. @@ -46,3 +46,8 @@ Implementation B would be easier to change because you could add some logic into Implementation B + + + + +I have sooo much going on in m reservations class. I felt that way when I was making the project and even more so after seeing the solution Dan posted. I'm going to start by moving a bunch of the check availability stuff to the date range class if possible. From bb5788627319de9cf6f2036df253d7b6bcbaef17 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 1 Oct 2017 19:45:19 -0700 Subject: [PATCH 60/61] updated reservations method to have an overlap? method which simplified some of the code in check_reservations class --- lib/date_range.rb | 10 +++++++++- lib/reservations.rb | 31 +++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 5da5c2169..f243f253b 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -12,7 +12,7 @@ def initialize(check_in, check_out) @nights_arr = [] make_nights_arr end - + def valid_input? if @check_in.class != Date || @check_out.class != Date raise ArgumentError.new("User input Check-in: #{@check_in} and Check-out: #{@check_out} are not valid inputs, must be a Date Object.") @@ -36,5 +36,13 @@ def make_nights_arr end # return @nights_arr end #end make_nights_arr method + + def overlap?(other) + if other.check_out <= @check_in || other.check_in >= @check_out + return false + else + return true + end + end end #end DateRange class end #end Hotel module diff --git a/lib/reservations.rb b/lib/reservations.rb index ae338d786..ff01a0131 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -31,21 +31,32 @@ def make_reservation(check_in,check_out,num_rooms, block_name:false) return booking end + # booked_rooms = [] + + def check_reservations(check_in,check_out) booked_rooms = [] - range = DateRange.new(check_in,check_out).nights_arr - range.each do |date| - @all_reservations.each do |booking| - if booking.date_range.nights_arr.include?(date) - booking.rooms.each do |room| - if (!booked_rooms.include?(room)) - booked_rooms << room - end - end - end + range = DateRange.new(check_in,check_out) + @all_reservations.each do |booking| + if booking.date_range.overlap?(range) + # add rooms to booked_rooms + booked_rooms << booking.rooms end end return booked_rooms + # range = DateRange.new(check_in,check_out).nights_arr + # range.each do |date| + # @all_reservations.each do |booking| + # if booking.date_range.nights_arr.include?(date) + # booking.rooms.each do |room| + # if (!booked_rooms.include?(room)) + # booked_rooms << room + # end + # end + # end + # end + # end + return booked_rooms end def check_availability(check_in,check_out) From 557305c6309b1e5cf2e2c78b32c7029335835d11 Mon Sep 17 00:00:00 2001 From: Sarah Read-Brown Date: Sun, 1 Oct 2017 19:47:06 -0700 Subject: [PATCH 61/61] More comments in design file --- design-activity.md | 2 +- lib/reservations.rb | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/design-activity.md b/design-activity.md index 8c91e8a81..2035f6c3b 100644 --- a/design-activity.md +++ b/design-activity.md @@ -50,4 +50,4 @@ Implementation B -I have sooo much going on in m reservations class. I felt that way when I was making the project and even more so after seeing the solution Dan posted. I'm going to start by moving a bunch of the check availability stuff to the date range class if possible. +I have sooo much going on in m reservations class. I felt that way when I was making the project and even more so after seeing the solution Dan posted. I started by following a suggestion of Dan's to move some of the responsibility of the check reservations method into the date range class. I honestly think there is more to do for me on this project to make it actually single responsibility but the CS Fun hw took up soo much of my time this past week that this hw didn't get the time and effort it deserved. diff --git a/lib/reservations.rb b/lib/reservations.rb index ff01a0131..a186865f3 100644 --- a/lib/reservations.rb +++ b/lib/reservations.rb @@ -39,7 +39,6 @@ def check_reservations(check_in,check_out) range = DateRange.new(check_in,check_out) @all_reservations.each do |booking| if booking.date_range.overlap?(range) - # add rooms to booked_rooms booked_rooms << booking.rooms end end