OH NOES, A up and coming property manager, Bob Pizza has too much data now and is having trouble managing it all. He wants US to build him a sick new app. But before he just pays us money he wants to see our chops with ruby enumerables...
Read the comments in app.rb
to follow the directions practicing enumerables
Store the enumerable methods into variables and use
puts
to verify the results of your methods
Comment out any functional code in app.rb, but save it, you can leverage the code from Part 1 to write out parts of this application.
Bob Pizza is old school, and he wants a sick command line interface for this app. Bob's user stories:
- I should have a numbered interface for my application so that I can just type in a number to access different parts of my program.
- I should be allowed an option to view all the apartments so that I can get an overview of my properties.
- I should be allowed an option view all the tenants so that I can get an overview of my tenants
- I should be allowed an option to view all the apartments with their tenants so that I can get an overview of Occupancy.
- I should be able to find where a tenant lives based on tenant name in case of emergencies.
- I should be allowed to remove a tenant from an apartment so that I can track evictions/lease ends
- I should be allowed to add a tenant to an apartment so that I can track occupancy.
- I should be allowed to create a new apartment so that I can track new properties in my books
- I should be allowed to create a new tenant so that I can track new tenants in my books.
Bob Pizza likes what you built. But he looks at your code and wants a custom made object to represent your tenants and apartments.
Create a models
folder. In this folder, create two files apartment.rb
and tenant.rb
.
Link these two files in the app.rb:
require_relative "models/apartment"
require_relative "models/tenant"
In the two files, create class definitions for an apartment
and a tenant
:
In models/apartment.rb
:
class Apartment
# Place your code here
end
In models/tenant.rb
:
class Apartment
# Place your code here
end
Make sure all your instance variables(attributes) are accessible within the instances of your class through getter and setters methods.
Here's some starter code:
require_relative "data"
require_relative "models/apartment"
require_relative "models/tenant"
apartments = data[:apartments]
tenants = data[:tenants]
ruby_apartments = []
ruby_tenants = []
We're going to use the variables
ruby_apartments
andruby_tenants
to differentiate between the original arrays(apartments
andtenants
) and the arrays we'll be putting our ruby class objects into.
Using the .each
enumerable, loop through the exisiting apartments and tenants arrays we worked with yesterday.
In the loops
- create a new instance of a class you've defined
- push that new instance into the corresponding ruby array.
We can also instead use the
.map
enumerable to condense the above code that uses.each
.
Take all of the code you wrote in Part 1(thursday's hw). Replace all variables of apartments
with ruby_apartments
and all tenants
with ruby_tenants
Most likely, all of the code broke when converting these variables. That's because we we're using the hash syntax during thursday nights HW. Convert the enumerables you wrote for Part 1 of this assignment. The enumerables should now use the getter methods you defined earlier.
Instructors will check the comments of app.rb
for these lines of code similar to Part 1 of thursday's homework.
Convert however far you got with your CLI application into using Ruby Class Objects instead of hashes.
Create a class method .all
for Tenant
and/or Apartment
. When called on the class it will return all of the instances that have been created through this class
Complete all features.
If you've completed all the above features. Add more! Be creative!