Prerequisites & Dependencies

The Workarea platform stands on the shoulders of many other software projects. Workarea's training and support materials focus on Workarea software and do not teach the specifics of Workarea's dependencies. However, this "prerequisite" knowledge is covered in depth by many other resources. In this guide, I introduce Workarea's most notable dependencies and provide links to resources that cover each.

Help from the Workarea Community

While studying these topics, you may need to reach out for help. In addition to the usual places (Google, Stack Overflow), consider jumping on the Workarea Slack, where developers who have experience with Workarea applications will have the opportunity to help you.

Critical Paths

For those looking for the short list(s), I've listed below the critical paths for back end and front end specialists.

Back End

Front End

Continue reading for a deeper dive into Workarea's dependencies.

Fundamentals

Let's start with some fundamentals.

Operating System & Shell

Although it may be possible to develop Workarea applications on Windows, Workarea is hosted on and designed for use on Unix operating systems (including macOS). The shell is the program that passes commands from your keyboard to the operating system, and is also known as the command line interface, or CLI, for the OS. Many Workarea features depend on familiarity with the shell.

The Command Line Crash Course and LinuxCommand.org are online tutorials that present increasingly complex shell concepts while encouraging you to follow along. The material from LinuxCommand.org has also been developed into an ebook that's available from the author and from No Starch Press.

Git

Git is the version control system used to manage Workarea source code and is the VCS you will most likely use to manage your application source code as well.

If you're completely new to Git, try it out interactively with Try Git. The project's website provides full API documentation for the command line interface and provides information about graphical applications for working with Git.

The site also provides downloads of the book Pro Git, a easily digestible introduction to using Git. The book is also available from Apress.

Ruby & Rails

Ruby and Rails are at the heart of Workarea, both technologically and philosophically. Both value developer happiness and productivity, two design principles that guide the development of the Workarea platform.

Ruby Language

The predominant programming language in Workarea is Ruby, a general purpose programming language used primarily for web applications due to the success of Ruby on Rails, which I cover below. While known chiefly as an object-oriented language, Ruby also provides strong support for the functional programming paradigm and is often used procedurally as a scripting language. Ruby's reader-friendly syntax, supportive community, and expansive standard library make it a favorite among developers.

Those new to Ruby can learn it interactively at Try Ruby. Beyond that, check out Programming Ruby, also known as The Pickaxe. The book was the seminal English language work on Ruby. It provides a complete tutorial and reference for the language and is updated regularly by its original author and publisher. For a more whimsical explanation of the language, check out the ebook Why's (Poignant) Guide to Ruby, a community favorite. Or, if you're an experienced programmer coming from another language, you may want to consult O'Reilly's The Ruby Programming Language, co-authored by Yukihiro Matsumoto (Matz), the creator of Ruby.

Ruby's official documentation covers Ruby Core as well as the Standard Library, a collection of "blessed" libraries that ship with Ruby. The Ruby project website links to many other Ruby resources.

I'd also like to note that the Rails web framework includes Active Support Core Extensions which extend many of Ruby's classes with additional useful methods. Many of these methods are used heavily in Workarea.

Ruby Version Management

Ruby version managers exist to (1) install ruby versions and (2) change ruby versions. You will likely need many versions of Ruby installed to work on multiple applications that were developed at different points in time.

Workarea developers generally use rbenv + ruby-build for this purpose. Other popular choices are chruby + ruby-install or rvm. Refer to each project's documentation to see how the tool installs and switches between different ruby versions.

Ruby Programming

Ruby is often used for two different types of programming, scripting and applications. While scripts are typically written procedurally, applications tend to follow object-oriented design principles in order to manage complexity. For a primer on object-oriented design in Ruby, I highly recommend Practical Object-Oriented Design in Ruby, aka POODR. Sandi Metz leverages her decades of programming experience to bring object-orientation to life with clear examples using idomatic Ruby.

Central to the long term maintenance of applications is refactoring, restructuring software without changing its observable behavior. Refactoring: Ruby Edition is a rewrite of Martin Fowler's classic text on refactoring, this time with code examples in Ruby.

Rails

Ruby on Rails is the de facto standard web framework for Ruby. Rails' design principles of developer happiness and productivity were inspired by Ruby. Workarea builds heavily on Rails, both technologically and philosophically.

If you're new to Rails, get started with one of many Rails tutorials. The book Agile Web Development with Rails is one such tutorial and was originally written by David Heinemeier Hansson (DHH), the creator of Rails. The book is now maintained by Sam Ruby under the same publisher and is diligently updated for each new version of Rails.

Next move on to the Ruby on Rails Guides, which are maintened by the Rails team and community, and cover the different aspects of Rails in greater depth. Workarea tries to deviate as little as possible from Rails, but one difference is the use of Mongoid instead of Active Record. I explain Mongoid below, but mention it here because Active Record is covered prominently in the Rails guides. Fortunately, Mongoid copies the API of Active Record, so if you have an existing knowledge of Active Record, it will translate well to Mongoid.

Finally, for a class and method level reference, refer to the Rails API Documentation.

Testing

Automated testing is core to the Ruby community and to Workarea. Workarea uses several testing tools, some of which are listed below.

Project Description
Minitest Testing framework for Ruby including test runner, assertion library, and mocking library
Capybara Acceptance testing library providing a DSL to drive a headless browser
WebMock A library for stubbing and setting expectations on HTTP requests in Ruby
vcr Library for recording and replaying HTTP requests and responses

