From f47d8d4d7cf30d11dfed0d7bf76c575bd2b07f88 Mon Sep 17 00:00:00 2001 From: dHelmgren Date: Fri, 31 Aug 2018 13:43:03 -0700 Subject: [PATCH 01/13] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6d835497d..8e297faaf 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Reinforce and practice all of the Ruby and programming concepts we've covered in This is a [stage 3](https://github.com/Ada-Developers-Academy/pedagogy/blob/master/rule-of-three.md), individual project. +This project is due before class on **Monday September 10th** ## Introduction From 25a7309577c7734f82717798559a2c83fe75066e Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Tue, 4 Sep 2018 13:56:44 -0700 Subject: [PATCH 02/13] add coverage directory to .gitignore file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e1422c9c..c0ac3dc53 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +coverage From 091364db62582b4fec7d478ce52480cf7c17b532 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Tue, 4 Sep 2018 16:47:34 -0700 Subject: [PATCH 03/13] created room.rb, room_spec.rb,and tests for 'instance of room','has a room number', and 'creates a list of twentyrooms'. --- .gitignore | 1 - Guardfile | 7 +++++++ Rakefile | 9 +++++++++ lib/.keep | 10 ++++++++++ lib/reservation.rb | 30 ++++++++++++++++++++++++++++++ lib/room.rb | 27 +++++++++++++++++++++++++++ specs/reservation_spec.rb | 0 specs/room_spec.rb | 20 ++++++++++++++++++++ specs/spec_helper.rb | 11 +++++++++++ 9 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 Guardfile create mode 100644 Rakefile create mode 100644 lib/reservation.rb create mode 100644 lib/room.rb create mode 100644 specs/reservation_spec.rb create mode 100644 specs/room_spec.rb create mode 100644 specs/spec_helper.rb diff --git a/.gitignore b/.gitignore index c0ac3dc53..5e1422c9c 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,3 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc -coverage diff --git a/Guardfile b/Guardfile new file mode 100644 index 000000000..d83c14010 --- /dev/null +++ b/Guardfile @@ -0,0 +1,7 @@ +guard :minitest, bundler: false, autorun: false, rubygems: false do + + # with Minitest::Spec + watch(%r{^spec/(.*)_spec\.rb$}) + watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } + watch(%r{^spec/spec_helper\.rb$}) { 'spec' } +end diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..deb52f2cd --- /dev/null +++ b/Rakefile @@ -0,0 +1,9 @@ +require 'rake/testtask' + +Rake::TestTask.new do |t| + t.libs = ["lib"] + t.warning = true + t.test_files = FileList['specs/*_spec.rb'] +end + +task default: :test diff --git a/lib/.keep b/lib/.keep index e69de29bb..a8ce323e9 100644 --- a/lib/.keep +++ b/lib/.keep @@ -0,0 +1,10 @@ +User Stories +As an administrator, I can access the list of all of the rooms in the hotel +As an administrator, I can reserve a room for a given date range +As an administrator, I can access the list of reservations for a specific date +As an administrator, I can get the total cost for a given reservation +Constraints +The hotel has 20 rooms, and they are numbered 1 through 20 +Every room is identical, and a room always costs $200/night +The last day of a reservation is the checkout day, so the guest should not be charged for that night +For this wave, any room can be reserved at any time, and you don't need to check whether reservations conflict with each other (this will come in wave 2!) diff --git a/lib/reservation.rb b/lib/reservation.rb new file mode 100644 index 000000000..59d398d30 --- /dev/null +++ b/lib/reservation.rb @@ -0,0 +1,30 @@ +require 'Date' +module Reservation + class ReserveRoom + attr_accessor :room_status, :start_date, :end_date, :cost + + def initialize(input) + @room_status = :room_status + @start_date = input[:start_date] + @end_date = input[:end_date] + @cost = cost + end + + def start_date + @start_date = start_date + end + def end_date + @end_date = end_date + end + + def create_reservation + + end + + def check_room_status + + end +end + class BookingDates + + end diff --git a/lib/room.rb b/lib/room.rb new file mode 100644 index 000000000..2d7fde842 --- /dev/null +++ b/lib/room.rb @@ -0,0 +1,27 @@ + + +module Hotel + class Room + attr_reader :room_number + attr_accessor :status + + def initialize(room_number, status = :Available) + @room_number = room_number + @status = status + end + def self.create_rooms + @all_rooms = [ ] + room_number = 0 + 20.times do + room_number += 1 + @all_rooms << Room.new(room_number) + end + return @all_rooms + end + + def self.list_all_rooms + @all_rooms = self.create_rooms + return @all_rooms + end + end +end diff --git a/specs/reservation_spec.rb b/specs/reservation_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..661472631 --- /dev/null +++ b/specs/room_spec.rb @@ -0,0 +1,20 @@ +require_relative 'spec_helper' + +describe "Rooms Class" do + describe "initialize rooms" do + + it "is an instance of Room" do + test_room = Hotel::Room.new(1) + expect(test_room).must_be_kind_of Hotel::Room + end + end + it "has a room number" do + @room = Hotel::Room.new(1) + expect(@room.room_number).must_equal 1 + end + + it "creates a list of twenty rooms" do + all_rooms = Hotel::Room.create_rooms + expect(all_rooms.length).must_equal 20 + end +end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb new file mode 100644 index 000000000..acbb16873 --- /dev/null +++ b/specs/spec_helper.rb @@ -0,0 +1,11 @@ +require 'simplecov' +SimpleCov.start +require 'minitest' +require 'minitest/pride' +require 'minitest/autorun' +require 'minitest/reporters' + +Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + +require_relative '../lib/room.rb' +# require_relative From d3af2ec5d32f8937a7fe499f18c21c966a61a1cf Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Wed, 5 Sep 2018 14:09:53 -0700 Subject: [PATCH 04/13] SUCCESSFULLY added and passed test for creating new reservation --- Guardfile | 1 - Rakefile | 2 +- lib/reservation.rb | 40 ++++++++++++++++++++++----------------- lib/room.rb | 9 ++++----- specs/reservation_spec.rb | 10 ++++++++++ specs/room_spec.rb | 11 +++++------ specs/spec_helper.rb | 1 + 7 files changed, 44 insertions(+), 30 deletions(-) diff --git a/Guardfile b/Guardfile index d83c14010..fa59fc3ef 100644 --- a/Guardfile +++ b/Guardfile @@ -1,5 +1,4 @@ guard :minitest, bundler: false, autorun: false, rubygems: false do - # with Minitest::Spec watch(%r{^spec/(.*)_spec\.rb$}) watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" } diff --git a/Rakefile b/Rakefile index deb52f2cd..a2f13e5cb 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,7 @@ require 'rake/testtask' Rake::TestTask.new do |t| - t.libs = ["lib"] + t.libs = ['lib'] t.warning = true t.test_files = FileList['specs/*_spec.rb'] end diff --git a/lib/reservation.rb b/lib/reservation.rb index 59d398d30..6468d7011 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,30 +1,36 @@ -require 'Date' +# create module for reservations to hold classes module Reservation + # class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost - def initialize(input) - @room_status = :room_status - @start_date = input[:start_date] - @end_date = input[:end_date] - @cost = cost - end - - def start_date + def initialize(room_status, start_date, end_date, cost = 200) + @room_status = room_status @start_date = start_date - end - def end_date @end_date = end_date + @cost = cost end - def create_reservation + # def start_date + # @start_date = start_date + # end + # def end_date + # @end_date = end_date + # end + def self.create_reservation + @new_reservation = Reservation.new end + @new_reservation + end - def check_room_status - + def check_room_status + if :room_status == :Available + puts 'Room is available.' + else + puts 'Room is not available.' end + end +end +class BookingDates end - class BookingDates - - end diff --git a/lib/room.rb b/lib/room.rb index 2d7fde842..3c1cbcb9c 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,6 +1,5 @@ - - module Hotel + # create new class of Room, to create the block of rooms class Room attr_reader :room_number attr_accessor :status @@ -9,19 +8,19 @@ def initialize(room_number, status = :Available) @room_number = room_number @status = status end + def self.create_rooms - @all_rooms = [ ] + @all_rooms = [] room_number = 0 20.times do room_number += 1 @all_rooms << Room.new(room_number) end - return @all_rooms + @all_rooms end def self.list_all_rooms @all_rooms = self.create_rooms - return @all_rooms end end end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index e69de29bb..349549fc0 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -0,0 +1,10 @@ +require_relative 'spec_helper' + +describe 'Reservation Class' do + describe 'initialize a reservation' do + it 'creates an instance of a reservation' do + test_reservation = Reservation::ReserveRoom.new(:Available, '09/20/18', '09/22/18') + expect(test_reservation).must_be_kind_of Reservation::ReserveRoom + end + end +end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 661472631..5bf5f88c7 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -1,19 +1,18 @@ require_relative 'spec_helper' -describe "Rooms Class" do - describe "initialize rooms" do - - it "is an instance of Room" do +describe 'Rooms Class' do + describe 'initialize rooms' do + it 'is an instance of Room' do test_room = Hotel::Room.new(1) expect(test_room).must_be_kind_of Hotel::Room end end - it "has a room number" do + it 'has a room number' do @room = Hotel::Room.new(1) expect(@room.room_number).must_equal 1 end - it "creates a list of twenty rooms" do + it 'creates a list of twenty rooms' do all_rooms = Hotel::Room.create_rooms expect(all_rooms.length).must_equal 20 end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index acbb16873..14049ee7f 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -8,4 +8,5 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new require_relative '../lib/room.rb' +require_relative '../lib/reservation.rb' # require_relative From 8cead7623df9e747b3ae9b00db9b6bf1675017d2 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Wed, 5 Sep 2018 14:20:53 -0700 Subject: [PATCH 05/13] correected rubocop errors and removed unnecessary spaces and lines --- lib/reservation.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/reservation.rb b/lib/reservation.rb index 6468d7011..1f26a34ac 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -10,7 +10,7 @@ def initialize(room_status, start_date, end_date, cost = 200) @end_date = end_date @cost = cost end - + # # def start_date # @start_date = start_date # end @@ -21,15 +21,14 @@ def initialize(room_status, start_date, end_date, cost = 200) def self.create_reservation @new_reservation = Reservation.new end - @new_reservation end def check_room_status if :room_status == :Available puts 'Room is available.' - else + elsif :room_status == :Unavailable puts 'Room is not available.' - end + end end end class BookingDates From e7b87f66a424ced291a6e42a2fbe0a92e23e21cc Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Fri, 7 Sep 2018 10:51:56 -0700 Subject: [PATCH 06/13] updating before changing date and time structure --- lib/date_range.rb | 14 ++++++++++++ lib/reservation.rb | 48 ++++++++++++++++++++++++++++++--------- specs/date_range_spec.rb | 0 specs/reservation_spec.rb | 10 ++++++++ specs/room_spec.rb | 4 ++-- 5 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 lib/date_range.rb create mode 100644 specs/date_range_spec.rb diff --git a/lib/date_range.rb b/lib/date_range.rb new file mode 100644 index 000000000..8f28377e3 --- /dev/null +++ b/lib/date_range.rb @@ -0,0 +1,14 @@ +class DateRange + attr_accessor :room_status, :start_date, :end_date + + def initialize(room_status, start_date, end_date) + @room_status = room_status + @start_date = start_date + @end_date = end_date + end + +def start_date("%d/%m/%Y","%k:%M" = 15:00) +@start_date = start_date +end + +def end_date("%d/%m/%Y","%k:%M" = 11:00) diff --git a/lib/reservation.rb b/lib/reservation.rb index 1f26a34ac..a64d73ec7 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,6 +1,6 @@ # create module for reservations to hold classes module Reservation - # + class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost @@ -10,17 +10,11 @@ def initialize(room_status, start_date, end_date, cost = 200) @end_date = end_date @cost = cost end - # - # def start_date - # @start_date = start_date - # end - # def end_date - # @end_date = end_date - # end def self.create_reservation @new_reservation = Reservation.new end + # @booked_rooms << @new_reservation end def check_room_status @@ -28,8 +22,40 @@ def check_room_status puts 'Room is available.' elsif :room_status == :Unavailable puts 'Room is not available.' - end + end + end + + def calculate_room_cost + @room_cost = (:end_date - :start_date).to_i * 200.to_f + end + open_rooms = [] + reserved_rooms = [] + def lists_booked_rooms + start_date = Date.parse('20/09/2018') + end_date = Date.parse ('30/09/2018') + date_range = (start_date..end_date) + @all_rooms.to_a.each do |room| + @booked_rooms.to_a.each do |room| + if all_rooms.room_number != booked_rooms.room_number + open_rooms << room + elsif all_rooms.room_number == booked_rooms.room_number + reserved_rooms << room + end + open_rooms + reserved_rooms + end + end end end -class BookingDates -end +# Two date ranges *do* overlap if range A compared to range B: +# - Same dates +# - Overlaps in the front +# - Overlaps in the back +# - Completely contained +# - Completely containing +# +# Two date ranges are *not* overlapping if range A compared to range B: +# - Completely before +# - Completely after +# - Ends on the checkin date +# - Starts on the checkout date diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb new file mode 100644 index 000000000..e69de29bb diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 349549fc0..3fe89e5a7 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -7,4 +7,14 @@ expect(test_reservation).must_be_kind_of Reservation::ReserveRoom end end + it 'can caluclate the cost of a reservation' do + end_date = Date.parse('22/09/2018') + start_date = Date.parse('20/09/2018') + num_nights = (end_date - start_date).to_i + room_cost = num_nights * 200 + expect(room_cost).must_equal 400 + end + # it 'can see a list of reservations for a specific date' do + # + # end end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 5bf5f88c7..68608d272 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -13,7 +13,7 @@ end it 'creates a list of twenty rooms' do - all_rooms = Hotel::Room.create_rooms - expect(all_rooms.length).must_equal 20 + @all_rooms = Hotel::Room.create_rooms + expect(@all_rooms.length).must_equal 20 end end From 9986dfcab1a84d91fd35e56b22e731d94f4033c8 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Fri, 7 Sep 2018 13:41:41 -0700 Subject: [PATCH 07/13] added method and test for creating date range --- lib/date_range.rb | 22 ++++++++++++++------ lib/reservation.rb | 43 ++++++++++++++++++--------------------- specs/date_range_spec.rb | 9 ++++++++ specs/reservation_spec.rb | 12 +++++++++++ specs/spec_helper.rb | 2 +- 5 files changed, 58 insertions(+), 30 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index 8f28377e3..c261327e8 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,14 +1,24 @@ class DateRange attr_accessor :room_status, :start_date, :end_date - def initialize(room_status, start_date, end_date) +def res_start(start_time = '11:00'.strftime('%k%M')) + @res_start = res_start +end +def res_end(end_time = '15:00'.strftime('%k%M')) + @res_end = res_end +end + + def start_date_time(date, start_time) + @start_date = DateTime.new.res_start + end + + def end_date_time(date, end_time) + @end_date = DateTime.new.res_end + end + + def initialize(room_number, room_status, start_date_time, end_date_time) @room_status = room_status @start_date = start_date @end_date = end_date end - -def start_date("%d/%m/%Y","%k:%M" = 15:00) -@start_date = start_date end - -def end_date("%d/%m/%Y","%k:%M" = 11:00) diff --git a/lib/reservation.rb b/lib/reservation.rb index a64d73ec7..c20dff7e3 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -4,24 +4,23 @@ module Reservation class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost - def initialize(room_status, start_date, end_date, cost = 200) + def initialize(room_status, date_range, cost = 200) @room_status = room_status - @start_date = start_date - @end_date = end_date + @date_range = date_range @cost = cost end def self.create_reservation - @new_reservation = Reservation.new end - # @booked_rooms << @new_reservation end def check_room_status - if :room_status == :Available - puts 'Room is available.' - elsif :room_status == :Unavailable - puts 'Room is not available.' + @all_rooms.each do |status| + if :room_status == :Available + puts 'Room is Available.' + elsif :room_status == :Unavailable + puts 'Room is Unavailable.' + end end end @@ -31,20 +30,18 @@ def calculate_room_cost open_rooms = [] reserved_rooms = [] def lists_booked_rooms - start_date = Date.parse('20/09/2018') - end_date = Date.parse ('30/09/2018') - date_range = (start_date..end_date) - @all_rooms.to_a.each do |room| - @booked_rooms.to_a.each do |room| - if all_rooms.room_number != booked_rooms.room_number - open_rooms << room - elsif all_rooms.room_number == booked_rooms.room_number - reserved_rooms << room - end - open_rooms - reserved_rooms - end - end + # start_date = Date.parse('20/09/2018') + # end_date = Date.parse ('30/09/2018') + # date_range = (start_date..end_date) + # @all_rooms.to_a.each do |room| + # @booked_rooms.to_a.each do |room| + # if all_rooms.room_number != booked_rooms.room_number + # open_rooms << room + # elsif all_rooms.room_number == booked_rooms.room_number + # reserved_rooms << room + # end + # end + # end end end # Two date ranges *do* overlap if range A compared to range B: diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index e69de29bb..618c6454f 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -0,0 +1,9 @@ +require_relative 'spec_helper' + +describe 'DateRange Class' do + describe 'initialize date_range' do + it 'is an instance of date_range' do + test_date_range = DateRange.new(1, :Available, '09/20/18', '09/22/18') + end + end +end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 3fe89e5a7..070a13066 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -6,6 +6,10 @@ test_reservation = Reservation::ReserveRoom.new(:Available, '09/20/18', '09/22/18') expect(test_reservation).must_be_kind_of Reservation::ReserveRoom end + it 'can check the status of a room' do + @room = Hotel::Room.new(1) + expect(@room.status).must_equal :Available + end end it 'can caluclate the cost of a reservation' do end_date = Date.parse('22/09/2018') @@ -14,6 +18,14 @@ room_cost = num_nights * 200 expect(room_cost).must_equal 400 end + # + # (start_date_time, end_date_time, room_number, room_status) + # @start_date_time = start_date_time + # @end_date_time = end_date_time + # @room_number = room_number + # if room_status == :Available + # room_status = :Unavailable + # end # it 'can see a list of reservations for a specific date' do # # end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 14049ee7f..5f57767d1 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -9,4 +9,4 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -# require_relative +require_relative '../lib/date_range.rb' From e00d51d8ca35119f73eb13aa72382ff0f81a5fd0 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sat, 8 Sep 2018 11:59:28 -0700 Subject: [PATCH 08/13] fixed calculate room cost errors and updated DateTime issues --- lib/date_range.rb | 8 ++--- lib/reservation.rb | 70 ++++++++++++++++++++++----------------- specs/date_range_spec.rb | 3 +- specs/reservation_spec.rb | 21 ++++++------ 4 files changed, 56 insertions(+), 46 deletions(-) diff --git a/lib/date_range.rb b/lib/date_range.rb index c261327e8..19306b638 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -8,16 +8,16 @@ def res_end(end_time = '15:00'.strftime('%k%M')) @res_end = res_end end - def start_date_time(date, start_time) + def start_date_time(date, res_start) @start_date = DateTime.new.res_start end - def end_date_time(date, end_time) + def end_date_time(date, res_end) @end_date = DateTime.new.res_end end - def initialize(room_number, room_status, start_date_time, end_date_time) - @room_status = room_status + def initialize(room_number, start_date_time, end_date_time) + @room_number = room_number @start_date = start_date @end_date = end_date end diff --git a/lib/reservation.rb b/lib/reservation.rb index c20dff7e3..a0923d534 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,49 +1,59 @@ # create module for reservations to hold classes +require 'pry' module Reservation class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost - def initialize(room_status, date_range, cost = 200) - @room_status = room_status - @date_range = date_range + def initialize( start_date_time, end_date_time, cost = 200) + @start_date = DateTime.strptime(start_date_time + " 15:00", "%m/%d/%y %H:%M") + @end_date = DateTime.strptime(end_date_time + " 11:00", "%m/%d/%y %H:%M") @cost = cost end def self.create_reservation end - end - def check_room_status - @all_rooms.each do |status| - if :room_status == :Available - puts 'Room is Available.' - elsif :room_status == :Unavailable - puts 'Room is Unavailable.' - end + + def check_room_status + #@all_rooms.each do |status| + # if :room_status == :Available + # puts 'Room is Available.' + # elsif :room_status == :Unavailable + # puts 'Room is Unavailable.' + # end + # end + end + def calculate_cost + num_nights = (end_date - start_date).to_i + @room_cost = (num_nights + 1) * 200.to_f + # end_date = Date.parse('22/09/2018') + # start_date = Date.parse('20/09/2018') + + # @room_cost = @num_nights * 200 end - end - def calculate_room_cost - @room_cost = (:end_date - :start_date).to_i * 200.to_f - end - open_rooms = [] - reserved_rooms = [] - def lists_booked_rooms - # start_date = Date.parse('20/09/2018') - # end_date = Date.parse ('30/09/2018') - # date_range = (start_date..end_date) - # @all_rooms.to_a.each do |room| - # @booked_rooms.to_a.each do |room| - # if all_rooms.room_number != booked_rooms.room_number - # open_rooms << room - # elsif all_rooms.room_number == booked_rooms.room_number - # reserved_rooms << room - # end - # end - # end end end + + +# open_rooms = [] +# reserved_rooms = [] +# def lists_booked_rooms +# start_date = Date.parse('20/09/2018') +# end_date = Date.parse ('30/09/2018') +# date_range = (start_date..end_date) +# @all_rooms.to_a.each do |room| +# @booked_rooms.to_a.each do |room| +# if all_rooms.room_number != booked_rooms.room_number +# open_rooms << room +# elsif all_rooms.room_number == booked_rooms.room_number +# reserved_rooms << room +# end +# end +# end +# end + # Two date ranges *do* overlap if range A compared to range B: # - Same dates # - Overlaps in the front diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index 618c6454f..d2147e0de 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -3,7 +3,8 @@ describe 'DateRange Class' do describe 'initialize date_range' do it 'is an instance of date_range' do - test_date_range = DateRange.new(1, :Available, '09/20/18', '09/22/18') + test_date_range = DateRange.new(1,'09/20/18', '09/22/18') + expect(test_date_range).must_be_kind_of DateRange end end end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 070a13066..e4598a2ae 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -1,24 +1,23 @@ require_relative 'spec_helper' +# require_relative '../lib/reservation' describe 'Reservation Class' do - describe 'initialize a reservation' do + describe 'initialize a reservation' do it 'creates an instance of a reservation' do - test_reservation = Reservation::ReserveRoom.new(:Available, '09/20/18', '09/22/18') + test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') expect(test_reservation).must_be_kind_of Reservation::ReserveRoom end - it 'can check the status of a room' do + it 'can check the status of a new room' do @room = Hotel::Room.new(1) expect(@room.status).must_equal :Available end + + it 'can calculate the cost of a reservation' do + @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + expect(@test_reservation.calculate_cost).must_equal 400.0 + end end - it 'can caluclate the cost of a reservation' do - end_date = Date.parse('22/09/2018') - start_date = Date.parse('20/09/2018') - num_nights = (end_date - start_date).to_i - room_cost = num_nights * 200 - expect(room_cost).must_equal 400 - end - # + # (start_date_time, end_date_time, room_number, room_status) # @start_date_time = start_date_time # @end_date_time = end_date_time From b6202cdc4d615d51d16901a59666fbea748d4f49 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sat, 8 Sep 2018 14:20:12 -0700 Subject: [PATCH 09/13] added hotel admin category and updating tests. --- lib/date_range.rb | 49 ++++++++++++++++----------------- lib/hotel_admin.rb | 23 ++++++++++++++++ lib/reservation.rb | 57 +++++++++++++++++---------------------- lib/room.rb | 13 ++++++--- specs/date_range_spec.rb | 20 +++++++------- specs/hotel_admin_spec.rb | 12 +++++++++ specs/reservation_spec.rb | 11 ++------ specs/room_spec.rb | 8 +++--- specs/spec_helper.rb | 2 +- 9 files changed, 110 insertions(+), 85 deletions(-) create mode 100644 lib/hotel_admin.rb create mode 100644 specs/hotel_admin_spec.rb diff --git a/lib/date_range.rb b/lib/date_range.rb index 19306b638..4d01c9b17 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,24 +1,25 @@ -class DateRange - attr_accessor :room_status, :start_date, :end_date - -def res_start(start_time = '11:00'.strftime('%k%M')) - @res_start = res_start -end -def res_end(end_time = '15:00'.strftime('%k%M')) - @res_end = res_end -end - - def start_date_time(date, res_start) - @start_date = DateTime.new.res_start - end - - def end_date_time(date, res_end) - @end_date = DateTime.new.res_end - end - - def initialize(room_number, start_date_time, end_date_time) - @room_number = room_number - @start_date = start_date - @end_date = end_date - end -end +# # Create a DateRange to manage date information +# class DateRange +# attr_accessor :room_status, :start_date, :end_date +# # +# # def res_start(start_time = '11:00'.strftime('%k%M')) +# # @res_start = res_start +# # end +# # def res_end(end_time = '15:00'.strftime('%k%M')) +# # @res_end = res_end +# # end +# # +# # def start_date_time(date, res_start) +# # @start_date = DateTime.new.res_start +# # end +# # +# # def end_date_time(date, res_end) +# # @end_date = DateTime.new.res_end +# # end +# +# def initialize(room_number, start_date_time, end_date_time) +# @room_number = room_number +# @start_date = start_date +# @end_date = end_date +# end +# end diff --git a/lib/hotel_admin.rb b/lib/hotel_admin.rb new file mode 100644 index 000000000..854056ac8 --- /dev/null +++ b/lib/hotel_admin.rb @@ -0,0 +1,23 @@ +require_relative 'room.rb' +require_relative 'reservation.rb' + +module Hotel + class HotelAdmin + def initialize + @rooms = Hotel::Room.create_rooms + end + end + + def create_reservation + @booked_rooms = [] + @open_rooms = [] + @all_rooms.each do |number, status| + if :room_status == :Available + status = :Unavailable + booked_rooms << room + end + end + end + + +end diff --git a/lib/reservation.rb b/lib/reservation.rb index a0923d534..58f4dafec 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -5,54 +5,45 @@ module Reservation class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost - def initialize( start_date_time, end_date_time, cost = 200) - @start_date = DateTime.strptime(start_date_time + " 15:00", "%m/%d/%y %H:%M") - @end_date = DateTime.strptime(end_date_time + " 11:00", "%m/%d/%y %H:%M") + def initialize(start_date_time, end_date_time, cost = 200) + @start_date = DateTime.strptime(start_date_time + ' 15:00', '%m/%d/%y %H:%M') + @end_date = DateTime.strptime(end_date_time + ' 11:00', '%m/%d/%y %H:%M') @cost = cost - end - def self.create_reservation +# create_reservation end + # def create_reservation + # @booked_rooms = [] + # @open_rooms = [] + # @all_rooms.each do |number, status| + # if :room_status == :Available + # status = :Unavailable + # booked_rooms << room + # end + # end + # end def check_room_status - #@all_rooms.each do |status| - # if :room_status == :Available - # puts 'Room is Available.' - # elsif :room_status == :Unavailable - # puts 'Room is Unavailable.' - # end - # end + @all_rooms.each do |status| + if :room_status == :Available + puts "Room is Available." + elsif :room_status == :Unavailable + puts "Room is not available." + end + end end + def calculate_cost - num_nights = (end_date - start_date).to_i + num_nights = (end_date - start_date).to_i @room_cost = (num_nights + 1) * 200.to_f - # end_date = Date.parse('22/09/2018') - # start_date = Date.parse('20/09/2018') - - # @room_cost = @num_nights * 200 end end end -# open_rooms = [] -# reserved_rooms = [] -# def lists_booked_rooms -# start_date = Date.parse('20/09/2018') -# end_date = Date.parse ('30/09/2018') -# date_range = (start_date..end_date) -# @all_rooms.to_a.each do |room| -# @booked_rooms.to_a.each do |room| -# if all_rooms.room_number != booked_rooms.room_number -# open_rooms << room -# elsif all_rooms.room_number == booked_rooms.room_number -# reserved_rooms << room -# end -# end -# end -# end + # Two date ranges *do* overlap if range A compared to range B: # - Same dates diff --git a/lib/room.rb b/lib/room.rb index 3c1cbcb9c..0adbfe5a9 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -2,11 +2,12 @@ module Hotel # create new class of Room, to create the block of rooms class Room attr_reader :room_number - attr_accessor :status + attr_accessor :status, :reservations def initialize(room_number, status = :Available) @room_number = room_number @status = status + @reservations = [] end def self.create_rooms @@ -16,11 +17,15 @@ def self.create_rooms room_number += 1 @all_rooms << Room.new(room_number) end - @all_rooms + return @all_rooms end - def self.list_all_rooms - @all_rooms = self.create_rooms + def list_all_rooms + @all_rooms = all_rooms + end + + def to_s + "#{self.class} - #{self.object_id} - @room=#{self.room_number}, @status=#{self.status}" end end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index d2147e0de..e31740751 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -1,10 +1,10 @@ -require_relative 'spec_helper' - -describe 'DateRange Class' do - describe 'initialize date_range' do - it 'is an instance of date_range' do - test_date_range = DateRange.new(1,'09/20/18', '09/22/18') - expect(test_date_range).must_be_kind_of DateRange - end - end -end +# require_relative 'spec_helper' +# +# describe 'DateRange Class' do +# describe 'initialize date_range' do +# it 'is an instance of date_range' do +# test_date_range = DateRange.new(1, '09/20/18', '09/22/18') +# expect(test_date_range).must_be_kind_of DateRange +# end +# end +# end diff --git a/specs/hotel_admin_spec.rb b/specs/hotel_admin_spec.rb new file mode 100644 index 000000000..85bdae308 --- /dev/null +++ b/specs/hotel_admin_spec.rb @@ -0,0 +1,12 @@ +require_relative 'spec_helper' + +describe 'Admin Class' do + describe 'initialize Admin' do + it 'creates an instance of twenty rooms' do + it 'creates a list of twenty rooms' do + @rooms = Hotel::Room.create_rooms + expect(@rooms.length).must_equal 20 + end + end + end +end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index e4598a2ae..1fa88a1eb 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -2,7 +2,7 @@ # require_relative '../lib/reservation' describe 'Reservation Class' do - describe 'initialize a reservation' do + describe 'initialize a reservation' do it 'creates an instance of a reservation' do test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') expect(test_reservation).must_be_kind_of Reservation::ReserveRoom @@ -13,18 +13,11 @@ end it 'can calculate the cost of a reservation' do - @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + @test_reservation = Reservation::ReserveRoom.new('09/20/18', '09/22/18') expect(@test_reservation.calculate_cost).must_equal 400.0 end end - # (start_date_time, end_date_time, room_number, room_status) - # @start_date_time = start_date_time - # @end_date_time = end_date_time - # @room_number = room_number - # if room_status == :Available - # room_status = :Unavailable - # end # it 'can see a list of reservations for a specific date' do # # end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 68608d272..aaebf1aa7 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -12,8 +12,8 @@ expect(@room.room_number).must_equal 1 end - it 'creates a list of twenty rooms' do - @all_rooms = Hotel::Room.create_rooms - expect(@all_rooms.length).must_equal 20 - end + # it 'creates a list of twenty rooms' do + # @all_rooms = Hotel::Room.create_rooms + # expect(@all_rooms.length).must_equal 20 + # end end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 5f57767d1..20de24da9 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -9,4 +9,4 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -require_relative '../lib/date_range.rb' +require_relative '../lib/hotel_admin.rb' From c2c6caa0fc64db29891625c8bf7a7d23e95979d2 Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sat, 8 Sep 2018 21:07:46 -0700 Subject: [PATCH 10/13] Revert to prev commit --- lib/date_range.rb | 49 +++++++++++++++++---------------- lib/hotel_admin.rb | 23 ---------------- lib/reservation.rb | 57 ++++++++++++++++++++++----------------- lib/room.rb | 13 +++------ specs/date_range_spec.rb | 20 +++++++------- specs/hotel_admin_spec.rb | 12 --------- specs/reservation_spec.rb | 11 ++++++-- specs/room_spec.rb | 8 +++--- specs/spec_helper.rb | 2 +- 9 files changed, 85 insertions(+), 110 deletions(-) delete mode 100644 lib/hotel_admin.rb delete mode 100644 specs/hotel_admin_spec.rb diff --git a/lib/date_range.rb b/lib/date_range.rb index 4d01c9b17..19306b638 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,25 +1,24 @@ -# # Create a DateRange to manage date information -# class DateRange -# attr_accessor :room_status, :start_date, :end_date -# # -# # def res_start(start_time = '11:00'.strftime('%k%M')) -# # @res_start = res_start -# # end -# # def res_end(end_time = '15:00'.strftime('%k%M')) -# # @res_end = res_end -# # end -# # -# # def start_date_time(date, res_start) -# # @start_date = DateTime.new.res_start -# # end -# # -# # def end_date_time(date, res_end) -# # @end_date = DateTime.new.res_end -# # end -# -# def initialize(room_number, start_date_time, end_date_time) -# @room_number = room_number -# @start_date = start_date -# @end_date = end_date -# end -# end +class DateRange + attr_accessor :room_status, :start_date, :end_date + +def res_start(start_time = '11:00'.strftime('%k%M')) + @res_start = res_start +end +def res_end(end_time = '15:00'.strftime('%k%M')) + @res_end = res_end +end + + def start_date_time(date, res_start) + @start_date = DateTime.new.res_start + end + + def end_date_time(date, res_end) + @end_date = DateTime.new.res_end + end + + def initialize(room_number, start_date_time, end_date_time) + @room_number = room_number + @start_date = start_date + @end_date = end_date + end +end diff --git a/lib/hotel_admin.rb b/lib/hotel_admin.rb deleted file mode 100644 index 854056ac8..000000000 --- a/lib/hotel_admin.rb +++ /dev/null @@ -1,23 +0,0 @@ -require_relative 'room.rb' -require_relative 'reservation.rb' - -module Hotel - class HotelAdmin - def initialize - @rooms = Hotel::Room.create_rooms - end - end - - def create_reservation - @booked_rooms = [] - @open_rooms = [] - @all_rooms.each do |number, status| - if :room_status == :Available - status = :Unavailable - booked_rooms << room - end - end - end - - -end diff --git a/lib/reservation.rb b/lib/reservation.rb index 58f4dafec..a0923d534 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -5,45 +5,54 @@ module Reservation class ReserveRoom attr_accessor :room_status, :start_date, :end_date, :cost - def initialize(start_date_time, end_date_time, cost = 200) - @start_date = DateTime.strptime(start_date_time + ' 15:00', '%m/%d/%y %H:%M') - @end_date = DateTime.strptime(end_date_time + ' 11:00', '%m/%d/%y %H:%M') + def initialize( start_date_time, end_date_time, cost = 200) + @start_date = DateTime.strptime(start_date_time + " 15:00", "%m/%d/%y %H:%M") + @end_date = DateTime.strptime(end_date_time + " 11:00", "%m/%d/%y %H:%M") @cost = cost + end -# create_reservation + def self.create_reservation end - # def create_reservation - # @booked_rooms = [] - # @open_rooms = [] - # @all_rooms.each do |number, status| - # if :room_status == :Available - # status = :Unavailable - # booked_rooms << room - # end - # end - # end def check_room_status - @all_rooms.each do |status| - if :room_status == :Available - puts "Room is Available." - elsif :room_status == :Unavailable - puts "Room is not available." - end - end + #@all_rooms.each do |status| + # if :room_status == :Available + # puts 'Room is Available.' + # elsif :room_status == :Unavailable + # puts 'Room is Unavailable.' + # end + # end end - def calculate_cost - num_nights = (end_date - start_date).to_i + num_nights = (end_date - start_date).to_i @room_cost = (num_nights + 1) * 200.to_f + # end_date = Date.parse('22/09/2018') + # start_date = Date.parse('20/09/2018') + + # @room_cost = @num_nights * 200 end end end - +# open_rooms = [] +# reserved_rooms = [] +# def lists_booked_rooms +# start_date = Date.parse('20/09/2018') +# end_date = Date.parse ('30/09/2018') +# date_range = (start_date..end_date) +# @all_rooms.to_a.each do |room| +# @booked_rooms.to_a.each do |room| +# if all_rooms.room_number != booked_rooms.room_number +# open_rooms << room +# elsif all_rooms.room_number == booked_rooms.room_number +# reserved_rooms << room +# end +# end +# end +# end # Two date ranges *do* overlap if range A compared to range B: # - Same dates diff --git a/lib/room.rb b/lib/room.rb index 0adbfe5a9..3c1cbcb9c 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -2,12 +2,11 @@ module Hotel # create new class of Room, to create the block of rooms class Room attr_reader :room_number - attr_accessor :status, :reservations + attr_accessor :status def initialize(room_number, status = :Available) @room_number = room_number @status = status - @reservations = [] end def self.create_rooms @@ -17,15 +16,11 @@ def self.create_rooms room_number += 1 @all_rooms << Room.new(room_number) end - return @all_rooms + @all_rooms end - def list_all_rooms - @all_rooms = all_rooms - end - - def to_s - "#{self.class} - #{self.object_id} - @room=#{self.room_number}, @status=#{self.status}" + def self.list_all_rooms + @all_rooms = self.create_rooms end end end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index e31740751..d2147e0de 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -1,10 +1,10 @@ -# require_relative 'spec_helper' -# -# describe 'DateRange Class' do -# describe 'initialize date_range' do -# it 'is an instance of date_range' do -# test_date_range = DateRange.new(1, '09/20/18', '09/22/18') -# expect(test_date_range).must_be_kind_of DateRange -# end -# end -# end +require_relative 'spec_helper' + +describe 'DateRange Class' do + describe 'initialize date_range' do + it 'is an instance of date_range' do + test_date_range = DateRange.new(1,'09/20/18', '09/22/18') + expect(test_date_range).must_be_kind_of DateRange + end + end +end diff --git a/specs/hotel_admin_spec.rb b/specs/hotel_admin_spec.rb deleted file mode 100644 index 85bdae308..000000000 --- a/specs/hotel_admin_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require_relative 'spec_helper' - -describe 'Admin Class' do - describe 'initialize Admin' do - it 'creates an instance of twenty rooms' do - it 'creates a list of twenty rooms' do - @rooms = Hotel::Room.create_rooms - expect(@rooms.length).must_equal 20 - end - end - end -end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 1fa88a1eb..e4598a2ae 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -2,7 +2,7 @@ # require_relative '../lib/reservation' describe 'Reservation Class' do - describe 'initialize a reservation' do + describe 'initialize a reservation' do it 'creates an instance of a reservation' do test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') expect(test_reservation).must_be_kind_of Reservation::ReserveRoom @@ -13,11 +13,18 @@ end it 'can calculate the cost of a reservation' do - @test_reservation = Reservation::ReserveRoom.new('09/20/18', '09/22/18') + @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') expect(@test_reservation.calculate_cost).must_equal 400.0 end end + # (start_date_time, end_date_time, room_number, room_status) + # @start_date_time = start_date_time + # @end_date_time = end_date_time + # @room_number = room_number + # if room_status == :Available + # room_status = :Unavailable + # end # it 'can see a list of reservations for a specific date' do # # end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index aaebf1aa7..68608d272 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -12,8 +12,8 @@ expect(@room.room_number).must_equal 1 end - # it 'creates a list of twenty rooms' do - # @all_rooms = Hotel::Room.create_rooms - # expect(@all_rooms.length).must_equal 20 - # end + it 'creates a list of twenty rooms' do + @all_rooms = Hotel::Room.create_rooms + expect(@all_rooms.length).must_equal 20 + end end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 20de24da9..5f57767d1 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -9,4 +9,4 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' -require_relative '../lib/hotel_admin.rb' +require_relative '../lib/date_range.rb' From 57d4ecc5c4a1a6c3d050b508910b2d45ff4236cb Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sat, 8 Sep 2018 22:29:30 -0700 Subject: [PATCH 11/13] updated specs, trying to add reservation assignment to rooms --- lib/hotel_admin.rb | 24 ++++++++++++++++++++++++ lib/reservation.rb | 9 +++------ specs/hotel_admin_spec.rb | 22 ++++++++++++++++++++++ specs/reservation_spec.rb | 4 ++-- specs/spec_helper.rb | 1 + 5 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 lib/hotel_admin.rb create mode 100644 specs/hotel_admin_spec.rb diff --git a/lib/hotel_admin.rb b/lib/hotel_admin.rb new file mode 100644 index 000000000..f0ce1aa8c --- /dev/null +++ b/lib/hotel_admin.rb @@ -0,0 +1,24 @@ +require_relative 'room.rb' +require_relative 'reservation.rb' +require_relative 'hotel_admin.rb' + +module Hotel + class Admin + def initialize + @rooms = Hotel::Room.create_rooms + end + end + + def create_reservation + @booked_rooms = [] + @open_rooms = [] + @all_rooms.each do |number, status| + if :room_status == :Available + status = :Unavailable + booked_rooms << room + end + end + end + + +end diff --git a/lib/reservation.rb b/lib/reservation.rb index a0923d534..656d93236 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -3,11 +3,12 @@ module Reservation class ReserveRoom - attr_accessor :room_status, :start_date, :end_date, :cost + attr_accessor :room_status, :start_date, :end_date, :cost, :res_id - def initialize( start_date_time, end_date_time, cost = 200) + def initialize( start_date_time, end_date_time, res_id, cost = 200) @start_date = DateTime.strptime(start_date_time + " 15:00", "%m/%d/%y %H:%M") @end_date = DateTime.strptime(end_date_time + " 11:00", "%m/%d/%y %H:%M") + @res_id = res_id @cost = cost end @@ -27,10 +28,6 @@ def check_room_status def calculate_cost num_nights = (end_date - start_date).to_i @room_cost = (num_nights + 1) * 200.to_f - # end_date = Date.parse('22/09/2018') - # start_date = Date.parse('20/09/2018') - - # @room_cost = @num_nights * 200 end end diff --git a/specs/hotel_admin_spec.rb b/specs/hotel_admin_spec.rb new file mode 100644 index 000000000..65b417e5b --- /dev/null +++ b/specs/hotel_admin_spec.rb @@ -0,0 +1,22 @@ +require_relative 'spec_helper' +require_relative '../lib/hotel_admin.rb' + + +describe 'Admin Class' do + describe 'initialize Admin' do + it 'it is an instance of Admin' do + @test_admin = Hotel::Admin.new + expect(@test_admin).must_be_kind_of Hotel::Admin + end + end + + it 'creates a list of twenty rooms' do + @rooms = Hotel::Room.create_rooms + expect(@rooms.length).must_equal 20 + end + + # it 'creates a reservation' do + # test_reservation = Hotel::Admin.create_reservation.new( '09/20/18', '09/22/18', 1) + # expect(test_reservation).must_be_kind_of Reservation::ReserveRoom + # end +end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index e4598a2ae..2bc4f19be 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -4,7 +4,7 @@ describe 'Reservation Class' do describe 'initialize a reservation' do it 'creates an instance of a reservation' do - test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 1) expect(test_reservation).must_be_kind_of Reservation::ReserveRoom end it 'can check the status of a new room' do @@ -13,7 +13,7 @@ end it 'can calculate the cost of a reservation' do - @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 1, 200) expect(@test_reservation.calculate_cost).must_equal 400.0 end end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 5f57767d1..a6fb42de1 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -10,3 +10,4 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' require_relative '../lib/date_range.rb' +require_relative '../lib/hotel_admin.rb' From 7ad404c6cf9267bef449cee230493c6008ca966b Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sun, 9 Sep 2018 14:11:17 -0700 Subject: [PATCH 12/13] resolving errors and finding ways to manage resevations and rooms --- lib/hotel_admin.rb | 25 +++++++++++++++---------- lib/reservation.rb | 26 +++++++++++++------------- specs/hotel_admin_spec.rb | 4 ++++ specs/reservation_spec.rb | 18 +++++++----------- specs/room_spec.rb | 12 ++++++------ 5 files changed, 45 insertions(+), 40 deletions(-) diff --git a/lib/hotel_admin.rb b/lib/hotel_admin.rb index f0ce1aa8c..55f89e994 100644 --- a/lib/hotel_admin.rb +++ b/lib/hotel_admin.rb @@ -1,21 +1,26 @@ require_relative 'room.rb' -require_relative 'reservation.rb' -require_relative 'hotel_admin.rb' +# require_relative 'reservation.rb' +# require_relative 'hotel_admin.rb' module Hotel class Admin + attr_accessor :rooms def initialize @rooms = Hotel::Room.create_rooms end - end - def create_reservation - @booked_rooms = [] - @open_rooms = [] - @all_rooms.each do |number, status| - if :room_status == :Available - status = :Unavailable - booked_rooms << room + def self.check_room_status + @booked_rooms = [] + @open_rooms = [] + @rooms.each do |number, status| + if :room_status == :Available + status = :Unavailable + @booked_rooms << room + elsif :room_status == :Available + @open_rooms << room + end + @booked_rooms + @open_rooms end end end diff --git a/lib/reservation.rb b/lib/reservation.rb index 656d93236..920387811 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,5 +1,6 @@ # create module for reservations to hold classes require 'pry' +require_relative 'hotel_admin.rb' module Reservation class ReserveRoom @@ -12,24 +13,23 @@ def initialize( start_date_time, end_date_time, res_id, cost = 200) @cost = cost end - def self.create_reservation - end - + # def self.create_reservation + # end - def check_room_status - #@all_rooms.each do |status| - # if :room_status == :Available - # puts 'Room is Available.' - # elsif :room_status == :Unavailable - # puts 'Room is Unavailable.' - # end - # end - end def calculate_cost - num_nights = (end_date - start_date).to_i + num_nights = (end_date - start_date).to_i @room_cost = (num_nights + 1) * 200.to_f end + # def check_room_status + # @rooms.each do |status| + # if :room_status == :Available + # puts 'Room is Available.' + # elsif :room_status == :Unavailable + # puts 'Room is Unavailable.' + # end + # end + # end end end diff --git a/specs/hotel_admin_spec.rb b/specs/hotel_admin_spec.rb index 65b417e5b..7afa26e93 100644 --- a/specs/hotel_admin_spec.rb +++ b/specs/hotel_admin_spec.rb @@ -15,6 +15,10 @@ expect(@rooms.length).must_equal 20 end + # it 'can check the status of a room' do + # @test_room = Hotel::Admin.new + # expect(@test_room.check_room_status).must_equal Unavailable + # end # it 'creates a reservation' do # test_reservation = Hotel::Admin.create_reservation.new( '09/20/18', '09/22/18', 1) # expect(test_reservation).must_be_kind_of Reservation::ReserveRoom diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index 2bc4f19be..788f49223 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -1,5 +1,5 @@ require_relative 'spec_helper' -# require_relative '../lib/reservation' + describe 'Reservation Class' do describe 'initialize a reservation' do @@ -13,19 +13,15 @@ end it 'can calculate the cost of a reservation' do - @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 1, 200) + @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 12) + expect(@test_reservation.calculate_cost).must_equal 400.0 end end - # (start_date_time, end_date_time, room_number, room_status) - # @start_date_time = start_date_time - # @end_date_time = end_date_time - # @room_number = room_number - # if room_status == :Available - # room_status = :Unavailable - # end - # it 'can see a list of reservations for a specific date' do - # + # it 'can check the status of a room' do + # @test_room = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 1, 200) + # binding.pry + # expect(@test_room.check_room_status).must_equal Unavailable # end end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 68608d272..e8c697f0d 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -8,12 +8,12 @@ end end it 'has a room number' do - @room = Hotel::Room.new(1) - expect(@room.room_number).must_equal 1 + @room = Hotel::Room.new(5) + expect(@room.room_number).must_equal 5 end - it 'creates a list of twenty rooms' do - @all_rooms = Hotel::Room.create_rooms - expect(@all_rooms.length).must_equal 20 - end + # it 'creates a list of twenty rooms' do + # @all_rooms = Hotel::Room.create_rooms + # expect(@all_rooms.length).must_equal 20 + # end end From 45bbe0d8a1d278f99b3c1ec9e903940517840f5c Mon Sep 17 00:00:00 2001 From: Xtina <2006peacegypsy@gmail.com> Date: Sun, 30 Sep 2018 09:20:56 -0700 Subject: [PATCH 13/13] heavily reworking classes and tests. broke everything haha but im definitely understanding it much better --- design-activity.md | 38 ++++++++++++++++++++++++++++++ lib/date_range.rb | 41 ++++++++++++++++++++------------ lib/hotel_admin.rb | 38 ++++++++++++++++++++++++++++++ lib/reservation.rb | 49 +++++++++++++++++++++------------------ lib/room.rb | 39 +++++++++++++++++++++++++------ specs/date_range_spec.rb | 2 +- specs/hotel_admin_spec.rb | 31 +++++++++++++++++++++++++ specs/reservation_spec.rb | 21 +++++++---------- specs/room_spec.rb | 11 ++++----- specs/spec_helper.rb | 1 + 10 files changed, 205 insertions(+), 66 deletions(-) create mode 100644 design-activity.md create mode 100644 lib/hotel_admin.rb create mode 100644 specs/hotel_admin_spec.rb diff --git a/design-activity.md b/design-activity.md new file mode 100644 index 000000000..3bc82bedc --- /dev/null +++ b/design-activity.md @@ -0,0 +1,38 @@ +1. What classes does each implementation include? Are the lists the same? +implementation a: CartEntry, ShoppingCart, Order. +implementation b: CartEntry, ShoppingCart,Order. +Yes, the lists are the same. + +2. Write down a sentence to describe each class. +implementation a: + CartEntry- initialize cart with unit_price and quantity as local variables. + ShoppingCart- initialize cart with entries as local variable containing an empty array. + Order- define SALES_TAX, initialize order with a new instance of @cart, method for calculating the prices + by iterating through @cart entries, calling unit_price on the entry, and returning the total including sales tax. +implementation b: + CartEntry- initialize cart with unit_price and quantity as local variables, + and a method for calling price. + ShoppingCart- initialize cart as a local variable containing an empty array. + Order- define SALES_TAX, define subtotal by calling price on @cart, and returning the total including sales tax. + +3. How do the classes relate to each other? + + +4. What data does each class store? How (if at all) does this differ between the two implementations? + + + +5. What methods does each class have? How (if at all) does this differ between the two implementations? + + +6. Consider the Order#total_price method. In each implementation: +Is logic to compute the price delegated to "lower level" classes like ShoppingCart and CartEntry, or is it retained in Order? +Does total_price directly manipulate the instance variables of other classes? + + +7. If we decide items are cheaper if bought in bulk, how would this change the code? Which implementation is easier to modify? + +8. Which implementation better adheres to the single responsibility principle? + + +** Bonus question once you've read Metz ch. 3: Which implementation is more loosely coupled? implementation a diff --git a/lib/date_range.rb b/lib/date_range.rb index 19306b638..29b54542d 100644 --- a/lib/date_range.rb +++ b/lib/date_range.rb @@ -1,24 +1,35 @@ class DateRange - attr_accessor :room_status, :start_date, :end_date + attr_reader :start_date, :end_date -def res_start(start_time = '11:00'.strftime('%k%M')) - @res_start = res_start -end -def res_end(end_time = '15:00'.strftime('%k%M')) - @res_end = res_end -end +# def res_start(start_time = '11:00'.strftime('%k%M')) +# @res_start = res_start +# end +# def res_end(end_time = '15:00'.strftime('%k%M')) +# @res_end = res_end +# end - def start_date_time(date, res_start) - @start_date = DateTime.new.res_start + # def start_date + # @start_date = DateTime.new + # end + # + # def end_date + # @end_date = DateTime.new + # end + + def initialize(start_date, end_date) + unless end_date > start_date + raise ArgumentError.new("Your dates are incorrect)") + end + @start_date = start_date.DateTime.new + @end_date = end_date.DateTime.new end - def end_date_time(date, res_end) - @end_date = DateTime.new.res_end + def contains(date) + return date >= @start_date && date < @end_date end - def initialize(room_number, start_date_time, end_date_time) - @room_number = room_number - @start_date = start_date - @end_date = end_date + def nights + return @end_date - @start_date end + end diff --git a/lib/hotel_admin.rb b/lib/hotel_admin.rb new file mode 100644 index 000000000..054d2e519 --- /dev/null +++ b/lib/hotel_admin.rb @@ -0,0 +1,38 @@ +# require_relative 'room.rb' +# require_relative 'reservation.rb' +# +# +# module Hotel +# class Admin +# attr_accessor :rooms +# def initialize +# @rooms = Hotel::Room.create_rooms +# end +# +# +# def new_reservation(room_number, start_date_time, end_date_time, cost) +# @room_number = room_number +# @start_date_time = start_date_time +# @end_date_time = end_date_time +# @cost = cost +# end +# @new_reservation +# +# def check_room_status +# @booked_rooms = [] +# @open_rooms = [] +# @rooms.each do |number, status| +# if :room_status == :Available +# status = :Unavailable +# @booked_rooms << room +# elsif :room_status == :Available +# @open_rooms << room +# end +# @booked_rooms +# @open_rooms +# end +# end +# end +# +# end +# end diff --git a/lib/reservation.rb b/lib/reservation.rb index a0923d534..17d40610e 100644 --- a/lib/reservation.rb +++ b/lib/reservation.rb @@ -1,42 +1,45 @@ # create module for reservations to hold classes require 'pry' -module Reservation +require_relative 'date_range' +module Hotel - class ReserveRoom - attr_accessor :room_status, :start_date, :end_date, :cost + class ReserveRoom < DateRange + attr_reader :room_number + attr_accessor :cost - def initialize( start_date_time, end_date_time, cost = 200) - @start_date = DateTime.strptime(start_date_time + " 15:00", "%m/%d/%y %H:%M") - @end_date = DateTime.strptime(end_date_time + " 11:00", "%m/%d/%y %H:%M") + def initialize(start_date,end_date, cost) @cost = cost + super(start_date, end_date) end def self.create_reservation end - - def check_room_status - #@all_rooms.each do |status| - # if :room_status == :Available - # puts 'Room is Available.' - # elsif :room_status == :Unavailable - # puts 'Room is Unavailable.' - # end - # end - end def calculate_cost - num_nights = (end_date - start_date).to_i - @room_cost = (num_nights + 1) * 200.to_f - # end_date = Date.parse('22/09/2018') - # start_date = Date.parse('20/09/2018') - - # @room_cost = @num_nights * 200 + nights = @end_date - @start_date + @cost = nights * 200.to_f end + def available_rooms + dates = DateRange.new(start_date, end_date) + available_rooms = @rooms + end end end - +# def check_room_status +# @rooms.each do |status| +# if :room_status == :Available +# puts 'Room is Available.' +# elsif :room_status == :Unavailable +# puts 'Room is Unavailable.' +# end +# end +# end +# end +# end +# +# # open_rooms = [] # reserved_rooms = [] # def lists_booked_rooms diff --git a/lib/room.rb b/lib/room.rb index 3c1cbcb9c..1ef951a54 100644 --- a/lib/room.rb +++ b/lib/room.rb @@ -1,26 +1,51 @@ +require_relative 'reservation' + module Hotel - # create new class of Room, to create the block of rooms class Room attr_reader :room_number attr_accessor :status - def initialize(room_number, status = :Available) + def initialize(room_number, status = :Available) @room_number = room_number @status = status end - def self.create_rooms - @all_rooms = [] + @all_rooms = [ ] room_number = 0 20.times do room_number += 1 @all_rooms << Room.new(room_number) end - @all_rooms + return @all_rooms end - - def self.list_all_rooms + def self.list_all_rooms @all_rooms = self.create_rooms + return @all_rooms end end end +# module Hotel +# # create new class of Room, to create the block of rooms +# class Room +# attr_accessor :rooms, :room_cost, :reservations +# +# +# def initialize +# @rooms = rooms +# @room_cost = 200 +# @reservations = [] +# @blocks = [] +# end +# +# def create_rooms +# 20.times do +# @all_rooms << Room.new +# end +# puts @all_rooms +# end +# +# def room_list +# return @all_rooms +# end +# end +# end diff --git a/specs/date_range_spec.rb b/specs/date_range_spec.rb index d2147e0de..70b21b760 100644 --- a/specs/date_range_spec.rb +++ b/specs/date_range_spec.rb @@ -3,7 +3,7 @@ describe 'DateRange Class' do describe 'initialize date_range' do it 'is an instance of date_range' do - test_date_range = DateRange.new(1,'09/20/18', '09/22/18') + test_date_range = DateRange.new('09/20/18', '09/22/18') expect(test_date_range).must_be_kind_of DateRange end end diff --git a/specs/hotel_admin_spec.rb b/specs/hotel_admin_spec.rb new file mode 100644 index 000000000..da4c97ef8 --- /dev/null +++ b/specs/hotel_admin_spec.rb @@ -0,0 +1,31 @@ +require_relative 'spec_helper' +# require_relative '../lib/hotel_admin.rb' + + +describe 'Admin Class' do + describe 'initialize Admin' do + it 'it is an instance of Admin' do + @test_admin = Hotel::Admin.new + expect(@test_admin).must_be_kind_of Hotel::Admin + end + end + +it 'reserves a room for a specific date' do + @new_reservation = Hotel::New_Reservation.new_reservation.new + expect(@new_reservation).must_be_kind_of Hotel::Reservation +end + + it 'creates a list of twenty rooms' do + @rooms = Hotel::Room.create_rooms + expect(@rooms.length).must_equal 20 + end + + it 'can check the status of a room' do + @test_room = Hotel::Admin.new + expect(@test_room.check_room_status).must_equal Unavailable + end + it 'creates a reservation' do + test_reservation = Hotel::Admin.create_reservation.new( '09/20/18', '09/22/18', 1) + expect(test_reservation).must_be_kind_of Reservation::ReserveRoom + end +end diff --git a/specs/reservation_spec.rb b/specs/reservation_spec.rb index e4598a2ae..1060e5341 100644 --- a/specs/reservation_spec.rb +++ b/specs/reservation_spec.rb @@ -1,10 +1,10 @@ require_relative 'spec_helper' -# require_relative '../lib/reservation' + describe 'Reservation Class' do describe 'initialize a reservation' do it 'creates an instance of a reservation' do - test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + test_reservation = Hotel::ReserveRoom.new expect(test_reservation).must_be_kind_of Reservation::ReserveRoom end it 'can check the status of a new room' do @@ -13,19 +13,14 @@ end it 'can calculate the cost of a reservation' do - @test_reservation = Reservation::ReserveRoom.new( '09/20/18', '09/22/18') + @test_reservation = Hotel::ReserveRoom.new('09/20/18', '09/22/18') expect(@test_reservation.calculate_cost).must_equal 400.0 end end - # (start_date_time, end_date_time, room_number, room_status) - # @start_date_time = start_date_time - # @end_date_time = end_date_time - # @room_number = room_number - # if room_status == :Available - # room_status = :Unavailable - # end - # it 'can see a list of reservations for a specific date' do - # - # end + it 'can check the status of a room' do + @test_room = Reservation::ReserveRoom.new( '09/20/18', '09/22/18', 1, 200) + + expect(@test_room.check_room_status).must_equal Unavailable + end end diff --git a/specs/room_spec.rb b/specs/room_spec.rb index 68608d272..4d239f1ed 100644 --- a/specs/room_spec.rb +++ b/specs/room_spec.rb @@ -7,13 +7,10 @@ expect(test_room).must_be_kind_of Hotel::Room end end - it 'has a room number' do - @room = Hotel::Room.new(1) - expect(@room.room_number).must_equal 1 - end it 'creates a list of twenty rooms' do - @all_rooms = Hotel::Room.create_rooms - expect(@all_rooms.length).must_equal 20 - end + @all_rooms = Hotel::Room.create_rooms + expect(@all_rooms.length).must_equal 20 + end + end diff --git a/specs/spec_helper.rb b/specs/spec_helper.rb index 5f57767d1..a6fb42de1 100644 --- a/specs/spec_helper.rb +++ b/specs/spec_helper.rb @@ -10,3 +10,4 @@ require_relative '../lib/room.rb' require_relative '../lib/reservation.rb' require_relative '../lib/date_range.rb' +require_relative '../lib/hotel_admin.rb'