Black Thursday

Black Thursday

A business is only as smart as its data. Let’s build a system able to load, parse, search, and execute business intelligence queries against the data from a typical e-commerce business.

Project Overview

Learning Goals

  • Use tests to drive both the design and implementation of code
  • Decompose a large application into components
  • Use test fixtures instead of actual data when testing
  • Connect related objects together through references
  • Learn an agile approach to building software

Getting Started

  1. One team member forks the repository here and adds the other(s) as collaborators.
  2. Everyone on the team clones the repository
  3. Create a Waffle.io account for project management.
  4. Setup SimpleCov to monitor test coverage along the way

Spec Harness

This project will be assessed with the help of a spec harness. The README.md file includes instructions for setup and usage. Note that the spec harness is not a replacement for your own test suite.

Key Concepts

From a technical perspective, this project will emphasize:

  • File I/O
  • Relationships between objects
  • Encapsulating Responsibilities
  • Light data / analytics

Project Iterations and Base Expectations

Because the requirements for this project are lengthy and complex, we’ve broken them into Iterations in their own files. Your project must implement iterations 0 through 3 and either 4 or 5.

Evaluation Rubric

The project will be assessed with the following guidelines:

  • 4: Above expectations
  • 3: Meets expectations
  • 2: Below expectations
  • 1: Well-below expectations

Expectations:

1. Ruby Syntax & Style

  • Applies appropriate attribute encapsulation
  • Developer creates instance and local variables appropriately
  • Naming follows convention (is idiomatic)
  • Ruby methods used are logical and readable
  • Developer implements best-choice enumerable methods
  • Code is indented properly
  • Code does not exceed 80 characters per line
  • A directory/file structure provides basic organization via lib/ and/or /test

2. Breaking Logic into Components

  • Code is effectively broken into methods & classes
  • Developer writes methods less than 6 lines
  • No more than 3 methods break the principle of SRP

3. Test-Driven Development

  • Each method is tested
  • Functionality is accurately covered
  • Tests implement Ruby syntax & style
  • Balances unit and integration tests
  • Evidence of edge cases testing
  • Test Coverage metrics are present (SimpleCov)
  • A test RakeTask is implemented

4. Functionality

  • Application meets all requirements (all relevant tests pass the spec harness)

5. Version Control

  • Developer commits at a pace of at least 1 commit per hour
  • Developer implements branching and PRs
  • The final submitted version is merged into master

6. Code Sanitation

  • The output from rake sanitation:all shows five or fewer complaints