Skip to content

Instantly share code, notes, and snippets.

@ben-gy
Last active December 31, 2016 05:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ben-gy/7a65f1fb07d35fb20232e90d9b221aac to your computer and use it in GitHub Desktop.
Save ben-gy/7a65f1fb07d35fb20232e90d9b221aac to your computer and use it in GitHub Desktop.

My Gemfile (working version)

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: 'git@github.com: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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment