Ruby/Rails Unit 2 Capstone Projects

The Software Development Foundations with Ruby on Rails course is divided into 4 units, 2 each for Ruby and Rails.

The purpose of their Unit 2 capstone projects was to demonstrate mastery of Ruby. The requirements of the project was that it was to be developed using only standard-library Ruby and Test Driven Development.

The students presented their projects last week and it was fantastic seeing how much progress they’ve made in such a short period of time! (You can see the full list of projects with links to the github repositories below).

I took notes during their presentations. They mentioned the following resources as being especially helpful:

  • rubular
  • people (peers and mentors)
  • seeing the problem solving process that mentors use
  • the beginning ruby book (free online)
  • slideshare presentaitons
  • ruby docs
  • beginning ruby! (the book)
  • youtube videos
  • design patterns in ruby
  • cookbook

The Projects

Choose Your Own Adventure - Adam Scott

For my project I created a CLI game based on the Choose Your Own Adventure series of children’s book. The game starts off with the user in a cave (The Cave of Time) where they must choose whether to go down a tunnel to the future or a tunnel to the past. Whichever path they choose leads to more choices along the way. The game has a few dozen endings; some good and some bad. Each path also has associated points associated with them that are tallyied up at the end of the game. If you rank in the top ten of scores you are added to the high scores. The code is broken up into three classes: fork, game and story. The fork is essentially each level and the story is a collection of all of the forks. The game is what runs the game and outputs the scores at the end. The fork data and the scores data are saved in csv files so that they persist. My biggest struggle was setting up the csv file with the fork data and then parsing that data to create the fork objects throughout the game. It took awhile to sort out the parsing so that it would allow for spacing in the story data and display it properly but I was able to figure it out through similar examples in the Beginning Ruby book and a few articles on Stack Overflow.

TasQQ-TraQQer - Chris Walker

My program is a time clock program. It is able to store employee ID, Name, tasks completed, and total hours worked. It also keeps track of the tasks by keeping the task ID, task start/stop time, and description of task. It is able to print reports for total hours worked for an individual employees. It also able to print reports for a list of all employees, how much all employees should be paid, number of employees, and number of number of tasks. All of the data may be put into the files through the program. It is possible to use several companies with the program.

My Fantasy Draft Board - Ben Bridges

This project delivered me a wealth of confidence in the tools I’ve digested in the past six weeks. I can’t imagine a better way to have tested the skills we are learning. Though I have struggled with class implementation, syntax, inheritance, dependency, and the like, I have yet to be discouraged from learning a powerful and robust language that can launch me into a new realm of programming.

What Shoes? - Sam Walton

This is a simple app that explores something I’m fascinated about: pulling resources from the internet and deploying in a new use. This shoes.rb app asks for a U.S. five-digit zip code. It returns a image of a woman’s shoe in the style that is appropriate for the temperature and the chance of rain from the Wunderground JSON API. The rain threshold is set to 30 percent. Under that value, it likely won’t rain.

Skip Music Theory 101 - Max Beizer

The Skip Music Theory 101 project represents the bridge between my new life and my old life. I studied Music in college and I spent the years after I got out playing and writing music (and, in true Nashville style, working in the food service industry). Since I enrolled in NSS, my life has changed in many ways, but I remain something of music geek. This project was a great chance to cement some of the core concepts of Ruby. I can’t say I’m an expert, but I did get a chance to employ some of the fundamentals I had read about but not had a chance to implement. Some of those concepts are: inheritance, passing messages between objects, regular expressions, class methods, class variables, and overall project design. In many ways I am glad that, unlike some of my classmates, my project really focused on pure Ruby and not a lot of other topics. Experience in some of those related technologies would be interesting, but I remain glad I stuck to a pure Ruby program. The program itself is intended to teach and test the user on the fundamentals of Music Theory by introducing the basic of chord and scale construction.

Debt Snowball - Drew Butler

This app is able to project the time until your debt is paid off using the debt snowball method. The method requires that a user pays the minimum payment on all debts and anything extra is paid toward the smallest debt on the list. Once that debt is paid, the minimum payment for the paid off debt is moved to the next lowest until all debt is paid. A user enters their debt information into a YAML file and the app can take that data, print the amount to be paid each month and can project when each debt would be paid and when the user is debt free.

Counter Strike Global Offensive Config Editor - Marcus Fulbright

This app allows players to edit advanced settings for Counter Strike Global Offensive that are controlled by config files in the game directory. These files govern many advanced options that are essential for competitive play. Most tournaments or leagues actually require players to use specific settings to keep everything on an even keel. My app allows for the creation of new config files, editing of existing files, and has the ability to move desired files into the game directory for use during play. Currently, most players manually create these using whatever text editor they happen to have or download pre-made files form forums hoping to get lucky with settings that work for their machine and play style. Currently, no other tool exists that gives players a GUI to edit and manage their files. Upon completion, my app should make it easier for players to control their own settings and, ultimately, their game-play experience.

