From 960124a56f956945617337e5604352fa1e24a93c Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 15:23:15 -0700 Subject: [PATCH 01/43] added rakefile (copied from Scrabble) --- Rakefile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Rakefile diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..b60095bde --- /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['Spec/*_spec.rb'] +end + +task default: :test From 90cf9097a9227c7313dea8bfc940fe7d7417f030 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 15:23:39 -0700 Subject: [PATCH 02/43] created room class and hotel module --- lib/hotel.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 lib/hotel.rb diff --git a/lib/hotel.rb b/lib/hotel.rb new file mode 100644 index 000000000..8c3c03ea5 --- /dev/null +++ b/lib/hotel.rb @@ -0,0 +1,12 @@ +module Hotel + + class Room + + attr_reader :number + def initialize( name ) + @number = number + end + end + + +end From 802324297d2be97d98458034caec116faee6b3f2 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 15:24:05 -0700 Subject: [PATCH 03/43] added spec_helper from Scrabble --- specs/spec_helper.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 specs/spec_helper.rb diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb new file mode 100644 index 000000000..45f71aefd --- /dev/null +++ b/specs/spec_helper.rb @@ -0,0 +1,13 @@ +require 'simplecov' +SimpleCov.start + +require 'minitest/autorun' +require 'minitest/reporters' +require 'minitest/skip_dsl' + +require_relative '../Lib/player' +require_relative '../Lib/scrabble' +require_relative '../Lib/tile_bag' + + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From f84da5dd28ea1ff174e925dfb8c099e4f652fdae Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:33:32 -0700 Subject: [PATCH 04/43] created specs for my files --- specs/hotel_spec.rb | 2 ++ specs/reservations_spec.rb | 0 specs/room_spec.rb | 2 ++ 3 files changed, 4 insertions(+) create mode 100644 specs/hotel_spec.rb create mode 100644 specs/reservations_spec.rb create mode 100644 specs/room_spec.rb diff --git a/specs/hotel_spec.rb b/specs/hotel_spec.rb new file mode 100644 index 000000000..d931d23b7 --- /dev/null +++ b/specs/hotel_spec.rb @@ -0,0 +1,2 @@ +require_relative 'spec_helper' +require_relative '../lib/hotel' diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb new file mode 100644 index 000000000..e69de29bb diff --git a/specs/room_spec.rb b/specs/room_spec.rb new file mode 100644 index 000000000..63e275c1e --- /dev/null +++ b/specs/room_spec.rb @@ -0,0 +1,2 @@ +require_relative '../lib/hotel.rb' +require_relative 'spec_helper' From 928572eb7a01018675da0d20fa56934c1136cd42 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:35:07 -0700 Subject: [PATCH 05/43] added reservation class into module with initialization --- lib/reservation.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 lib/reservation.rb diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..66f23fa2f --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,21 @@ +require_relative 'hotel' + +module Hotel + + class Reservation + + attr_accessor :date_range, :room, :name, :contact_info + + def initialize(date_range, room, name, contact_info) + @date = date_range + @room = room + @name = name + @contact_info = contact_info + end + + def available?(date) + @date == date ? false : true + end #end available? + + end#end class +end#end module From 711a98878de10af528a3f3d384fe19cc82767b6b Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:37:41 -0700 Subject: [PATCH 06/43] added class Admin, outlined ideas for reserving, outlined methods: rooms available and reserve --- lib/admin.rb | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/admin.rb diff --git a/lib/admin.rb b/lib/admin.rb new file mode 100644 index 000000000..f5dca2174 --- /dev/null +++ b/lib/admin.rb @@ -0,0 +1,38 @@ +require_relative 'hotel' +require_relative 'reservation' + +module Hotel + + class Admin + attr_reader :reservations_list + + def initialize + @reservations_list = {} + + end + + def reserve(date_range, room, name, contact_info) + #checks that the date hash't been previously reserved + #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. + @reservations_list[date_range.each].each do |reservation| + raise ArgumentError.new("Room already reserved for this day") if reservation.room == new_reservation.room + end + new_reservation = Hotel::Reservation.new(date_range, room, name, contact_info) + + #TODO date_range.each do |date| + case + when @reservations_list[date] == nil + @reservations[date] = new_reservation + else + @reservations[date] << new_reservation + end#case + + end#reserve + + def rooms_available(check_in, check_out) + #searches through the reservation list to find available rooms + end#rooms_available + + end #class Admin + +end #module Hotel From 0b330fea1577713ecc4eb92acd858c67a652ee6f Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:38:13 -0700 Subject: [PATCH 07/43] added require relative to spec_helper --- specs/spec_helper.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 45f71aefd..e3300f602 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -5,9 +5,9 @@ require 'minitest/reporters' require 'minitest/skip_dsl' -require_relative '../Lib/player' -require_relative '../Lib/scrabble' -require_relative '../Lib/tile_bag' +require_relative '../lib/' +require_relative '../lib' + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new From 6a6c20eaa57345be44dec909d6f058941eb961b1 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:44:14 -0700 Subject: [PATCH 08/43] realized that room.rb would be a more fitting name than hotel.rb --- lib/room.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 lib/room.rb diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..8c3c03ea5 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,12 @@ +module Hotel + + class Room + + attr_reader :number + def initialize( name ) + @number = number + end + end + + +end From d533ac423d06788bc7be8d1031cc08646d3e685a Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:58:36 -0700 Subject: [PATCH 09/43] required relatives --- specs/reservations_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index e69de29bb..6cddadd10 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -0,0 +1,2 @@ +require_relative '../lib/reservation' +require_relative 'spec_helper' From ea9d2a5d9454717303284edec33fc2bf2afe43e1 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:58:53 -0700 Subject: [PATCH 10/43] added required relatives --- specs/spec_helper.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index e3300f602..ad41b1518 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -5,8 +5,9 @@ require 'minitest/reporters' require 'minitest/skip_dsl' -require_relative '../lib/' -require_relative '../lib' +require_relative '../lib/admin' +require_relative '../lib/reservation' +require_relative '../lib/room' From 2646785c52bf532c043eb9d4dc5caed057f075f2 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 16:59:12 -0700 Subject: [PATCH 11/43] created admin_spec --- specs/admin_spec.rb | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 specs/admin_spec.rb diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb new file mode 100644 index 000000000..90f0ce145 --- /dev/null +++ b/specs/admin_spec.rb @@ -0,0 +1,2 @@ +require_relative '../lib/admin' +require_relative 'spec_helper' From 42c1057af1834b75df4fcc68b82e37b459aa44b8 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Tue, 5 Sep 2017 17:00:40 -0700 Subject: [PATCH 12/43] changed names of both of these files to room --- lib/hotel.rb | 12 ------------ specs/hotel_spec.rb | 2 -- 2 files changed, 14 deletions(-) delete mode 100644 lib/hotel.rb delete mode 100644 specs/hotel_spec.rb diff --git a/lib/hotel.rb b/lib/hotel.rb deleted file mode 100644 index 8c3c03ea5..000000000 --- a/lib/hotel.rb +++ /dev/null @@ -1,12 +0,0 @@ -module Hotel - - class Room - - attr_reader :number - def initialize( name ) - @number = number - end - end - - -end diff --git a/specs/hotel_spec.rb b/specs/hotel_spec.rb deleted file mode 100644 index d931d23b7..000000000 --- a/specs/hotel_spec.rb +++ /dev/null @@ -1,2 +0,0 @@ -require_relative 'spec_helper' -require_relative '../lib/hotel' From fba8769410ca4d31eef7eb7f06efd229a395b589 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 12:04:29 -0700 Subject: [PATCH 13/43] added method to pull out date array --- lib/reservation.rb | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 66f23fa2f..d0fa47307 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,20 +1,25 @@ require_relative 'hotel' +require_relative 'room' +require 'date' module Hotel + PRICE_PER_NIGHT = 200 class Reservation - attr_accessor :date_range, :room, :name, :contact_info + attr_accessor :date_range, :room, :name, :contact_info, :price def initialize(date_range, room, name, contact_info) - @date = date_range + @dates = date_range @room = room @name = name @contact_info = contact_info + @price = date_range.length * PRICE_PER_NIGHT end - def available?(date) - @date == date ? false : true + def dates + dates_reserved = [] + dates_reserved << @dates.each end #end available? end#end class From f751a307f576817fbb46f6e7d01445b591bdf95a Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 12:04:46 -0700 Subject: [PATCH 14/43] bones for room available method --- lib/admin.rb | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index f5dca2174..efd9e3021 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -8,29 +8,39 @@ class Admin def initialize @reservations_list = {} + @all_rooms = [] + make_hotel_rooms + end + def make_hotel_rooms + (1..20).each do |num| + @all_rooms << num #Hotel::Room.new(num) I don't think I have to do this + end end - def reserve(date_range, room, name, contact_info) + def reserve(check_in, check_out, room, name, contact_info) #checks that the date hash't been previously reserved - #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. - @reservations_list[date_range.each].each do |reservation| - raise ArgumentError.new("Room already reserved for this day") if reservation.room == new_reservation.room - end - new_reservation = Hotel::Reservation.new(date_range, room, name, contact_info) - #TODO date_range.each do |date| - case - when @reservations_list[date] == nil - @reservations[date] = new_reservation - else - @reservations[date] << new_reservation - end#case + raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false + new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) + + @reservations_list << new_reservation + end#reserve - def rooms_available(check_in, check_out) + def rooms_available?(check_in, check_out) #searches through the reservation list to find available rooms + #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. + reserved_rooms_for_dates = [] + @reservations_list[check_in, check_out].each do |reservation| + #needs to check if the room is included in this reservation on the day + + overlap = reservation.dates_reserved & [check_in .. check_out] + overlap.any? ? false : reserved_rooms_for_dates << reservation.room + + end + rooms_avalable = @all_rooms - reserved_rooms_for_dates end#rooms_available end #class Admin From 128042992d4e64e44128568220b41c3aa1e372e9 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 13:17:21 -0700 Subject: [PATCH 15/43] fixed wrong filepath in rake --- Rakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index b60095bde..deb52f2cd 100644 --- a/Rakefile +++ b/Rakefile @@ -1,9 +1,9 @@ require 'rake/testtask' Rake::TestTask.new do |t| - t.libs = ["Lib"] + t.libs = ["lib"] t.warning = true - t.test_files = FileList['Spec/*_spec.rb'] + t.test_files = FileList['specs/*_spec.rb'] end task default: :test From adefdcbfa832be1508a61ffe9432e726f4658814 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 13:18:05 -0700 Subject: [PATCH 16/43] fixed dates checked --- lib/admin.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index efd9e3021..664fc6299 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,4 +1,4 @@ -require_relative 'hotel' +# require_relative 'hotel' require_relative 'reservation' module Hotel @@ -40,7 +40,7 @@ def rooms_available?(check_in, check_out) overlap.any? ? false : reserved_rooms_for_dates << reservation.room end - rooms_avalable = @all_rooms - reserved_rooms_for_dates + rooms_available = @all_rooms - reserved_rooms_for_dates end#rooms_available end #class Admin From 7ff48606c9f5f210702f2cdd006ee83a6dd8ecbe Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 13:18:34 -0700 Subject: [PATCH 17/43] fixed dates method --- lib/reservation.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index d0fa47307..7aa39d498 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,4 +1,4 @@ -require_relative 'hotel' +# require_relative 'hotel' require_relative 'room' require 'date' @@ -10,7 +10,7 @@ class Reservation attr_accessor :date_range, :room, :name, :contact_info, :price def initialize(date_range, room, name, contact_info) - @dates = date_range + @date_range = date_range @room = room @name = name @contact_info = contact_info @@ -19,7 +19,8 @@ def initialize(date_range, room, name, contact_info) def dates dates_reserved = [] - dates_reserved << @dates.each + @date_range.each_entry{|date| dates_reserved << date} + dates_reserved end #end available? end#end class From 26a295ac5e086ea9536be2128b34e4bfe98448df Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 13:20:07 -0700 Subject: [PATCH 18/43] writing tests for init reservation and checking for dates --- specs/reservations_spec.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 6cddadd10..b5688215b 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -1,2 +1,28 @@ require_relative '../lib/reservation' require_relative 'spec_helper' + +describe "reservation" do + + it "can initialize a reservation" do + reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "T Payne", "8675309" ) + reservation_1.must_be_instance_of Hotel::Reservation + end + + it "can return the correct information" do + reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "Mary Shelley", "8675309" ) + reservation_1.date_range.must_equal [1, 2, 3] + reservation_1.room.must_equal 4 + reservation_1.name.must_equal "Mary Shelley" + reservation_1.contact_info.must_equal "8675309" + reservation_1.price.must_equal 600 + end +end + +describe "dates method" do + it "can get dates from reservation" do + reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "Dr. Frankenstein", "8675309" ) + range_dates = reservation_1.dates + puts range_dates[0] + range_dates[0].must_equal 1 + end +end From 9f7f5538b728f77e34e7c9571e302998a5b3a781 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 13:20:50 -0700 Subject: [PATCH 19/43] added and subtracted minor things to ensure spec files work --- specs/admin_spec.rb | 6 ++++++ specs/room_spec.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index 90f0ce145..01a9be217 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -1,2 +1,8 @@ require_relative '../lib/admin' require_relative 'spec_helper' + +describe "class Admin" do + it "instantiates all hotel rooms" do + admin_1 = Hotel::Admin.new + end +end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 63e275c1e..7bb11ccec 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -1,2 +1,2 @@ -require_relative '../lib/hotel.rb' +# require_relative '../lib/hotel.rb' require_relative 'spec_helper' From 5271d682823a4ce6ec69fa286d4259dbf9103d55 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Wed, 6 Sep 2017 16:37:56 -0700 Subject: [PATCH 20/43] figuring out mixins --- lib/admin.rb | 36 ++++++++++++++++++++++++------------ lib/reservation.rb | 30 +++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index 664fc6299..77a33bb65 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,13 +1,14 @@ # require_relative 'hotel' require_relative 'reservation' +require 'date' module Hotel class Admin - attr_reader :reservations_list + attr_reader :reservations_list, :all_rooms def initialize - @reservations_list = {} + @reservations_list = [] @all_rooms = [] make_hotel_rooms end @@ -18,29 +19,40 @@ def make_hotel_rooms end end - def reserve(check_in, check_out, room, name, contact_info) + + def get_date_range(check_in, check_out) + return (Date.new(check_in) ... Date.new(check_out)).to_a + end + + def self.reserve(check_in, check_out, room, name, contact_info) #checks that the date hash't been previously reserved raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false - new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) + new_reservation = Hotel::Reservation.new(check_in, nights, room, name, contact_info) @reservations_list << new_reservation end#reserve - def rooms_available?(check_in, check_out) - #searches through the reservation list to find available rooms - #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. + def self.rooms_available?(check_in, check_out) + # #searches through the reservation list to find available rooms + # #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. + wanted_dates = get_date_range(check_in, check_out) reserved_rooms_for_dates = [] - @reservations_list[check_in, check_out].each do |reservation| - #needs to check if the room is included in this reservation on the day + case + when @reservations_list = [] + return @all_rooms + else + @reservations_list.each do |reservation| + #needs to check if the room is included in this reservation on the day - overlap = reservation.dates_reserved & [check_in .. check_out] - overlap.any? ? false : reserved_rooms_for_dates << reservation.room + overlap = reservation.nights_reserved & wanted_dates + overlap.any? ? reserved_rooms_for_dates << reservation.room : false + end end - rooms_available = @all_rooms - reserved_rooms_for_dates + return @all_rooms - reserved_rooms_for_dates end#rooms_available end #class Admin diff --git a/lib/reservation.rb b/lib/reservation.rb index 7aa39d498..8b1a48628 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,27 +1,39 @@ # require_relative 'hotel' require_relative 'room' require 'date' +require 'pry' module Hotel - PRICE_PER_NIGHT = 200 +PRICE_PER_NIGHT = 200 + + def Hotel.get_date_range(check_in, check_out) + return (Date.new(check_in) ... Date.new(check_out)).to_a + end class Reservation - attr_accessor :date_range, :room, :name, :contact_info, :price + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out + + def initialize(check_in, check_out, room, name, contact_info) - def initialize(date_range, room, name, contact_info) - @date_range = date_range + @check_in = Date.new(check_in) + @check_out = Date.new(check_out) + @date_range = get_date_range(check_in, check_out) @room = room @name = name @contact_info = contact_info - @price = date_range.length * PRICE_PER_NIGHT + @price = (@date_range.length) * PRICE_PER_NIGHT end - def dates - dates_reserved = [] - @date_range.each_entry{|date| dates_reserved << date} - dates_reserved + + def get_date_range(check_in, check_out) + return (Date.new(check_in) ... Date.new(check_out)).to_a + end + + def self.nights_reserved + @date_range end #end available? end#end class + # binding.pry end#end module From 4661e96c47572ec6a00d6f401a7ab70859a6af2d Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 09:43:21 -0700 Subject: [PATCH 21/43] fixed a bug in front of the class --- lib/admin.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index 77a33bb65..a7b9ac801 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -20,28 +20,28 @@ def make_hotel_rooms end - def get_date_range(check_in, check_out) - return (Date.new(check_in) ... Date.new(check_out)).to_a - end + def get_date_range(check_in, check_out) + return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + end - def self.reserve(check_in, check_out, room, name, contact_info) + def reserve(check_in, check_out, room, name, contact_info) #checks that the date hash't been previously reserved raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false - new_reservation = Hotel::Reservation.new(check_in, nights, room, name, contact_info) + new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) @reservations_list << new_reservation end#reserve - def self.rooms_available?(check_in, check_out) + def rooms_available?(check_in, check_out) # #searches through the reservation list to find available rooms # #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. wanted_dates = get_date_range(check_in, check_out) reserved_rooms_for_dates = [] case - when @reservations_list = [] + when @reservations_list == [] return @all_rooms else @reservations_list.each do |reservation| From e183784c382199a98671e414d01c478ce6a38db8 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 09:50:31 -0700 Subject: [PATCH 22/43] fixing bugs in rooms_available? --- lib/reservation.rb | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 8b1a48628..7abfbe19f 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -6,9 +6,11 @@ module Hotel PRICE_PER_NIGHT = 200 - def Hotel.get_date_range(check_in, check_out) - return (Date.new(check_in) ... Date.new(check_out)).to_a - end + + def get_date_range(check_in, check_out) + return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + end + class Reservation @@ -16,8 +18,8 @@ class Reservation def initialize(check_in, check_out, room, name, contact_info) - @check_in = Date.new(check_in) - @check_out = Date.new(check_out) + @check_in = Date.new(check_in[0], check_in[1], check_in[2]) + @check_out = Date.new(check_out[0], check_out[1], check_out[2]) @date_range = get_date_range(check_in, check_out) @room = room @name = name @@ -26,11 +28,13 @@ def initialize(check_in, check_out, room, name, contact_info) end - def get_date_range(check_in, check_out) - return (Date.new(check_in) ... Date.new(check_out)).to_a - end - - def self.nights_reserved + + def get_date_range(check_in, check_out) + return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + end + + + def nights_reserved @date_range end #end available? From 9c8af3cd7d8e08db6bec228cfde083f122a0cb68 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 09:50:56 -0700 Subject: [PATCH 23/43] changing test code to fix bugs --- specs/reservations_spec.rb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index b5688215b..35ea5962b 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -4,24 +4,25 @@ describe "reservation" do it "can initialize a reservation" do - reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "T Payne", "8675309" ) + reservation_1 = Hotel::Reservation.new( [2019, 11, 15], [2019, 11, 15], 4, "T Payne", "8675309" ) reservation_1.must_be_instance_of Hotel::Reservation end it "can return the correct information" do - reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "Mary Shelley", "8675309" ) - reservation_1.date_range.must_equal [1, 2, 3] - reservation_1.room.must_equal 4 + + reservation_1 = Hotel::Reservation.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309" ) + reservation_1.nights_reserved.length.must_equal 1 + reservation_1.room.must_equal 2 reservation_1.name.must_equal "Mary Shelley" reservation_1.contact_info.must_equal "8675309" - reservation_1.price.must_equal 600 + reservation_1.price.must_equal 400 end end -describe "dates method" do +describe "nights_reserved method" do it "can get dates from reservation" do - reservation_1 = Hotel::Reservation.new( [1,2,3], 4, "Dr. Frankenstein", "8675309" ) - range_dates = reservation_1.dates + reservation_1 = Hotel::Reservation.new([2019, 11, 15], [2019, 11, 15], 7, "Dr. Frankenstein", "8675309" ) + range_dates = reservation_1.nights_reserved puts range_dates[0] range_dates[0].must_equal 1 end From 7fc0a56e10cc47c87628382cca7238aa46e96529 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 13:34:48 -0700 Subject: [PATCH 24/43] fixing the glaring bugs that are slowly swallowing my soul --- lib/admin.rb | 14 ++++++++++---- specs/admin_spec.rb | 39 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index a7b9ac801..b5a4f4923 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,7 +1,7 @@ # require_relative 'hotel' require_relative 'reservation' require 'date' - +require 'pry' module Hotel class Admin @@ -20,8 +20,11 @@ def make_hotel_rooms end + # def get_date_range(check_in, check_out) + # return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + # end def get_date_range(check_in, check_out) - return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + return (check_in ... check_out).to_a end def reserve(check_in, check_out, room, name, contact_info) @@ -36,9 +39,12 @@ def reserve(check_in, check_out, room, name, contact_info) end#reserve def rooms_available?(check_in, check_out) + # binding.pry # #searches through the reservation list to find available rooms # #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. - wanted_dates = get_date_range(check_in, check_out) + check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) + check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) + wanted_dates = get_date_range(check_in_date, check_out_date) reserved_rooms_for_dates = [] case when @reservations_list == [] @@ -47,7 +53,7 @@ def rooms_available?(check_in, check_out) @reservations_list.each do |reservation| #needs to check if the room is included in this reservation on the day - overlap = reservation.nights_reserved & wanted_dates + overlap = reservation.dates_reserved & wanted_dates overlap.any? ? reserved_rooms_for_dates << reservation.room : false end diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index 01a9be217..9e76835c1 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -1,8 +1,41 @@ require_relative '../lib/admin' require_relative 'spec_helper' +require 'pry' describe "class Admin" do - it "instantiates all hotel rooms" do - admin_1 = Hotel::Admin.new + describe "initialize" do + it "initializes all instance variables" do + admin_1 = Hotel::Admin.new + admin_1.all_rooms.length.must_equal 20 + admin_1.reservations_list.must_be_instance_of Array + admin_1.must_be_instance_of Hotel::Admin + end end -end + + + describe "reserve" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 15], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 15], 8, "Sticky Bandits", "New York") + + end + + it "create an instance of Hotel::Reservation" do + @tim_curry.reservations_list.each do |reservation| + reservation.must_be_instance_of Hotel::Reservation + end + end#end instance of Hotel::Reservation + + it "puts the correct number of reservations in the @reservations_list" do + @tim_curry.reservations_list.length.must_equal 2 + + + end + + end#end "reserve" describe + + +end #end class Admin Describe From 6e7f729dc1abaa1df5b47b12f34e73a886c4d280 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 13:52:50 -0700 Subject: [PATCH 25/43] trying to fix mixins, but not sure --- lib/admin.rb | 8 +++++--- lib/reservation.rb | 28 ++++++++++++++++------------ specs/admin_spec.rb | 9 +++++++-- specs/reservations_spec.rb | 16 +++++++++------- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index b5a4f4923..cfb2d5cca 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -4,6 +4,11 @@ require 'pry' module Hotel + # + # def get_date_range(check_in, check_out) + # return (check_in ... check_out).to_a + # end + class Admin attr_reader :reservations_list, :all_rooms @@ -20,9 +25,6 @@ def make_hotel_rooms end - # def get_date_range(check_in, check_out) - # return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a - # end def get_date_range(check_in, check_out) return (check_in ... check_out).to_a end diff --git a/lib/reservation.rb b/lib/reservation.rb index 7abfbe19f..ce5dd811f 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,40 +4,44 @@ require 'pry' module Hotel -PRICE_PER_NIGHT = 200 + PRICE_PER_NIGHT = 200 - - def get_date_range(check_in, check_out) - return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a - end + # + # def get_date_range(check_in, check_out) + # return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a + # end class Reservation - attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price def initialize(check_in, check_out, room, name, contact_info) @check_in = Date.new(check_in[0], check_in[1], check_in[2]) @check_out = Date.new(check_out[0], check_out[1], check_out[2]) - @date_range = get_date_range(check_in, check_out) + @date_range = populate_date_range(@check_in, @check_out) @room = room @name = name @contact_info = contact_info @price = (@date_range.length) * PRICE_PER_NIGHT + end - def get_date_range(check_in, check_out) - return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a - end + def get_date_range(check_in, check_out) + return (check_in ... check_out).to_a + end + def populate_date_range(check_in, check_out) + get_date_range(check_in, check_out) + end - def nights_reserved + def dates_reserved @date_range end #end available? end#end class - # binding.pry + # binding.pry end#end module diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index 9e76835c1..b579a9bc7 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -31,11 +31,16 @@ it "puts the correct number of reservations in the @reservations_list" do @tim_curry.reservations_list.length.must_equal 2 - - end end#end "reserve" describe + describe "checking for rooms_available" do + + + + + end + end #end class Admin Describe diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 35ea5962b..5aabe81e8 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -11,9 +11,12 @@ it "can return the correct information" do reservation_1 = Hotel::Reservation.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309" ) - reservation_1.nights_reserved.length.must_equal 1 - reservation_1.room.must_equal 2 - reservation_1.name.must_equal "Mary Shelley" + reservation_1.check_in.must_be_instance_of Date + reservation_1.check_out.must_be_instance_of Date + reservation_1.date_range.must_be_instance_of Array + reservation_1.date_range.length.must_equal 2 + reservation_1.room.must_equal 3 + reservation_1.name.must_equal "Dr. Frankenstein" reservation_1.contact_info.must_equal "8675309" reservation_1.price.must_equal 400 end @@ -21,9 +24,8 @@ describe "nights_reserved method" do it "can get dates from reservation" do - reservation_1 = Hotel::Reservation.new([2019, 11, 15], [2019, 11, 15], 7, "Dr. Frankenstein", "8675309" ) - range_dates = reservation_1.nights_reserved - puts range_dates[0] - range_dates[0].must_equal 1 + reservation_1 = Hotel::Reservation.new([2019, 11, 15], [2019, 11, 17], 7, "Dr. Frankenstein", "8675309" ) + range_dates = reservation_1.dates_reserved + range_dates[0].must_equal Date.new(2019, 11, 15) end end From 560cddab43d2453ea6a02ae01452b25b54def5c8 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 15:17:24 -0700 Subject: [PATCH 26/43] minor changes --- specs/admin_spec.rb | 47 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index b579a9bc7..b10cafb7d 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -17,9 +17,9 @@ before do @tim_curry = Hotel::Admin.new - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 15], 4, "Kevin McCallister", "New York") + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 15], 8, "Sticky Bandits", "New York") + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") end @@ -33,13 +33,52 @@ @tim_curry.reservations_list.length.must_equal 2 end + it "can get the correct price" do + @tim_curry.reservations_list[0].price.must_equal 600 + end + + it "will raise error if you try to reserve taken room" do + proc{@tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Beetlejuice, Beetlejuice, Beetlejuice!", "New York")}.must_raise ArgumentError + end + end#end "reserve" describe - describe "checking for rooms_available" do - + describe "checking for rooms_available?" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "should be able to check for vacancies" do + vacancies = @tim_curry.rooms_available?([2019, 11, 15], [2019, 11, 18]) + + vacancies.length.must_equal 18 + vacancies.must_equal [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + end + end#describe rooms available + describe "reservations_by_date" do + before do + @tim_curry = Hotel::Admin.new + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "should be able to return empty array when no reservations" do + reservations = @tim_curry.reservations_by_date([2019, 11, 30]) + reservations.must_be_instance_of Array + reservations[0].must_be_nil + end + it "should return all reservations for a date" do + reservations = @tim_curry.reservations_by_date([2019, 11, 16]) + reservations.length.must_equal 2 + reservations[0].must_equal @tim_curry.reservations_list[0] + end end From 3809c11e1b97d5f20f862e6e517ccc05a794506c Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 15:17:46 -0700 Subject: [PATCH 27/43] minor changes --- lib/admin.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/admin.rb b/lib/admin.rb index cfb2d5cca..fadd81b30 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -48,6 +48,7 @@ def rooms_available?(check_in, check_out) check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) wanted_dates = get_date_range(check_in_date, check_out_date) reserved_rooms_for_dates = [] + case when @reservations_list == [] return @all_rooms @@ -63,6 +64,11 @@ def rooms_available?(check_in, check_out) return @all_rooms - reserved_rooms_for_dates end#rooms_available + def reservations_by_date(date) + date_find = Date.new(date[0], date[1], date[2]) + #go through reservations list and return array with all that contain the date + reservations_list.find_all{|reservation| reservation.date_range.include?(date_find)} + end#reservations_by_date end #class Admin end #module Hotel From 21fb81166e781709f7a854e87af6e84908a2d6c2 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 16:49:08 -0700 Subject: [PATCH 28/43] minor changes --- lib/admin.rb | 25 ++++++++++++++++++------- lib/blocks.rb | 27 +++++++++++++++++++++++++++ specs/admin_spec.rb | 27 +++++++++++++++++++++++++++ specs/blocks_spec.rb | 0 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 lib/blocks.rb create mode 100644 specs/blocks_spec.rb diff --git a/lib/admin.rb b/lib/admin.rb index fadd81b30..842233fc1 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -4,13 +4,12 @@ require 'pry' module Hotel - # - # def get_date_range(check_in, check_out) - # return (check_in ... check_out).to_a - # end class Admin attr_reader :reservations_list, :all_rooms + # def get_date_range(check_in, check_out) + # return (check_in ... check_out).to_a + # end def initialize @reservations_list = [] @@ -24,11 +23,12 @@ def make_hotel_rooms end end - + # def get_date_range(check_in, check_out) return (check_in ... check_out).to_a end + def reserve(check_in, check_out, room, name, contact_info) #checks that the date hash't been previously reserved @@ -61,13 +61,24 @@ def rooms_available?(check_in, check_out) end end - return @all_rooms - reserved_rooms_for_dates + return @all_rooms - reserved_rooms_for_dates end#rooms_available + def reservation_finder(search_term, instance_variable) + reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + end + + def reservations_by_name(name_request) + #go through reservations list and return array with all that contain the date + reservation_finder( name_request, :name ) + #reservations_list.find_all{|reservation| reservation.name.include?(name)} + end#reservations_by_date + def reservations_by_date(date) date_find = Date.new(date[0], date[1], date[2]) #go through reservations list and return array with all that contain the date - reservations_list.find_all{|reservation| reservation.date_range.include?(date_find)} + reservation_finder(date_find, :date_range ) + # reservations_list.find_all{|reservation| reservation.date_range.include?(date_find)} end#reservations_by_date end #class Admin diff --git a/lib/blocks.rb b/lib/blocks.rb new file mode 100644 index 000000000..9f42cad42 --- /dev/null +++ b/lib/blocks.rb @@ -0,0 +1,27 @@ +equire_relative 'reservation' +require 'date' +require 'pry' +module Hotel + + + class Block < Reservation + + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price + + def initialize(check_in, check_out, room, name, contact_info, discount) + + super + @discount = calculate_discount(discount) + @price = (@date_range.length) * PRICE_PER_NIGHT * @discount + end + + def calculate_discount(number) + (100 - discount) * 0.01 + end + + def change_discount(discount) + @discount = calculate_discount(discount) + end + + end +end diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index b10cafb7d..57ce06358 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -81,5 +81,32 @@ end end + describe "reservations_by_name" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "can find reservations by name" do + found_name = @tim_curry.reservations_by_name("Sticky Bandits") + found_name.wont_be_nil + found_name[0].name.must_equal "Sticky Bandits" + end + + it "can find multiple entries with the same name" do + reservation_3 = @tim_curry.reserve([2019, 11, 22], [2019, 11, 30], 19, "Sticky Bandits", "New York") + + found_name = @tim_curry.reservations_by_name("Sticky Bandits") + + found_name.length.must_equal 2 + found_name[0].name.must_equal "Sticky Bandits" + found_name[1].name.must_equal "Sticky Bandits" + + end + end + end #end class Admin Describe diff --git a/specs/blocks_spec.rb b/specs/blocks_spec.rb new file mode 100644 index 000000000..e69de29bb From 01d12b21562f64264592f64a6f41b0087b6b70a6 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Thu, 7 Sep 2017 17:32:29 -0700 Subject: [PATCH 29/43] added a feature to change the discount of blocks --- lib/blocks.rb | 8 ++++---- specs/blocks_spec.rb | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/lib/blocks.rb b/lib/blocks.rb index 9f42cad42..9e38a6d46 100644 --- a/lib/blocks.rb +++ b/lib/blocks.rb @@ -1,4 +1,4 @@ -equire_relative 'reservation' +require_relative 'reservation' require 'date' require 'pry' module Hotel @@ -6,17 +6,17 @@ module Hotel class Block < Reservation - attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price, :discount def initialize(check_in, check_out, room, name, contact_info, discount) - super + super(check_in, check_out, room, name, contact_info) @discount = calculate_discount(discount) @price = (@date_range.length) * PRICE_PER_NIGHT * @discount end def calculate_discount(number) - (100 - discount) * 0.01 + (100 - number) * 0.01 end def change_discount(discount) diff --git a/specs/blocks_spec.rb b/specs/blocks_spec.rb index e69de29bb..d77293569 100644 --- a/specs/blocks_spec.rb +++ b/specs/blocks_spec.rb @@ -0,0 +1,41 @@ +require_relative '../lib/blocks' +require_relative '../lib/reservation' +require_relative 'spec_helper' + +describe "block" do + + it "can initialize a block" do + block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], 4, "T Payne", "8675309", 10) + block_1.must_be_instance_of Hotel::Block + end + + it "can return the correct information" do + + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309", 15 ) + block_1.check_in.must_be_instance_of Date + block_1.check_out.must_be_instance_of Date + block_1.date_range.must_be_instance_of Array + block_1.date_range.length.must_equal 2 + block_1.room.must_equal 3 + block_1.name.must_equal "Dr. Frankenstein" + block_1.contact_info.must_equal "8675309" + block_1.price.must_equal 340 + block_1.discount.must_equal 0.85 + block_1.discount.must_be_instance_of Float + end +end + +describe "nights_reserved method" do + it "can get dates from block" do + block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], 7, "Dr. Frankenstein", "8675309", 20 ) + range_dates = block_1.dates_reserved + range_dates[0].must_equal Date.new(2019, 11, 15) + end +end +describe "change_discount" do + it "can change the discount on a block" do + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309", 15 ) + block_1.change_discount(70) + block_1.discount.must_equal 0.30 + end +end From 16717a25ab5730e13a1288fa4223da47b9f9d32e Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 09:53:26 -0700 Subject: [PATCH 30/43] commenting what I need to do --- lib/admin.rb | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index 842233fc1..c669f101e 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,4 +1,4 @@ -# require_relative 'hotel' +require_relative './concerns/dateable' require_relative 'reservation' require 'date' require 'pry' @@ -6,6 +6,8 @@ module Hotel class Admin + include Hotel::Dateable::InstanceMethods + attr_reader :reservations_list, :all_rooms # def get_date_range(check_in, check_out) # return (check_in ... check_out).to_a @@ -13,6 +15,7 @@ class Admin def initialize @reservations_list = [] + @block_list = [] @all_rooms = [] make_hotel_rooms end @@ -23,10 +26,10 @@ def make_hotel_rooms end end - # - def get_date_range(check_in, check_out) - return (check_in ... check_out).to_a - end + # # + # def get_date_range(check_in, check_out) + # return (check_in ... check_out).to_a + # end def reserve(check_in, check_out, room, name, contact_info) @@ -69,16 +72,15 @@ def reservation_finder(search_term, instance_variable) end def reservations_by_name(name_request) - #go through reservations list and return array with all that contain the date + #go through reservations list and return array with all that contain the name reservation_finder( name_request, :name ) - #reservations_list.find_all{|reservation| reservation.name.include?(name)} + end#reservations_by_date def reservations_by_date(date) date_find = Date.new(date[0], date[1], date[2]) #go through reservations list and return array with all that contain the date reservation_finder(date_find, :date_range ) - # reservations_list.find_all{|reservation| reservation.date_range.include?(date_find)} end#reservations_by_date end #class Admin From b77d844736bdc5fc4e4c226cf439cf11331ddf39 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 09:54:02 -0700 Subject: [PATCH 31/43] changing the default value of room to TBD --- lib/blocks.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/blocks.rb b/lib/blocks.rb index 9e38a6d46..cd159c42d 100644 --- a/lib/blocks.rb +++ b/lib/blocks.rb @@ -1,14 +1,17 @@ require_relative 'reservation' +require_relative './concerns/dateable' require 'date' require 'pry' module Hotel class Block < Reservation + include Hotel::Dateable::InstanceMethods + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price, :discount - def initialize(check_in, check_out, room, name, contact_info, discount) + def initialize(check_in, check_out, room = "TBD", name, contact_info, discount) super(check_in, check_out, room, name, contact_info) @discount = calculate_discount(discount) From 1e42a6978385813886406d5091c6a9e32bbe3d06 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 09:54:46 -0700 Subject: [PATCH 32/43] changing test to accomodate changed code --- specs/blocks_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/specs/blocks_spec.rb b/specs/blocks_spec.rb index d77293569..12108bfcb 100644 --- a/specs/blocks_spec.rb +++ b/specs/blocks_spec.rb @@ -5,18 +5,18 @@ describe "block" do it "can initialize a block" do - block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], 4, "T Payne", "8675309", 10) + block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], "T Payne", "8675309", 10) block_1.must_be_instance_of Hotel::Block end it "can return the correct information" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309", 15 ) + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 ) block_1.check_in.must_be_instance_of Date block_1.check_out.must_be_instance_of Date block_1.date_range.must_be_instance_of Array block_1.date_range.length.must_equal 2 - block_1.room.must_equal 3 + block_1.room.must_equal "TBD" block_1.name.must_equal "Dr. Frankenstein" block_1.contact_info.must_equal "8675309" block_1.price.must_equal 340 @@ -27,14 +27,14 @@ describe "nights_reserved method" do it "can get dates from block" do - block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], 7, "Dr. Frankenstein", "8675309", 20 ) + block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], "Dr. Frankenstein", "8675309", 20 ) range_dates = block_1.dates_reserved range_dates[0].must_equal Date.new(2019, 11, 15) end end describe "change_discount" do it "can change the discount on a block" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309", 15 ) + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 ) block_1.change_discount(70) block_1.discount.must_equal 0.30 end From c7b07fc7000934f6732a7f03159c50c12356c616 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 10:24:33 -0700 Subject: [PATCH 33/43] I made the mixin work by myself! I was going to get help, but everyone was busy. Does this mean that I'm Ruby potty-trained? I sure hope so. --- lib/admin.rb | 120 ++++++++++++++++++++---------------- lib/concerns/dateable.rb | 9 +++ lib/concerns/reserveable.rb | 61 ++++++++++++++++++ lib/reservation.rb | 13 +--- 4 files changed, 138 insertions(+), 65 deletions(-) create mode 100644 lib/concerns/dateable.rb create mode 100644 lib/concerns/reserveable.rb diff --git a/lib/admin.rb b/lib/admin.rb index c669f101e..e4868720f 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,4 +1,5 @@ require_relative './concerns/dateable' +require_relative './concerns/reserveable' require_relative 'reservation' require 'date' require 'pry' @@ -7,6 +8,7 @@ module Hotel class Admin include Hotel::Dateable::InstanceMethods + include Hotel::Reserveable::InstanceMethods attr_reader :reservations_list, :all_rooms # def get_date_range(check_in, check_out) @@ -15,73 +17,83 @@ class Admin def initialize @reservations_list = [] - @block_list = [] + @block_list = {} @all_rooms = [] make_hotel_rooms end - + #could possibly go back in here and use a rooms class def make_hotel_rooms (1..20).each do |num| @all_rooms << num #Hotel::Room.new(num) I don't think I have to do this end end - - # # - # def get_date_range(check_in, check_out) - # return (check_in ... check_out).to_a + # + # + # def reserve(check_in, check_out, room, name, contact_info) + # #checks that the date hash't been previously reserved, and there are enough rooms for the blocks + # + # raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false + # new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) + # + # @reservations_list << new_reservation + # + # + # end#reserve + # + # def rooms_available?(check_in, check_out) + # # binding.pry + # # #searches through the reservation list to find available rooms + # + # check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) + # check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) + # wanted_dates = get_date_range(check_in_date, check_out_date) + # reserved_rooms_for_dates = [] + # blocks_for_date = 0 + # + # case + # when @reservations_list == [] + # return @all_rooms + # else + # @reservations_list.each do |reservation| + # #needs to check if the room is included in this reservation on the day + # + # overlap = reservation.dates_reserved & wanted_dates + # overlap.any? ? reserved_rooms_for_dates << reservation.room : false + # + # end + # end + # #if blocks_for_date.length <= (@all_rooms - reserved_rooms_for_dates).length ? @all_rooms - reserved_rooms_for_dates : raise ArgumentError.new("Blocks for this date prohibit us from reserving rooms") + # return @all_rooms - reserved_rooms_for_dates + # end#rooms_available + # + # + # #ability to do reservation things + # def reservation_finder(search_term, instance_variable) + # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} # end - - - def reserve(check_in, check_out, room, name, contact_info) - #checks that the date hash't been previously reserved - - raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false - new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) - - @reservations_list << new_reservation - - - end#reserve - - def rooms_available?(check_in, check_out) - # binding.pry - # #searches through the reservation list to find available rooms - # #not sure if this will work the .each.each is a little crazy TODO check for some sort of sweeeeeet enumerable to use on this bad boy. - check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) - check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) - wanted_dates = get_date_range(check_in_date, check_out_date) - reserved_rooms_for_dates = [] - - case - when @reservations_list == [] - return @all_rooms - else - @reservations_list.each do |reservation| - #needs to check if the room is included in this reservation on the day - - overlap = reservation.dates_reserved & wanted_dates - overlap.any? ? reserved_rooms_for_dates << reservation.room : false - - end - end - return @all_rooms - reserved_rooms_for_dates - end#rooms_available - - def reservation_finder(search_term, instance_variable) - reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + # + # def reservations_by_name(name_request) + # reservation_finder( name_request, :name ) + # + # end#reservations_by_date + # + # def reservations_by_date(date) + # date_find = Date.new(date[0], date[1], date[2]) + # reservation_finder(date_find, :date_range ) + # end#reservations_by_date + + #ablity to do block things + #what I want to do is block off the amount of rooms that are required for the block + #can change number of blocks in reserved block + def create_block(name, check_in, check_out, num_rooms) end - def reservations_by_name(name_request) - #go through reservations list and return array with all that contain the name - reservation_finder( name_request, :name ) + def change_number_blocks(block_id, amount) + end - end#reservations_by_date + def convert_block_to_res(block_id) + end - def reservations_by_date(date) - date_find = Date.new(date[0], date[1], date[2]) - #go through reservations list and return array with all that contain the date - reservation_finder(date_find, :date_range ) - end#reservations_by_date end #class Admin end #module Hotel diff --git a/lib/concerns/dateable.rb b/lib/concerns/dateable.rb new file mode 100644 index 000000000..f0d9373b2 --- /dev/null +++ b/lib/concerns/dateable.rb @@ -0,0 +1,9 @@ +module Hotel + module Dateable + module InstanceMethods + def get_date_range(check_in, check_out) + (check_in ... check_out).to_a + end + end + end +end diff --git a/lib/concerns/reserveable.rb b/lib/concerns/reserveable.rb new file mode 100644 index 000000000..70bd31ed8 --- /dev/null +++ b/lib/concerns/reserveable.rb @@ -0,0 +1,61 @@ +module Hotel + module Reserveable + module InstanceMethods + include Hotel::Dateable::InstanceMethods + + + def reserve(check_in, check_out, room, name, contact_info) + #checks that the date hash't been previously reserved, and there are enough rooms for the blocks + + raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false + new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) + + @reservations_list << new_reservation + + + end#reserve + + def rooms_available?(check_in, check_out) + # binding.pry + # #searches through the reservation list to find available rooms + + check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) + check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) + wanted_dates = get_date_range(check_in_date, check_out_date) + reserved_rooms_for_dates = [] + blocks_for_date = 0 + + case + when @reservations_list == [] + return @all_rooms + else + @reservations_list.each do |reservation| + #needs to check if the room is included in this reservation on the day + + overlap = reservation.dates_reserved & wanted_dates + overlap.any? ? reserved_rooms_for_dates << reservation.room : false + + end + end + #if blocks_for_date.length <= (@all_rooms - reserved_rooms_for_dates).length ? @all_rooms - reserved_rooms_for_dates : raise ArgumentError.new("Blocks for this date prohibit us from reserving rooms") + return @all_rooms - reserved_rooms_for_dates + end#rooms_available + + + #ability to do reservation things + def reservation_finder(search_term, instance_variable) + reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + end + + def reservations_by_name(name_request) + reservation_finder( name_request, :name ) + + end#reservations_by_date + + def reservations_by_date(date) + date_find = Date.new(date[0], date[1], date[2]) + reservation_finder(date_find, :date_range ) + end#reservations_by_date + end + end +end diff --git a/lib/reservation.rb b/lib/reservation.rb index ce5dd811f..c846758c1 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,23 +1,21 @@ # require_relative 'hotel' -require_relative 'room' +require_relative './concerns/dateable' require 'date' require 'pry' module Hotel PRICE_PER_NIGHT = 200 - # # def get_date_range(check_in, check_out) # return (Date.new(check_in[0], check_in[1], check_in[2]) ... Date.new(check_out[0], check_out[1], check_out[2])).to_a # end - class Reservation + include Hotel::Dateable::InstanceMethods attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price def initialize(check_in, check_out, room, name, contact_info) - @check_in = Date.new(check_in[0], check_in[1], check_in[2]) @check_out = Date.new(check_out[0], check_out[1], check_out[2]) @date_range = populate_date_range(@check_in, @check_out) @@ -25,13 +23,6 @@ def initialize(check_in, check_out, room, name, contact_info) @name = name @contact_info = contact_info @price = (@date_range.length) * PRICE_PER_NIGHT - - end - - - - def get_date_range(check_in, check_out) - return (check_in ... check_out).to_a end def populate_date_range(check_in, check_out) From 42dbba70cc87c83a397cdae5ba5a10aae1c03262 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 11:45:00 -0700 Subject: [PATCH 34/43] I'm writing blockable methods in admin which will later be moved to a module --- lib/admin.rb | 91 +++++++++++++++++++-------------------------------- lib/blocks.rb | 25 ++++++++++---- 2 files changed, 51 insertions(+), 65 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index e4868720f..79e09c115 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -2,6 +2,7 @@ require_relative './concerns/reserveable' require_relative 'reservation' require 'date' +require 'securerandom' require 'pry' module Hotel @@ -10,7 +11,7 @@ class Admin include Hotel::Dateable::InstanceMethods include Hotel::Reserveable::InstanceMethods - attr_reader :reservations_list, :all_rooms + attr_reader :reservations_list, :all_rooms, :block_list # def get_date_range(check_in, check_out) # return (check_in ... check_out).to_a # end @@ -27,73 +28,47 @@ def make_hotel_rooms @all_rooms << num #Hotel::Room.new(num) I don't think I have to do this end end - # - # - # def reserve(check_in, check_out, room, name, contact_info) - # #checks that the date hash't been previously reserved, and there are enough rooms for the blocks - # - # raise ArgumentError.new("This room is already reserved on these days") if rooms_available?(check_in, check_out).include?(room) == false - # new_reservation = Hotel::Reservation.new(check_in, check_out, room, name, contact_info) - # - # @reservations_list << new_reservation - # - # - # end#reserve - # - # def rooms_available?(check_in, check_out) - # # binding.pry - # # #searches through the reservation list to find available rooms - # - # check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) - # check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) - # wanted_dates = get_date_range(check_in_date, check_out_date) - # reserved_rooms_for_dates = [] - # blocks_for_date = 0 - # - # case - # when @reservations_list == [] - # return @all_rooms - # else - # @reservations_list.each do |reservation| - # #needs to check if the room is included in this reservation on the day - # - # overlap = reservation.dates_reserved & wanted_dates - # overlap.any? ? reserved_rooms_for_dates << reservation.room : false - # - # end - # end - # #if blocks_for_date.length <= (@all_rooms - reserved_rooms_for_dates).length ? @all_rooms - reserved_rooms_for_dates : raise ArgumentError.new("Blocks for this date prohibit us from reserving rooms") - # return @all_rooms - reserved_rooms_for_dates - # end#rooms_available - # - # - # #ability to do reservation things - # def reservation_finder(search_term, instance_variable) - # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - # end - # - # def reservations_by_name(name_request) - # reservation_finder( name_request, :name ) - # - # end#reservations_by_date - # - # def reservations_by_date(date) - # date_find = Date.new(date[0], date[1], date[2]) - # reservation_finder(date_find, :date_range ) - # end#reservations_by_date #ablity to do block things #what I want to do is block off the amount of rooms that are required for the block #can change number of blocks in reserved block - def create_block(name, check_in, check_out, num_rooms) + def create_block(check_in, check_out, name, contact_info, discount, num_rooms) + num_rooms_in_range?(num_rooms) + #id_num = SecureRandom.uuid don't need it, but I like the idea + + Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) + + end + + def num_rooms_in_range?(num) + 0 < num <= @all_rooms.length ? true : ArgumentError.new("The number of rooms is out of range") + end + # def finder(search_term, instance_variable) + # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + # end + + def convert_block_to_reservation(name) + being_converted = finder(name, :name, block_list) + being_converted.num_rooms.times do + available_rooms = rooms_available?(being_converted.check_in, being_converted.check_out) + reserve(being_converted.name, being_converted.check_in, being_converted.check_out, available_rooms[0], being_converted.name, being_converted.contact_info) end + @block_list.delete(being_converted) - def change_number_blocks(block_id, amount) end - def convert_block_to_res(block_id) + + + def delete_block(name) + finder(name, :name, block_list) end + + + # #ability to do searchy things + # def finder(search_term, instance_variable) + # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + # end end #class Admin end #module Hotel diff --git a/lib/blocks.rb b/lib/blocks.rb index cd159c42d..00c3029b3 100644 --- a/lib/blocks.rb +++ b/lib/blocks.rb @@ -9,22 +9,33 @@ class Block < Reservation include Hotel::Dateable::InstanceMethods - attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price, :discount + attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price, :discount, :num_rooms - def initialize(check_in, check_out, room = "TBD", name, contact_info, discount) + def initialize(check_in, check_out, name, contact_info, discount, num_rooms) super(check_in, check_out, room, name, contact_info) + @discount = discount + @price = (@date_range.length) * PRICE_PER_NIGHT * calculate_discount(@discount) + @num_rooms = num_rooms + end + + def change_discount(discount) @discount = calculate_discount(discount) - @price = (@date_range.length) * PRICE_PER_NIGHT * @discount end - def calculate_discount(number) - (100 - number) * 0.01 + def price_all_rooms + @num_rooms * @price end - def change_discount(discount) - @discount = calculate_discount(discount) + def change_rooms_block(number) + @num_rooms = number end + private + + + def calculate_discount(number) + (100 - number) * 0.01 + end end end From f9993a9d1aaf3c58f0ad28f81013df979a3e81ac Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 11:47:21 -0700 Subject: [PATCH 35/43] testing reserveable --- specs/reserveable_spec.rb | 100 ++++++++++++++++++++++++++++++++++++++ specs/spec_helper.rb | 3 +- 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 specs/reserveable_spec.rb diff --git a/specs/reserveable_spec.rb b/specs/reserveable_spec.rb new file mode 100644 index 000000000..428645771 --- /dev/null +++ b/specs/reserveable_spec.rb @@ -0,0 +1,100 @@ +require_relative '../lib/concerns/reserveable' +require_relative 'spec_helper' +require 'pry' + +describe "reserve" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + + end + + it "create an instance of Hotel::Reservation" do + @tim_curry.reservations_list.each do |reservation| + reservation.must_be_instance_of Hotel::Reservation + end + end#end instance of Hotel::Reservation + + it "puts the correct number of reservations in the @reservations_list" do + @tim_curry.reservations_list.length.must_equal 2 + end + + it "can get the correct price" do + @tim_curry.reservations_list[0].price.must_equal 600 + end + + it "will raise error if you try to reserve taken room" do + proc{@tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Beetlejuice, Beetlejuice, Beetlejuice!", "New York")}.must_raise ArgumentError + end + +end#end "reserve" describe + +describe "checking for rooms_available?" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "should be able to check for vacancies" do + vacancies = @tim_curry.rooms_available?([2019, 11, 15], [2019, 11, 18]) + + vacancies.length.must_equal 18 + vacancies.must_equal [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] + end + +end#describe rooms available +describe "reservations_by_date" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "should be able to return empty array when no reservations" do + reservations = @tim_curry.reservations_by_date([2019, 11, 30]) + reservations.must_be_instance_of Array + reservations[0].must_be_nil + end + + + it "should return all reservations for a date" do + reservations = @tim_curry.reservations_by_date([2019, 11, 16]) + reservations.length.must_equal 2 + reservations[0].must_equal @tim_curry.reservations_list[0] + end +end + +describe "reservations_by_name" do + before do + @tim_curry = Hotel::Admin.new + + @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + + @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + end + + it "can find reservations by name" do + found_name = @tim_curry.reservations_by_name("Sticky Bandits") + found_name.wont_be_nil + found_name[0].name.must_equal "Sticky Bandits" + end + + it "can find multiple entries with the same name" do + @tim_curry.reserve([2019, 11, 22], [2019, 11, 30], 19, "Sticky Bandits", "New York") + + found_name = @tim_curry.reservations_by_name("Sticky Bandits") + + found_name.length.must_equal 2 + found_name[0].name.must_equal "Sticky Bandits" + found_name[1].name.must_equal "Sticky Bandits" + + end +end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index ad41b1518..452406a76 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -7,7 +7,8 @@ require_relative '../lib/admin' require_relative '../lib/reservation' -require_relative '../lib/room' +require_relative '../lib/concerns/dateable' +require_relative '../lib/concerns/reserveable' From ce0956a305d8315a9ab006feb08a76bd82795029 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 11:48:03 -0700 Subject: [PATCH 36/43] isoloating mixins --- lib/concerns/dateable.rb | 4 ++++ lib/concerns/reserveable.rb | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/concerns/dateable.rb b/lib/concerns/dateable.rb index f0d9373b2..2d8f92f5e 100644 --- a/lib/concerns/dateable.rb +++ b/lib/concerns/dateable.rb @@ -4,6 +4,10 @@ module InstanceMethods def get_date_range(check_in, check_out) (check_in ... check_out).to_a end + #ability to do searchy things + def finder(search_term, instance_variable, search_group) + search_group.find_all{|element| element.send(instance_variable).include?(search_term)} + end end end end diff --git a/lib/concerns/reserveable.rb b/lib/concerns/reserveable.rb index 70bd31ed8..b8125e3f8 100644 --- a/lib/concerns/reserveable.rb +++ b/lib/concerns/reserveable.rb @@ -42,19 +42,19 @@ def rooms_available?(check_in, check_out) end#rooms_available - #ability to do reservation things - def reservation_finder(search_term, instance_variable) - reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - end + # #ability to do searchy things + # def finder(search_term, instance_variable) + # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + # end def reservations_by_name(name_request) - reservation_finder( name_request, :name ) + finder( name_request, :name, reservations_list) end#reservations_by_date def reservations_by_date(date) date_find = Date.new(date[0], date[1], date[2]) - reservation_finder(date_find, :date_range ) + finder(date_find, :date_range, reservations_list ) end#reservations_by_date end end From 58b503521727073f1f29d71cf2ab92bf93231cee Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 11:48:43 -0700 Subject: [PATCH 37/43] moved to reserveable_spec file --- specs/admin_spec.rb | 100 ++------------------------------------------ 1 file changed, 3 insertions(+), 97 deletions(-) diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index 57ce06358..92af8f5bc 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -3,110 +3,16 @@ require 'pry' describe "class Admin" do + describe "initialize" do it "initializes all instance variables" do admin_1 = Hotel::Admin.new admin_1.all_rooms.length.must_equal 20 admin_1.reservations_list.must_be_instance_of Array admin_1.must_be_instance_of Hotel::Admin + admin_1.block_list.must_be_instance_of Hash end end - describe "reserve" do - before do - @tim_curry = Hotel::Admin.new - - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") - - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") - - end - - it "create an instance of Hotel::Reservation" do - @tim_curry.reservations_list.each do |reservation| - reservation.must_be_instance_of Hotel::Reservation - end - end#end instance of Hotel::Reservation - - it "puts the correct number of reservations in the @reservations_list" do - @tim_curry.reservations_list.length.must_equal 2 - end - - it "can get the correct price" do - @tim_curry.reservations_list[0].price.must_equal 600 - end - - it "will raise error if you try to reserve taken room" do - proc{@tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Beetlejuice, Beetlejuice, Beetlejuice!", "New York")}.must_raise ArgumentError - end - - end#end "reserve" describe - - describe "checking for rooms_available?" do - before do - @tim_curry = Hotel::Admin.new - - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") - - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") - end - - it "should be able to check for vacancies" do - vacancies = @tim_curry.rooms_available?([2019, 11, 15], [2019, 11, 18]) - - vacancies.length.must_equal 18 - vacancies.must_equal [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - end - - end#describe rooms available - describe "reservations_by_date" do - before do - @tim_curry = Hotel::Admin.new - - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") - - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") - end - - it "should be able to return empty array when no reservations" do - reservations = @tim_curry.reservations_by_date([2019, 11, 30]) - reservations.must_be_instance_of Array - reservations[0].must_be_nil - end - it "should return all reservations for a date" do - reservations = @tim_curry.reservations_by_date([2019, 11, 16]) - reservations.length.must_equal 2 - reservations[0].must_equal @tim_curry.reservations_list[0] - end - end - - describe "reservations_by_name" do - before do - @tim_curry = Hotel::Admin.new - - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") - - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") - end - - it "can find reservations by name" do - found_name = @tim_curry.reservations_by_name("Sticky Bandits") - found_name.wont_be_nil - found_name[0].name.must_equal "Sticky Bandits" - end - - it "can find multiple entries with the same name" do - reservation_3 = @tim_curry.reserve([2019, 11, 22], [2019, 11, 30], 19, "Sticky Bandits", "New York") - - found_name = @tim_curry.reservations_by_name("Sticky Bandits") - - found_name.length.must_equal 2 - found_name[0].name.must_equal "Sticky Bandits" - found_name[1].name.must_equal "Sticky Bandits" - - end - end - - -end #end class Admin Describe +end#end describe Admin From 426db6e041878861302712870e36d80b5f6d9782 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 11:50:27 -0700 Subject: [PATCH 38/43] added multiple rooms feature to blocks and wrote tests accordingly --- specs/blocks_spec.rb | 51 +++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/specs/blocks_spec.rb b/specs/blocks_spec.rb index 12108bfcb..efe7bf841 100644 --- a/specs/blocks_spec.rb +++ b/specs/blocks_spec.rb @@ -5,37 +5,54 @@ describe "block" do it "can initialize a block" do - block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], "T Payne", "8675309", 10) + block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], "T Payne", "8675309", 10, 15) block_1.must_be_instance_of Hotel::Block end it "can return the correct information" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 ) + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 , 15) block_1.check_in.must_be_instance_of Date block_1.check_out.must_be_instance_of Date block_1.date_range.must_be_instance_of Array block_1.date_range.length.must_equal 2 - block_1.room.must_equal "TBD" + block_1.num_rooms.must_equal 15 block_1.name.must_equal "Dr. Frankenstein" block_1.contact_info.must_equal "8675309" block_1.price.must_equal 340 - block_1.discount.must_equal 0.85 - block_1.discount.must_be_instance_of Float + block_1.discount.must_equal 15 + block_1.discount.must_be_instance_of Integer end -end -describe "nights_reserved method" do - it "can get dates from block" do - block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], "Dr. Frankenstein", "8675309", 20 ) - range_dates = block_1.dates_reserved - range_dates[0].must_equal Date.new(2019, 11, 15) + + describe "nights_reserved method" do + it "can get dates from block" do + block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], "Dr. Frankenstein", "8675309", 20, 15) + range_dates = block_1.dates_reserved + range_dates[0].must_equal Date.new(2019, 11, 15) + end end -end -describe "change_discount" do - it "can change the discount on a block" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 ) - block_1.change_discount(70) - block_1.discount.must_equal 0.30 + + describe "change_discount" do + it "can change the discount on a block" do + block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15, 20) + block_1.change_discount(70) + block_1.discount.must_equal 0.30 + end end + + describe "price_all_rooms" do + it "calculates the price for all rooms" do + block_1 = Hotel::Block.new( [1976, 02, 20], [1976, 02, 22], "Norman Bates", "8675309", 15, 20) + block_1.price_all_rooms.must_equal 6800 + end + end + describe "change_rooms_block" do + it "can change the number of rooms in a block" do + block_1 = Hotel::Block.new( [1976, 02, 20], [1976, 02, 22], "Norman Bates", "8675309", 15, 20) + block_1.change_rooms_block(40) + block_1.num_rooms.must_equal 40 + end + end + end From d7a60e4780bd3696c67f8e701f50244d3855ef2e Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 14:34:07 -0700 Subject: [PATCH 39/43] changed date format --- lib/admin.rb | 98 ++++++++++++++++++++++++++++------------------ lib/reservation.rb | 4 +- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index 79e09c115..b44886061 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -1,5 +1,6 @@ require_relative './concerns/dateable' require_relative './concerns/reserveable' +require_relative './concerns/blockable' require_relative 'reservation' require 'date' require 'securerandom' @@ -10,6 +11,7 @@ module Hotel class Admin include Hotel::Dateable::InstanceMethods include Hotel::Reserveable::InstanceMethods + include Hotel::Blockable::InstanceMethods attr_reader :reservations_list, :all_rooms, :block_list # def get_date_range(check_in, check_out) @@ -18,7 +20,7 @@ class Admin def initialize @reservations_list = [] - @block_list = {} + @block_list = [] @all_rooms = [] make_hotel_rooms end @@ -32,43 +34,63 @@ def make_hotel_rooms #ablity to do block things #what I want to do is block off the amount of rooms that are required for the block #can change number of blocks in reserved block - def create_block(check_in, check_out, name, contact_info, discount, num_rooms) - num_rooms_in_range?(num_rooms) - #id_num = SecureRandom.uuid don't need it, but I like the idea - - Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) - - end - - def num_rooms_in_range?(num) - 0 < num <= @all_rooms.length ? true : ArgumentError.new("The number of rooms is out of range") - end - # def finder(search_term, instance_variable) - # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - # end - - def convert_block_to_reservation(name) - being_converted = finder(name, :name, block_list) - being_converted.num_rooms.times do - available_rooms = rooms_available?(being_converted.check_in, being_converted.check_out) - reserve(being_converted.name, being_converted.check_in, being_converted.check_out, available_rooms[0], being_converted.name, being_converted.contact_info) - end - @block_list.delete(being_converted) - - end - - - - def delete_block(name) - finder(name, :name, block_list) - end - - - - # #ability to do searchy things - # def finder(search_term, instance_variable) - # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - # end + # def create_block(check_in, check_out, name, contact_info, discount, num_rooms) + # + # available_rooms = rooms_available?(check_in, check_out) + # num_rooms_in_range?(num_rooms, available_rooms) + # #id_num = SecureRandom.uuid don't need it, but I like the idea + # + # @block_list << Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) + # + # end + # + # + # def convert_block_to_reservation(name) + # being_converted = finder(name, :name, block_list) + # + # being_converted.each{ |block| block.num_rooms.times do |thing| + # reserve(block.check_in, block.check_out, rooms_available?(block.check_in, block.check_out)[0], block.name, block.contact_info) + # end + # } + # @block_list = @block_list - being_converted + # end + # + # # block.num_rooms.map { + # # available_rooms = rooms_available?(being_converted.check_in, being_converted.check_out) + # # reserve(being_converted.name, being_converted.check_in, being_converted.check_out, available_rooms[0], being_converted.name, being_converted.contact_info)}} + # # @block_list = @block_list - being_converted + # # end + # # end + # # + # # end + # # + # def delete_block(name) + # being_deleted = finder(name, :name, block_list) + # # binding.pry + # @block_list = @block_list - being_deleted + # end + # + # def find_block_name(name) + # finder(name, :name, block_list) + # end + # + # def find_block_by_date(date) + # finder(date, :date_range, block_list) + # end + # + # private + # def num_rooms_in_range?(num, rooms_available) + # + # raise ArgumentError.new("The number of rooms is out of range") if num > rooms_available.length + # + # end + + + + # #ability to do searchy things + # def finder(search_term, instance_variable) + # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} + # end end #class Admin end #module Hotel diff --git a/lib/reservation.rb b/lib/reservation.rb index c846758c1..89f4d3710 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -16,8 +16,8 @@ class Reservation attr_accessor :date_range, :room, :name, :contact_info, :check_in, :check_out, :price def initialize(check_in, check_out, room, name, contact_info) - @check_in = Date.new(check_in[0], check_in[1], check_in[2]) - @check_out = Date.new(check_out[0], check_out[1], check_out[2]) + @check_in = check_in + @check_out = check_out @date_range = populate_date_range(@check_in, @check_out) @room = room @name = name From 48e9820b6213f56ed12980d7c04fba15f1256ca6 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 14:37:04 -0700 Subject: [PATCH 40/43] changed format in tests --- specs/admin_spec.rb | 3 +-- specs/reservations_spec.rb | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/specs/admin_spec.rb b/specs/admin_spec.rb index 92af8f5bc..322d4c7e5 100644 --- a/specs/admin_spec.rb +++ b/specs/admin_spec.rb @@ -10,9 +10,8 @@ admin_1.all_rooms.length.must_equal 20 admin_1.reservations_list.must_be_instance_of Array admin_1.must_be_instance_of Hotel::Admin - admin_1.block_list.must_be_instance_of Hash + admin_1.block_list.must_be_instance_of Array end end - end#end describe Admin diff --git a/specs/reservations_spec.rb b/specs/reservations_spec.rb index 5aabe81e8..9f8373784 100644 --- a/specs/reservations_spec.rb +++ b/specs/reservations_spec.rb @@ -4,13 +4,13 @@ describe "reservation" do it "can initialize a reservation" do - reservation_1 = Hotel::Reservation.new( [2019, 11, 15], [2019, 11, 15], 4, "T Payne", "8675309" ) + reservation_1 = Hotel::Reservation.new( Date.new(2019, 11, 15), Date.new(2019, 11, 15), 4, "T Payne", "8675309" ) reservation_1.must_be_instance_of Hotel::Reservation end it "can return the correct information" do - reservation_1 = Hotel::Reservation.new( [1900, 02, 20], [1900, 02, 22], 3, "Dr. Frankenstein", "8675309" ) + reservation_1 = Hotel::Reservation.new( Date.new(1900, 02, 20), Date.new(1900, 02, 22), 3, "Dr. Frankenstein", "8675309" ) reservation_1.check_in.must_be_instance_of Date reservation_1.check_out.must_be_instance_of Date reservation_1.date_range.must_be_instance_of Array @@ -24,7 +24,7 @@ describe "nights_reserved method" do it "can get dates from reservation" do - reservation_1 = Hotel::Reservation.new([2019, 11, 15], [2019, 11, 17], 7, "Dr. Frankenstein", "8675309" ) + reservation_1 = Hotel::Reservation.new(Date.new(2019, 11, 15), Date.new(2019, 11, 17), 7, "Dr. Frankenstein", "8675309" ) range_dates = reservation_1.dates_reserved range_dates[0].must_equal Date.new(2019, 11, 15) end From 01ad51131f85c3ad77bdd237e402091958bae8e9 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 14:37:35 -0700 Subject: [PATCH 41/43] moved blockable to new module to be used as mixin, likewise new folder for tests --- lib/concerns/blockable.rb | 51 +++++++++++++++++++++++++++++++++++++ specs/blockable_spec.rb | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 lib/concerns/blockable.rb create mode 100644 specs/blockable_spec.rb diff --git a/lib/concerns/blockable.rb b/lib/concerns/blockable.rb new file mode 100644 index 000000000..16db89367 --- /dev/null +++ b/lib/concerns/blockable.rb @@ -0,0 +1,51 @@ +module Hotel + module Blockable + module InstanceMethods + include Hotel::Dateable::InstanceMethods + + def create_block(check_in, check_out, name, contact_info, discount, num_rooms) + + available_rooms = rooms_available?(check_in, check_out) + num_rooms_in_range?(num_rooms, available_rooms) + #id_num = SecureRandom.uuid don't need it, but I like the idea + + @block_list << Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) + + end + + + def convert_block_to_reservation(name) + being_converted = finder(name, :name, block_list) + + being_converted.each{ |block| block.num_rooms.times do |thing| + reserve(block.check_in, block.check_out, rooms_available?(block.check_in, block.check_out)[0], block.name, block.contact_info) + end + } + @block_list = @block_list - being_converted + end + + def delete_block(name) + being_deleted = finder(name, :name, block_list) + # binding.pry + @block_list = @block_list - being_deleted + end + + def find_block_name(name) + finder(name, :name, block_list) + end + + def find_block_by_date(date) + finder(date, :date_range, block_list) + end + + private + def num_rooms_in_range?(num, rooms_available) + + raise ArgumentError.new("The number of rooms is out of range") if num > rooms_available.length + + end + + + end #blockable + end #InstanceMethods +end #Hotel diff --git a/specs/blockable_spec.rb b/specs/blockable_spec.rb new file mode 100644 index 000000000..1618f2c22 --- /dev/null +++ b/specs/blockable_spec.rb @@ -0,0 +1,53 @@ +require_relative '../lib/concerns/blockable' +require_relative 'spec_helper' + + describe "blockable" do + before do + @admin = Hotel::Admin.new + @admin.create_block(Date.new(2012, 07, 16), Date.new(2012, 07, 19), "Bill Murray", "Japan", 5, 14) + end + it "can create a block" do + + @admin.block_list[0].must_be_instance_of Hotel::Block + end + + it "won't take a room of blocks that is out of range" do + proc{@admin.create_block(Date.new(2012, 07, 16), Date.new(2012, 07, 19), "Bill Murray", "Japan", 5, 27)}.must_raise ArgumentError + end + + it "pushes the block into the block_list" do + @admin.block_list.length.must_equal 1 + end + + it "can delete a block" do + @admin.delete_block("Bill Murray") + @admin.block_list.length.must_equal 0 + end + + it "can find a block from the block_list by name" do + @admin.create_block(Date.new(2012, 07, 20), Date.new(2012, 07, 24), "Bill Murray", "Japan", 5, 14) + this_block = @admin.find_block_name("Bill Murray") + this_block.each do |block| + block.must_be_instance_of Hotel::Block + end + this_block.length.must_equal 2 + end + + it "can find a block from the block_list by date" do + this_block = @admin.find_block_by_date(Date.new(2012, 7, 18)) + this_block.each do |block| + block.must_be_instance_of Hotel::Block + end + this_block.length.must_equal 1 + this_other_block = @admin.find_block_by_date(Date.new(2012, 7, 30), ) + this_other_block.length.must_equal 0 + + end + + it "can convert a block to a reservation by name" do + @admin.convert_block_to_reservation("Bill Murray") + @admin.rooms_available?(Date.new(2012, 7, 18), Date.new(2012, 7, 19)).length.must_equal 6 + @admin.block_list.length.must_equal 0 + end + + end#end blockable From 756025313280509c7c84a1f6b604764c1b3bef84 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Fri, 8 Sep 2017 14:38:49 -0700 Subject: [PATCH 42/43] teaking the code --- lib/concerns/reserveable.rb | 11 +++++------ specs/blocks_spec.rb | 14 +++++++------- specs/reserveable_spec.rb | 26 +++++++++++++------------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/lib/concerns/reserveable.rb b/lib/concerns/reserveable.rb index b8125e3f8..2b2b5b529 100644 --- a/lib/concerns/reserveable.rb +++ b/lib/concerns/reserveable.rb @@ -18,10 +18,10 @@ def reserve(check_in, check_out, room, name, contact_info) def rooms_available?(check_in, check_out) # binding.pry # #searches through the reservation list to find available rooms - - check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) - check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) - wanted_dates = get_date_range(check_in_date, check_out_date) + # + # check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) + # check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) + wanted_dates = get_date_range(check_in, check_out) reserved_rooms_for_dates = [] blocks_for_date = 0 @@ -53,8 +53,7 @@ def reservations_by_name(name_request) end#reservations_by_date def reservations_by_date(date) - date_find = Date.new(date[0], date[1], date[2]) - finder(date_find, :date_range, reservations_list ) + finder(date, :date_range, reservations_list ) end#reservations_by_date end end diff --git a/specs/blocks_spec.rb b/specs/blocks_spec.rb index efe7bf841..0b3805264 100644 --- a/specs/blocks_spec.rb +++ b/specs/blocks_spec.rb @@ -5,13 +5,13 @@ describe "block" do it "can initialize a block" do - block_1 = Hotel::Block.new( [2019, 11, 15], [2019, 11, 15], "T Payne", "8675309", 10, 15) + block_1 = Hotel::Block.new( Date.new(2019, 11, 15), Date.new(2019, 11, 15), "T Payne", "8675309", 10, 15) block_1.must_be_instance_of Hotel::Block end it "can return the correct information" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15 , 15) + block_1 = Hotel::Block.new( Date.new(1900, 02, 20), Date.new(1900, 02, 22), "Dr. Frankenstein", "8675309", 15 , 15) block_1.check_in.must_be_instance_of Date block_1.check_out.must_be_instance_of Date block_1.date_range.must_be_instance_of Array @@ -27,7 +27,7 @@ describe "nights_reserved method" do it "can get dates from block" do - block_1 = Hotel::Block.new([2019, 11, 15], [2019, 11, 17], "Dr. Frankenstein", "8675309", 20, 15) + block_1 = Hotel::Block.new(Date.new(2019, 11, 15), Date.new(2019, 11, 17), "Dr. Frankenstein", "8675309", 20, 15) range_dates = block_1.dates_reserved range_dates[0].must_equal Date.new(2019, 11, 15) end @@ -35,7 +35,7 @@ describe "change_discount" do it "can change the discount on a block" do - block_1 = Hotel::Block.new( [1900, 02, 20], [1900, 02, 22], "Dr. Frankenstein", "8675309", 15, 20) + block_1 = Hotel::Block.new( Date.new(1900, 02, 20), Date.new(1900, 02, 22), "Dr. Frankenstein", "8675309", 15, 20) block_1.change_discount(70) block_1.discount.must_equal 0.30 end @@ -43,15 +43,15 @@ describe "price_all_rooms" do it "calculates the price for all rooms" do - block_1 = Hotel::Block.new( [1976, 02, 20], [1976, 02, 22], "Norman Bates", "8675309", 15, 20) + block_1 = Hotel::Block.new( Date.new(1976, 02, 20), Date.new(1976, 02, 22), "Norman Bates", "8675309", 15, 20) block_1.price_all_rooms.must_equal 6800 end end describe "change_rooms_block" do it "can change the number of rooms in a block" do - block_1 = Hotel::Block.new( [1976, 02, 20], [1976, 02, 22], "Norman Bates", "8675309", 15, 20) + block_1 = Hotel::Block.new( Date.new(1976, 02, 20), Date.new(1976, 02, 22), "Norman Bates", "8675309", 15, 20) block_1.change_rooms_block(40) - block_1.num_rooms.must_equal 40 + block_1.num_rooms.must_equal 40 end end diff --git a/specs/reserveable_spec.rb b/specs/reserveable_spec.rb index 428645771..4f5fee8ac 100644 --- a/specs/reserveable_spec.rb +++ b/specs/reserveable_spec.rb @@ -6,9 +6,9 @@ before do @tim_curry = Hotel::Admin.new - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + @reservation_1 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 4, "Kevin McCallister", "New York") - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + @reservation_2 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 8, "Sticky Bandits", "New York") end @@ -27,7 +27,7 @@ end it "will raise error if you try to reserve taken room" do - proc{@tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Beetlejuice, Beetlejuice, Beetlejuice!", "New York")}.must_raise ArgumentError + proc{@tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 8, "Beetlejuice, Beetlejuice, Beetlejuice!", "New York")}.must_raise ArgumentError end end#end "reserve" describe @@ -36,13 +36,13 @@ before do @tim_curry = Hotel::Admin.new - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + @reservation_1 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 4, "Kevin McCallister", "New York") - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + @reservation_2 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 8, "Sticky Bandits", "New York") end it "should be able to check for vacancies" do - vacancies = @tim_curry.rooms_available?([2019, 11, 15], [2019, 11, 18]) + vacancies = @tim_curry.rooms_available?(Date.new(2019, 11, 15), Date.new(2019, 11, 18)) vacancies.length.must_equal 18 vacancies.must_equal [1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] @@ -53,20 +53,20 @@ before do @tim_curry = Hotel::Admin.new - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + @reservation_1 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 4, "Kevin McCallister", "New York") - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + @reservation_2 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 8, "Sticky Bandits", "New York") end it "should be able to return empty array when no reservations" do - reservations = @tim_curry.reservations_by_date([2019, 11, 30]) + reservations = @tim_curry.reservations_by_date(Date.new(2019, 11, 30)) reservations.must_be_instance_of Array reservations[0].must_be_nil end it "should return all reservations for a date" do - reservations = @tim_curry.reservations_by_date([2019, 11, 16]) + reservations = @tim_curry.reservations_by_date(Date.new(2019, 11, 16)) reservations.length.must_equal 2 reservations[0].must_equal @tim_curry.reservations_list[0] end @@ -76,9 +76,9 @@ before do @tim_curry = Hotel::Admin.new - @reservation_1 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 4, "Kevin McCallister", "New York") + @reservation_1 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 4, "Kevin McCallister", "New York") - @reservation_2 = @tim_curry.reserve([2019, 11, 15], [2019, 11, 18], 8, "Sticky Bandits", "New York") + @reservation_2 = @tim_curry.reserve(Date.new(2019, 11, 15), Date.new(2019, 11, 18), 8, "Sticky Bandits", "New York") end it "can find reservations by name" do @@ -88,7 +88,7 @@ end it "can find multiple entries with the same name" do - @tim_curry.reserve([2019, 11, 22], [2019, 11, 30], 19, "Sticky Bandits", "New York") + @tim_curry.reserve(Date.new(2019, 11, 22), Date.new(2019, 11, 30), 19, "Sticky Bandits", "New York") found_name = @tim_curry.reservations_by_name("Sticky Bandits") From 9161ef78a9addb82de9f625c29ceaa7ca15cbf43 Mon Sep 17 00:00:00 2001 From: Roxanne Date: Mon, 11 Sep 2017 08:48:22 -0700 Subject: [PATCH 43/43] added feature to reservable to check for blocks --- lib/admin.rb | 62 +----------------------------- lib/concerns/blockable.rb | 75 +++++++++++++++++++++---------------- lib/concerns/reserveable.rb | 23 +++++------- specs/blockable_spec.rb | 9 ++++- specs/spec_helper.rb | 1 + 5 files changed, 62 insertions(+), 108 deletions(-) diff --git a/lib/admin.rb b/lib/admin.rb index b44886061..28d70d0ae 100644 --- a/lib/admin.rb +++ b/lib/admin.rb @@ -31,66 +31,6 @@ def make_hotel_rooms end end - #ablity to do block things - #what I want to do is block off the amount of rooms that are required for the block - #can change number of blocks in reserved block - # def create_block(check_in, check_out, name, contact_info, discount, num_rooms) - # - # available_rooms = rooms_available?(check_in, check_out) - # num_rooms_in_range?(num_rooms, available_rooms) - # #id_num = SecureRandom.uuid don't need it, but I like the idea - # - # @block_list << Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) - # - # end - # - # - # def convert_block_to_reservation(name) - # being_converted = finder(name, :name, block_list) - # - # being_converted.each{ |block| block.num_rooms.times do |thing| - # reserve(block.check_in, block.check_out, rooms_available?(block.check_in, block.check_out)[0], block.name, block.contact_info) - # end - # } - # @block_list = @block_list - being_converted - # end - # - # # block.num_rooms.map { - # # available_rooms = rooms_available?(being_converted.check_in, being_converted.check_out) - # # reserve(being_converted.name, being_converted.check_in, being_converted.check_out, available_rooms[0], being_converted.name, being_converted.contact_info)}} - # # @block_list = @block_list - being_converted - # # end - # # end - # # - # # end - # # - # def delete_block(name) - # being_deleted = finder(name, :name, block_list) - # # binding.pry - # @block_list = @block_list - being_deleted - # end - # - # def find_block_name(name) - # finder(name, :name, block_list) - # end - # - # def find_block_by_date(date) - # finder(date, :date_range, block_list) - # end - # - # private - # def num_rooms_in_range?(num, rooms_available) - # - # raise ArgumentError.new("The number of rooms is out of range") if num > rooms_available.length - # - # end - - - - # #ability to do searchy things - # def finder(search_term, instance_variable) - # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - # end end #class Admin -end #module Hotel +end diff --git a/lib/concerns/blockable.rb b/lib/concerns/blockable.rb index 16db89367..4b34facfd 100644 --- a/lib/concerns/blockable.rb +++ b/lib/concerns/blockable.rb @@ -1,49 +1,60 @@ module Hotel module Blockable module InstanceMethods - include Hotel::Dateable::InstanceMethods + include Hotel::Dateable::InstanceMethods - def create_block(check_in, check_out, name, contact_info, discount, num_rooms) + def create_block(check_in, check_out, name, contact_info, discount, num_rooms) - available_rooms = rooms_available?(check_in, check_out) - num_rooms_in_range?(num_rooms, available_rooms) - #id_num = SecureRandom.uuid don't need it, but I like the idea + available_rooms = rooms_available?(check_in, check_out) + num_rooms_in_range?(num_rooms, available_rooms) + #id_num = SecureRandom.uuid don't need it, but I like the idea - @block_list << Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) + @block_list << Hotel::Block.new(check_in, check_out, name, contact_info, discount, num_rooms) - end - - - def convert_block_to_reservation(name) - being_converted = finder(name, :name, block_list) - - being_converted.each{ |block| block.num_rooms.times do |thing| - reserve(block.check_in, block.check_out, rooms_available?(block.check_in, block.check_out)[0], block.name, block.contact_info) - end - } - @block_list = @block_list - being_converted end - def delete_block(name) - being_deleted = finder(name, :name, block_list) - # binding.pry - @block_list = @block_list - being_deleted - end - def find_block_name(name) - finder(name, :name, block_list) - end - - def find_block_by_date(date) - finder(date, :date_range, block_list) + def convert_block_to_reservation(name) + being_converted = finder(name, :name, block_list) + @block_list = @block_list - being_converted + being_converted.each{ |block| block.num_rooms.times do |thing| + reserve(block.check_in, block.check_out, rooms_available?(block.check_in, block.check_out)[0], block.name, block.contact_info) + end + } + @block_list = @block_list - being_converted + end + + def delete_block(name) + being_deleted = finder(name, :name, block_list) + # binding.pry + @block_list = @block_list - being_deleted + end + + def find_block_name(name) + finder(name, :name, block_list) + end + + def find_block_by_date(date) + finder(date, :date_range, block_list) + + end + + def number_rooms_blocked_by_date_range(check_in, check_out) + num_rooms = 0 + date_range = get_date_range(check_in, check_out) + date_range.each do |date| + blocks_dates = @block_list.find_all{|block| (block.date_range & date_range).any?} + num_rooms = blocks_dates.sum{|block| block.num_rooms} end + num_rooms + end - private - def num_rooms_in_range?(num, rooms_available) + private + def num_rooms_in_range?(num, rooms_available) - raise ArgumentError.new("The number of rooms is out of range") if num > rooms_available.length + raise ArgumentError.new("The number of rooms is out of range") if num > rooms_available.length - end + end end #blockable diff --git a/lib/concerns/reserveable.rb b/lib/concerns/reserveable.rb index 2b2b5b529..287cfd273 100644 --- a/lib/concerns/reserveable.rb +++ b/lib/concerns/reserveable.rb @@ -1,7 +1,7 @@ module Hotel module Reserveable module InstanceMethods - include Hotel::Dateable::InstanceMethods + include Hotel::Dateable::InstanceMethods def reserve(check_in, check_out, room, name, contact_info) @@ -16,14 +16,9 @@ def reserve(check_in, check_out, room, name, contact_info) end#reserve def rooms_available?(check_in, check_out) - # binding.pry - # #searches through the reservation list to find available rooms - # - # check_in_date = Date.new(check_in[0], check_in[1], check_in[2]) - # check_out_date = Date.new(check_out[0], check_out[1], check_out[2]) + blocks_for_date = number_rooms_blocked_by_date_range(check_in, check_out) wanted_dates = get_date_range(check_in, check_out) reserved_rooms_for_dates = [] - blocks_for_date = 0 case when @reservations_list == [] @@ -37,15 +32,15 @@ def rooms_available?(check_in, check_out) end end - #if blocks_for_date.length <= (@all_rooms - reserved_rooms_for_dates).length ? @all_rooms - reserved_rooms_for_dates : raise ArgumentError.new("Blocks for this date prohibit us from reserving rooms") - return @all_rooms - reserved_rooms_for_dates - end#rooms_available + available_rooms = @all_rooms - reserved_rooms_for_dates + if blocks_for_date >= available_rooms.length + raise ArgumentError.new("Blocks for this date prohibit us from reserving rooms") + else + available_rooms + end + end#rooms_available - # #ability to do searchy things - # def finder(search_term, instance_variable) - # reservations_list.find_all{|reservation| reservation.send(instance_variable).include?(search_term)} - # end def reservations_by_name(name_request) finder( name_request, :name, reservations_list) diff --git a/specs/blockable_spec.rb b/specs/blockable_spec.rb index 1618f2c22..e1e738848 100644 --- a/specs/blockable_spec.rb +++ b/specs/blockable_spec.rb @@ -25,7 +25,7 @@ end it "can find a block from the block_list by name" do - @admin.create_block(Date.new(2012, 07, 20), Date.new(2012, 07, 24), "Bill Murray", "Japan", 5, 14) + @admin.create_block(Date.new(2012, 07, 20), Date.new(2012, 07, 24), "Bill Murray", "Japan", 5, 3) this_block = @admin.find_block_name("Bill Murray") this_block.each do |block| block.must_be_instance_of Hotel::Block @@ -45,9 +45,16 @@ end it "can convert a block to a reservation by name" do + @admin.convert_block_to_reservation("Bill Murray") @admin.rooms_available?(Date.new(2012, 7, 18), Date.new(2012, 7, 19)).length.must_equal 6 @admin.block_list.length.must_equal 0 end + it "can find a number of rooms blocked by date range" do + num_blocked = @admin.number_rooms_blocked_by_date_range(Date.new(2012, 07, 16), Date.new(2012, 07, 19)) + num_blocked.must_equal 14 + + end + end#end blockable diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 452406a76..ddcb9b545 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -9,6 +9,7 @@ require_relative '../lib/reservation' require_relative '../lib/concerns/dateable' require_relative '../lib/concerns/reserveable' +require_relative '../lib/room'