Welcome! Today, we’re diving into an exciting project that involves managing employee records within a company. Specifically, we’ll use nested hashes and arrays in Ruby to add projects and tasks for employees and retrieve those tasks as needed. This exercise will help you understand how to manipulate nested data structures effectively in Ruby.
We'll implement three methods in our EmployeeRecords
class:
add_project(employee_id, project_name)
- Adds a new project to an employee's list of projects. If the project already exists for that employee, the method returnsfalse
. Otherwise, it adds the project and returnstrue
.add_task(employee_id, project_name, task)
- Adds a new task to a specified project for an employee. If the project does not exist for that employee, the method returnsfalse
. If the task is added successfully, it returnstrue
.get_tasks(employee_id, project_name)
- Retrieves all tasks for a specified project of an employee. If the project does not exist for that employee, the method returnsnil
. Otherwise, it returns the list of tasks.
Let’s start by building the basic structure of our EmployeeRecords
class and initializing our data storage.
In this initial setup, we define the EmployeeRecords
class and create an instance variable @records
, which is an empty hash. This hash will store employee records, with each key being an employee ID and each value being another hash that holds the employee's projects.
Next, let’s implement the add_project
method to add projects to an employee's record.
The add_project
method checks if employee_id
exists in the @records
hash. If not, it initializes a new hash for that employee. It then checks if the project_name
already exists for that employee. If it does, the method returns false
. Otherwise, it initializes an empty array for the project (to hold tasks) and returns true
.
Now, we’ll implement the add_task
method. This method relies on the availability of an existing project.
The add_task
method checks whether employee_id
and project_name
exist in the @records
hash. If not, it returns false
. Otherwise, it appends the task to the array of tasks for the specified project and returns true
.
Lastly, let’s implement the get_tasks
method to retrieve tasks from a specified project for an employee.
The get_tasks
method checks if employee_id
and project_name
exist in the @records
hash. If either is missing, it returns nil
. Otherwise, it returns the array of tasks for the specified project.
Below are examples demonstrating how to use the methods in the EmployeeRecords
class:
These examples showcase how to manage projects and tasks for employees, including adding projects, assigning tasks, and retrieving task lists effectively.
Here's the complete EmployeeRecords
class with all methods implemented.
This final solution combines all previous methods into one cohesive class, allowing us to add projects, add tasks to those projects, and retrieve tasks effectively.
In this lesson, we implemented the EmployeeRecords
class for managing projects and tasks for employees using nested hashes and arrays in Ruby. We created methods to add projects, add tasks to those projects, and retrieve tasks, enhancing our skills with nested data structures.
Understanding how to work with nested data structures in Ruby allows you to efficiently manage complex data hierarchies, strengthening your programming skills and problem-solving abilities. Practice similar challenges to reinforce what you've learned today.
Keep coding and exploring new challenges!