Additional Dependencies

The following table lists other notable libraries utilized by Workarea.

Project Usage
Sidekiq Process potentially expensive jobs in the background
Sidekiq-Cron Schedule Sidekiq jobs
Dragonfly Store files and process images using ImageMagick
Active Merchant Integrate with a variety of payment gateways
I18n.js Provide Ruby I18n translations in JavaScript
JsRoutes Provide Rails named routes in JavaScript
Kaminari Paginate collections
Local Time Display times in a user's local time zone
Predictor Produce product recommendations
Rack::Attack!!! Block and throttle abusive requests

Ruby libraries for interacting with databases are covered below.

Databases

Workarea applications depend on three different document-based (NoSQL) databases: MongoDB, Elasticsearch, and Redis. Each of the databases uses a client/server architecture, and Workarea provides a Ruby client for each database. Resources for the three databases and their Ruby drivers are provided below.

MongoDB & Mongoid

MongoDB is used as the primary data store in Workarea applications. MongoDB is a NoSQL database designed for modern web applications. It is designed primarily for developers rather than analysts and employs an intuitive data model based on documents rather than tables. MongoDB utilizes a client/server architecture where programming language APIs are used to communicate with the server via BSON, a binary representation of JSON (with proprietary extensions).

Workarea applications typically run on the latest version of the database, currently v3.2.

While there is a low level Ruby driver for MongoDB, Workarea uses Mongoid, an Object-Document Mapper, or ODM. Mongoid provides an API that is purposefully similar to Active Record, the library used to persist models in Rails applications using relational databases. If you have any familiarity with Active Record, that knowledge should transfer directly to Mongoid.

If you're new to MongoDB, I recommend the book MongoDB in Action, Second Edition, written by a former employee of MongoDB, Inc., the corporate sponsor and developer of MongoDB. The book introduces Mongo and compares it to other databases before explaining how to develop a Mongo application using the MongoDB shell and MongoDB Ruby driver. The second edition was updated to cover MongoDB version 3.0.

MongoDB Inc. also provides free online courses at MongoDB University. While they don't teach a Ruby-specific course, all the Mongo drivers have a similar API, so knowledge of one will transfer to any other.

The following learning resources are available directly from MongoDB:

Workarea also uses the following libraries to extend Mongoid:

Project Extension to Mongoid
Money-Rails Money data type
Mongoid::ActiveMerchant ActiveMerchant::Billing::Response data type
Mongoid::AuditLog Audit logging of Mongoid documents
mongoid-paranoia "Soft" deletion of Mongoid documents
mongoid-tree Tree structure

Elasticsearch

Elasticsearch is the full text search engine for Workarea applications. The project is built on top of Apache Lucene, a full text search engine library used to integrate search functionality into Java applications. Elasticsearch, also written in Java, hides the complexities of Lucene behind RESTful APIs. Elasticsearch clients use these APIs to communicate with Elasticsearch servers via JSON over HTTP.

Workarea uses Elasticsearch version 5.x. Workarea applications use a Ruby client to communicate with the Elasticsearch server.

If you're new to Elasticsearch there is no better resource than Elasticsearch: The Definitive Guide. This holistic and accessible book presents the technology and philosophy of Elasticsearch and is written and maintained by two trainers from Elastic, the corporate sponsor and developer of Elasticsearch. The book is also available from O'Reilly Media.

Elastic also provides in person trainings at various locations for a fee.

The Elasticsearch Reference (v5.0) is a complete reference to the Elasticsearch RESTful APIs.

Redis

Workarea also makes use of Redis, an in-memory data structure store, used as a database and cache. Workarea applications use the Ruby client library for Redis to communicate with a Redis server over the network via a proprietary protocol.

Due to its simplicity, there is little to learn about Redis. Refer to the command reference as needed to manipulate keys and values stored in Redis.

Front End

HTML & CSS

Workarea uses a modular component library to compose its UIs. Front end developers will benefit from familiarity with a UI component library, such as Bootstrap. Workarea uses style guides to document and unit test its UI components. Unit testing of front end components is not a well adopted practice among front end developers. If this concept is new to you, review the test suite for Normalize.css (view the rendered HTML), which demonstrates the idea well.

Another important concept of the Workarea front end is BEM, which stands for Block, Element, Modifier. Workarea uses the BEM methodology for naming and structuring HTML and CSS. BEM and other concepts are explained in CSS Guidelines, which Workarea follows as a style guide.

Front end developers should also familiarize themselves with the following HTML/CSS dependencies:

Project Description
Haml The server-side templating language responsible for rendering HTML
Sass (SCSS) The stylesheet language used to produce CSS
Normalize.css A library to normalize CSS across browsers (similar to a CSS reset), version 3.x

JavaScript

Workarea depends on a variety of JavaScript libraries, most notably the following:

Project Description
lodash JavaScript's missing standard library which provides cross-browser implementations of map, reduce, and similar functions, version 3.x
jQuery The de facto standard libarary for DOM manipulations and ajax, version 1.11.x
jQuery UI Extensible UI widget library, version 1.11.x
jQuery Validation Plugin Library for client-side validation
Feature.js Feature detection library, version 1.0.1
Teaspoon JavaScript test runner for Rails applications
Mocha JavaScript testing framework
Chai JavaScript assertion library
Now on GitHub