Groupie - My First CLI


This week I wrote my first Command Line Interface! It’s called “Groupie,” and it helps people get tickets to see their favorite concerts.

Here is the Github link to the source code in case you are interested in taking a look.

Video Walkthrough**

Let’s jump right in. Here is a video walkthrough showing Groupie’s basic features:

Organizing the Run File Using Screens**

As you may have noticed during the walkthrough, Groupie has several “menus” or “screens.” Different screens can be accessed at different times throughout the execution of the file. Each screen lets the user interact with some aspect of the CLI. For example, the “greeting screen” welcomes the user and provides basic instructions.

def greet_screen
    welcome_user
    list_first_concert
    list_first_band
    session_screen
end

These are the different screens:

  • Greeting;
  • Concert list;
  • Individual concert information;
  • Ticketing;
  • Band list;
  • Individual band information; and
  • Exit - allowing the user to exit at any time.

The trickiest part was getting the exit screen and the ticketing screens to work. I wanted to user to be able to exit the program at any time and the buy tickets at several different points.

Formatting - Pastel and Separators**

I stylized Groupie using the “pastel” gem. I also created a method called “separators” that was responsible for inserting line breaks between each screen.

def pastel
    pastel = Pastel.new
    pastel
  end
def separator
    puts "                                                      "
    puts pastel.bright_magenta("==================================================")
    puts "                                                      "
  end

ActiveRecord**

I used the ActiveRecord gem to streamline several aspects of the program. This gem helps with creating and updating databases, creating associations between classes, and inheriting all kinds of built-in methods. For example, the “Bands” class is associated with the “Sessions” and “Concerts” classes:

class Band < ActiveRecord::Base
  has_many :sessions
  has_many :concerts, through: :sessions
end