Skip to content

Latest commit

 

History

History
68 lines (35 loc) · 3.92 KB

DESIGN.md

File metadata and controls

68 lines (35 loc) · 3.92 KB

##Voluntr.io

#Technology We will be using Ruby on Rails (RoR), a web application framework written in Ruby, to build the Voluntr.io site. The framework will greatly simplify the development process, as common tasks can often be boiled down to one Rails command. It also allows for embedded Ruby to be used directly alongside HTML and CSS, which makes including dynamic content in pages simple.

RoR uses the Model-View-Controller (MVC) architecture pattern. In very simple terms, a Rails router directs browser hits to controllers which determine how to react to the HTTP requests. The controller will interact with a model, an object which communicates with the database and represents an element of the site, to retrieve any necessary information. This information is passed to a relevant view, which will use the data in combination with HTML, CSS, and embedded Ruby to render the page and return it to the controller, which passes it back to the browser. MVC allows sites to be built in a way that is easy and familiar to developers practiced in object-oriented programming.

There are a variety of libraries available for RoR in the form of gems, which we will be managing with the RubyGems package manager. Broadly speaking, these gems will be used to speed up development and add functionality to the site without repeating work that has already been done by other developers and made freely available. Notable gems include rails, sass, pg, bootstrap-sass, and bcrypt. The CSS templates the bootstrap-sass gem includes will be used for site design if resource limits prevent the creation of custom CSS for the site. Short descriptions of all gems used in the site are available in appendix A of this document.

The group will be utilizing the Cloud9 IDE. This will avoid the often difficult task of installing and configuring Ruby on Rails and the software needed to develop with it. Cloud9 allows cloud workspaces to be created which are specifically configured for RoR development. It will also facilitate group work, as the IDE is focused on collaboration to the point that developers can communicate in its group chat while simultaneously writing code in the same file.

Version control will be accomplished with Git using a repository on GitHub. Heroku, a platform designed for Rails applications using Git version control, will be used for deployment. Since it is used by Heroku, the PostgreSQL open source database system will be used to hold user data in the deployed website while SQLite3 is used for production. While the development and deployment environments would ideally be identical, Rails allows for different gems to be used in development and deployment so this should cause no problems in the overall project.

#Appendix

Descriptions adapted from rubygems.org and railstutorial.org

Ruby Gem - Purpose rails - Full-stack web framework

puma - HTTP server for the application

sass-rails - Sass adapter for the Rails pipeline

uglifier - Compresses JavaScript files

coffee-rails - CoffeeScript adapter for Rails

jquery-rails - jQuery and jQuery-ujs driver

turbolinks - Adds Turbolinks 5 support

jbuilder - Create JSON structures

sqlite3 - Interface between Ruby and the SQLite3 database engine

byebug - Debugger

web-console - Debugging tool

listen - Create notifications for file modifications

spring - Speeds up console, rake, and tests

spring-watcher-listen - Makes spring watch files

rails-controller-testing - Adds testing methods

minitest-reporters - Extend minitest and changes appearance of reporter

guard - Command line tool to handle events on file system changes

guard-minitest - Runs tests with Minitest framework

pg - Interface to PostgreSQL

tzinfo-data - Contains time zone data

bootstrap-sass - Framework with CSS templates

bcrypt - Includes bcrypt() hash algorithm

faker - Assists in creating sample users

will_paginate - Adds pagination capability to sections of site

bootstrap-will_paginate - Configures will_paginate to use Bootstrap styles