Add shoulda matchers gem
Add Grouping model of which a cohort would have many

Cohorts will have groupings which will themselves have groups of students.  I'm building out the feature to create new groups.  Adding grouings is an intermediary step.

A new grouping will be created behind the scenes when the user wants to create new groups for a cohort.
Create new grouping

When a user wants to create new groups for a cohort, a new grouping is made for the cohort.  The user is then redirected to a page for making new groups belonging to the grouping.
Add link to make new groups to cohort show page
Render a template for new groups page

Clicking to make new groups for a cohort, makes a new grouping object for the cohort and then redirects to the page for creating new groups.  In this commit, the proper template is being rendered.  Not all of the desired behavior for the GroupsController#new action is complete, but doing so will require a number of changes elsewhere in the app, so this intermediate commit will serve as the jumping off point for those changes.
Add Student model

A cohort will have many students, and they will be updated each time before making groups.
Student factory
Retrieve student data from DBC API and update the students for the corresponding cohort

I wanted to pull the student data from cohorts.devbootcamp.com or groups.devbootcamp.com, but it's not clean enough for now.  This object should be updated to use one of those services once the data is cleaner (e.g., no teachers included, all students, no students in multiple cohorts).
Add garoupa gem

The garoupa gem was built specifically for this app.  It will take a list of items (e.g., students) and put them into groups.
Add GroupParticipation model

This will serve as a join model between groups and students.
Add Group model

cohorts have groupings which have groups

groups will be linkable to students through group participations
Set up association for students to have many groups

through group participations

Students need their groups in order to provide past groups when making new groups, so that repeat pairs can be minimized.
GroupsController#new provides suggested groups

When the user click the "Make New Groups" link, a new Grouping is created.  Then the user is redirected to the new_cohort_grouping_group_path.  This triggers the GroupsController#new action.

This action ...
  1. Updates the students that belong to the cohort.  (This should probably be refactored somewhere else.)

  2. Creates proposed groups that will be presented to the user as a sort of form stand-in.  If the user likes the groups, the user will be able to submit the proposed groups to the GroupsController#create action.

The user interaction portions still need to be built out.