I try and keep a very verbose Rails Gemfile so any new developers working on my startup can very quickly understand what gems are installed, why they're installed, and the value they add to the project.
I also use my Gemfile as a bit of a todo list when I find smarter or faster gems, or just new cool things that I want to try out. I thought I'd release a copy of what it looks like if you're interested.
source 'https://rubygems.org'
ruby '2.3.1'
### RAILS, APIS, & VARIABLES
### =====
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.0.1'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder'
# Figaro manages environment variables
gem 'figaro'
# Rails Config makes it easier to make application wide changes
gem 'config'
### SERVER & DB
### ===========
# Use postgres database
gem 'pg'
# super fast server
gem 'puma'
### MONITORING & TRACKING
### ===========
# Server monitoring
gem 'bugsnag'
# Use papertrail to version control models
gem 'paper_trail', '~> 4.0.0.beta'
# TODO: Use public activity for view tracking
# gem 'public_activity'
# TODO: live logging
# gem 'logster', group: :production
# TODO: Track changes to your models
# gem 'audited'
# TODO: Track notable servers-side events
# gem 'notable'
# TODO: Track server-side timout events
# gem 'slowpoke'
# TODO: Use new relic to monitor application performance
# gem 'newrelic_rpm'
### SECURITY, SESSIONS, & URIS
### ===========
# Protect site from hacking
gem 'rack-attack'
# Force SSL
gem 'rack-ssl-enforcer'
# replacement for the Rails default URI implementation
gem 'addressable'
# make URLs human-readable
gem 'friendly_id', '~> 5.1.0'
# overide Rails default session management
gem 'activerecord-session_store'
# TODO: Easier front-end cookie management
# gem 'js_cookie_rails'
# TODO: Easier back-end cookie management
# gem 'evercookie'
### PERFORMANCE
### ===========
# Move loading objects into the background
gem 'delayed_job_active_record'
# Starts running delayed jobs in the background
gem 'daemons'
# Run HTTP requests in parallel while cleanly encapsulating handling logic
gem 'typhoeus'
# TODO: faster background job processing
# gem 'sidekiq'
# TODO: sinatra app for sidekiq dashboard
# gem 'sinatra', require: false
### COMPILERS
### ==============
# Compress for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Shorter .js.coffee assets and views
gem 'coffee-rails'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
# Use Slim for nicer templating
gem 'slim-rails'
### FRONT-END FRAMEWORKS
### ==============
# JQuery JavaScript library for Rails
gem 'jquery-rails'
# Use SCSS for stylesheets
gem 'sass-rails'
### FRONT-END MIXINS
### ==============
# Media queries help manage breakpoints more easily
gem 'sass-mediaqueries-rails'
# Use Bourbon to write way less CSS
gem 'bourbon'
# css animation library
gem 'animate-rails'
### FORMS
### ==============
# Use parsely for frontend validation
gem 'parsley-rails'
# Integrate Parsley into simple_form
gem 'parsley_simple_form'
# Use simple form to simplify form building
gem 'simple_form'
# Use will paginate to add continuous scroll to JQuery Masonry
gem 'will_paginate', '~> 3.1.0'
### ACCESSIBILITY & COMPATIBILITY
### ==============
# Responsive elements < IE9
gem 'respond-js-rails', github: 'thethanghn/respond-js-rails', branch: 'rails-5-support'
# Add browser vendor prefixes to Bootstrap
gem 'autoprefixer-rails'
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
# TODO: Jquery Mobile for touch events
# gem 'jquery_mobile_rails'
# TODO: Use normalize to reset browser stuff
# gem 'normalize-rails'
# TODO: Tell old browsers to fuck-off
# gem 'browser'
# TODO: easily apend hotkey shortcuts to links
# gem 'mousetrap-rails'
### LOCATIONS
### =========
# Grab exact geographic locations
gem 'geocoder'
# Gmaps for front-end address validation
gem 'gmaps-autocomplete-rails'
# Twitter Typeahead Rails for typeahead search
gem 'twitter-typeahead-rails'
# Gmaps for listing startups
gem 'gmaps4rails'
# Underscore to support grouping items in Google Maps
gem 'underscore-rails'
### VIEW LAYOUTS
### ==============
# DataTables for searchable, sortable tables
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails', branch: 'master'
# Parse Markdown
gem 'redcarpet'
# nested inheritable layouts plugin
gem 'nestive'
# decorators for views
gem 'draper', '~> 3.0.0.pre1'
# TODO: Generate beautiful charts really quickly
# gem 'chartkick'
# TODO: Smarter HTML emails in Rails
# gem 'roadie'
### SMART HELPERS
### ============
# methods for querying time differentials
gem 'rails-timeago', '~> 2.0'
# TODO: Use whenever to make time queries easy
# gem 'whenever', require: false
### IMAGE PROCESSING
### ============
# Identicons for users without avatars
gem 'ruby_identicon'
# Extract the dominant colors from an image
gem 'miro', git: '[email protected]:chalmagean/miro.git'
# Use Paperclip for images
gem 'paperclip'
# TODO: File uploader
# gem 'carrierwave'
# TODO: File uploader for AWS
# gem 'carrierwave-aws'
# TODO: image modification
# gem 'mini_magick'
### DATA PROCESSING
### ============
# extract date, time, and message
gem 'nickel'
# Use searchkick for elasticsearch powered search functionality
gem 'searchkick'
# Help searchkick run at perform optimally
gem 'patron', '~> 0.7.1'
# TODO: Use searchjoy to access and store search statistics
# gem 'searchjoy'
### RELATIONSHIPS
### ============
# Adding tags to models has never been easier with...
gem 'acts-as-taggable-on'
# TODO: Use Groupify to manage user roles
# gem 'groupify'
# TODO: favouriting things
# gem 'acts_as_votable'
# TODO: make bookings
# gem 'acts_as_bookable', git: 'https://github.com/colemerrick/acts_as_bookable', branch: 'rails_5_compatibility'
### THIRD-PARTY SERVICES
### ========
# AWS for images
gem 'aws-sdk', '~> 2.0'
# Use Stripe to handle payment processing
gem 'stripe'
# Use Mailchimp for email campaign list management
gem 'gibbon'
# Twitter gem for posting to Twitter
gem 'twitter'
# Wrapper for the Sendgrid API v3
gem 'sendgrid4r', '~> 1.5'
# Use devise campaignable to automatically add new users to mailchimp
gem 'devise_campaignable'
# Auto-creation of sitemaps
gem 'sitemap_generator'
# TODO: customer chat
# gem 'intercom-rails'
# TODO: slack channel notifications
# gem 'slack-notifier'
### AUTHENTICATION & AUTHORISATION
### ========
# Use devise for users
gem 'devise'
# Use devise_invitable manages user-to-user invitations
gem 'devise_invitable'
# Oauth integrations
gem 'omniauth'
gem 'omniauth-oauth2'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
gem 'omniauth-linkedin'
gem 'omniauth-twitter'
# User model/controller authentication management
gem 'pundit'
### MESSAGING
### ========
# TODO: Mailboxer to provide a messaging service
# gem 'mailboxer'
### DEVELOPMENT
### ===========
group :development do
# Spring speeds up development by keeping your app running in the background
gem 'spring'
# Use guard to monitor system files and auto actions
gem 'guard'
# Restart server everytime gemfile.lock is modified
gem 'guard-puma'
# Run migrations if migration files are created or edited
gem 'guard-migrate', require: false
# Use livereload plugin for Chrome to not hit the refresh button ever again
gem 'guard-livereload', require: false
# Stop server, run bundle install, then start server when gemfile is updated
gem 'guard-bundler', require: false
# run guard when rspec test update
gem 'guard-rspec', require: false
# run guard when cucumber tests update
gem 'guard-cucumber', require: false
# automatically refresh rack instance and push to chrome
gem 'rack-livereload'
# Push guard messages to OSX notifications
gem 'terminal-notifier-guard'
# Use domp to automate omniauth installing
gem 'domp'
# listen listen's for file changes in the background
gem 'listen'
# listen integrates with spring to make it even faster
gem 'spring-watcher-listen'
# TODO: Running a permanent ngrok connection
# gem 'ngrok-tunnel'
# TODO: Catching emails
# gem 'letter_opener'
### DEBUGGING
### =========
# Hooks apps files up to Rails Panel chrome extension
gem 'meta_request'
# Tells you when your code is sad face
gem 'rubocop', '~> 0.39.0', require: false
# Structure the output of the console
gem 'awesome_print'
# Find step definitions
gem 'ruby_parser'
# pry into byebug pauses
gem 'pry-byebug'
# Using better errors to help development
gem 'better_errors'
# Using Binding of Caller gem to enable variable inspection in better errors gem
gem 'binding_of_caller'
# Makes log output more readable
gem 'pretty_backtrace'
# Put a console in your error pages
gem 'web-console'
### QA
### ==
# Emails sent by the app open in the browser
gem 'letter_opener'
# Generate random data to play with
gem 'faker'
# Populate database with data from faker
gem 'populator'
# Scan your models to tell you what attributes should be indexed
gem 'lol_dba'
# TODO: Examines Ruby classes, modules and methods and reports Code Smells
# gem 'reek'
# Display a speed badge for each HTML page
gem 'rack-mini-profiler', require: false
# monitors performance
gem 'bullet'
# TODO: Check out the views for mailers
# gem 'mail_view'
# TODO: See exactly what a user sees
# gem 'pretender'
# annotate models with available attributes
gem 'annotate'
# inspect methods midway
gem 'byebug', '~> 9.0', '>= 9.0.5'
end
### TESTING
### =======
group :development, :test do
# Pry into your errors
gem 'pry-rails'
gem 'pry-stack_explorer'
# Behaviour-driven development
gem 'rspec-rails'
# dotenv loading into test environment
gem 'dotenv-rails'
# Accelerate, freeze, and reverse time in tests
gem 'timecop'
end
group :test do
# Stub out external requests
gem 'vcr'
# Mimic web requests and responses
gem 'webmock'
# export screenshots when capybara fails
gem 'capybara-screenshot'
# Spec common rails functionality with less code
gem 'shoulda-matchers', '~> 3.0'
# Automated browser testing
gem 'capybara'
# Selenium driver for JS & Firefox
gem 'selenium-webdriver'
# Headless browser for tests
gem 'poltergeist'
# poltergeist on steroids
gem 'phantomjs', :require => 'phantomjs/poltergeist'
# Generate tests by writing them in plain english
gem 'cucumber-rails', require: false
# Keeps a clean database for testing
gem 'database_cleaner'
# Library for setting up ruby objects as test data
gem 'factory_girl_rails'
# Helpers for testing emails
gem 'email_spec'
# Fix for Circle CI
gem 'rspec_junit_formatter', '0.2.2'
# Test coverage for Code Climate
gem 'codeclimate-test-reporter', require: nil
# Syntax highlighting in rspec
gem 'coderay'
# simpler controller tests
gem 'rails-controller-testing'
end