Week-Sched - Corey Griggs

I built the project entitled Week-Sched. The end goal of the project was initially a time-stamped schedule that would go on past the first week, but as Eliza noted, this was significantly more than I could complete within a two-week time-frame. I pared this goal down to a weekly schedule in which both employees and employers could see the schedule for the upcoming week. I tackled this from a few different angles, starting with the GUI shoes. I came to the conclusion (though not very quickly) that Shoes was too inflexible for what I wanted to do. I moved on to a terminal application, again starting from the user input side. This proved difficult from a testing standpoint as I found it difficult to mock user input. I got this to the point where a CSV could be filled with information necessary to create a schedule, and that is where the project sits today.

Cocktail Companion - Matt Campbell

The Cocktail Companion is a command line application. It takes an input of ingredients and outputs recipes that match those ingredients. There are a changes I would like to make to this project. One of which is that there currently isn’t a white list to match the input against. Also, I would like the output to be more specific to the input. For example, I the user only has the ingredient: Whiskey, I would like to only return drink containing Whisky. The program currently will return many drink recipes containing whisky and multiple other ingredients. If you’re short of drink ideas though, The Cocktail Companion will certainly give you some!

Colleague - Marilyn Franklin

Colleague is a project management tool which aids users in keeping track of projects, checklists, and clients. While many project managers already exist, this app mainly focuses on providing graphical clues to indicate project urgency, completion, and dependencies. Projects in red are due within 24 hours, those in yellow are due within 3 days, project status bars show percentage of completed tasks, and Gantt charts illustrate dependent tasks. Users can also sort projects by client and can view projects due on the present day or in the upcoming week. While designing Colleague, I realized that my original idea to display projects in calendar format was not necessary considering that many apps already have that functionality. Instead, I focused on implementing status bars and Gantt charts as the main visualizing tools for this app.

Cal UI - Ryan McCarty

My project created a calendar application in shoes that enabled a user to select a month via on-screen buttons that when clicked would open an alert window which printed out the month that was selected. In terms of resources, I looked through several libraries of shoes code in github, as well as the shoes pdf manual. The Ruby code necessary to run the application created a few problems for me, particularly printing the week arrays properly, and getting them to line up the way I wanted. I was able to meet with Jeremy Holland though, who helped me work through the issues I was having with TDD as well as my code.

Beer Me - Reed Stinson

When coming up with a project idea, I decided to build an application that could pair certain food with particular beers. The idea was to be able to input a variety of options based on Main Dish,Ethnicity, and Main Dish with Ethnicity. So, when developing this app I research which types of beers pair with food types the best, and I consolidated the the lists to a manageable list amount. When you start the app you are prompted to input a main dish from a list provided and then it will output a list of beers. Then, if you want to narrow your search it asks you if you are done, want to start a new search, or want to chose an ethnicity from the list. If you chose and ethnicity it will then output a list accordingly. The final step in the program gives you the ability of matching beers with both optional inputs. These lists were composed by cross-referencing the the Main Dish and Ethnicity and output a very specific list of the user input. I enjoyed writing this code and look forward to refactoring in the very near future.

ArchMate - Morley Bankston

This program will evaluate your responses to specific questions that will identify your Architectural style. Pertinent information about your style and dig deeper resources.

Budget - Ryan Moret

This application functions as a checkbook and budget. The application allows the user to create read and delete checkbook items and budget items. The application will compare budget descriptions with transactions in the month to determine if they have been paid and will no longer have to be accounted for. The application will allow for a user to add budget items that are day-to-day as well as ones that will have to be accrued over several months.

Chess - Hassan Shamim

My project is a rudimentary, two player, terminal based, ASCII implementation of the classic game of chess which features an 8x8 board and 6 unique piece types. After starting the game, users experience a simplistic REPL interface which features only one command “to” by leveraging Algebraic Notation (a1 through h8). The game includes pawn promotion and a warning system for illegal moves, but does not (yet) implement more advanced features such as en passant, castling, and automatic check warnings and prevention. The code base is written entirely using the ruby core, with test/unit for testing. At first glance, I thought this game was beyond my skill level, and after digging in I found it was indeed beyond my skill level. Yet, after many pages read and many questions asked I was able to break down the whole game into smaller, solvable problems. I grew a real appreciation for some of the basic principles of OOP such as tell don’t ask, composition over inheritance, and delegation.

View More Posts...