Skip to content

Instantly share code, notes, and snippets.

Steven Harman stevenharman

Block or report user

Report or block stevenharman

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
stevenharman /
Last active Nov 19, 2019
Rails' binstubs vs. Bundler binstubs - incompatibility and breaking changes, maybe?

Rails' binstubs vs. Bundler binstubs

There's an incompatibility in the Rails vs Bundler-generated bin/bundle binstub. Futher, other Bundler-generated binstubs (e.g., bin/rspec) generated by older versions of Bundler don't play well with those generated by Bundler v1.16.

The Binstubs and versions.


The older rspec-old.rb was generated by an older version of Bundler.

stevenharman /
Last active Nov 28, 2019
Heroku Release Phase script for managing Rails DB migrations, and playing nice with Review Apps and postdeploy scripts

Heroku Release Phase + Review Apps + Rails

This is a simplified, but fairly thorough, set of scripts and configuration to enable Heroku Release Phase for Rails apps. Further, this particular set up plays nicely with Heroku Review Apps in that the release phase script will:

  1. Fail, loudly, if the DB does not yet exist.
  2. Load the DB schema if the current schema version (as determined by bin/rails db:version) is 0.
  3. Run DB migrations otherwise.

For a "normal" app that usually means it will run the DB migrations.

stevenharman / i18n_helpers.rb
Last active Sep 26, 2017
Loading I18n translation files outside of Rails (for example, as part of an isolated/non-Rails spec)
View i18n_helpers.rb
# frozen_string_literal: true
module I18nHelpers
def self.included(_mod)
locale_dir = + '../../config/locales/'
[:en].each do |locale|
locale_file = locale_dir + "#{locale}.yml"
I18n.backend.store_translations(locale, YAML.load_file([String(locale)])
stevenharman /
Last active Jun 8, 2017
A reasonable, and admittedly naïve, attempt at an automated Rails + CircleCI + Heroku deploy script. 🐉 THERE BE DRAGONS! 🐲
#!/usr/bin/env bash
# Usage: bin/heroku_deploy <heroku-app-name> [git-treeish : default=HEAD]
. ./shell_colors
set -euo pipefail
stevenharman / _view_model.rb
Last active May 24, 2017
A Lo-Fi View Model/Presenter Base Class for Rails Apps
View _view_model.rb
# app/model/view/view_model.rb
# A base class for other view models (a.k.a., presenters)
module View
class ViewModel < SimpleDelegator
def initialize(model, view_context:
@view_context = view_context
stevenharman /
Last active Feb 27, 2018
A Git Pre-Commit hook to run the Rubocop static code analyzer. I'm not saying this is a Good Idea™. Use at your own risk. If it breaks, feel free to keep both pieces.
#!/usr/bin/env bash
set -eu
stevenharman /
Created May 11, 2016
Use rerun to restart the Sidekiq server, based on your Profile, when a file changes.
rerun --background --dir app,config,db,lib --pattern '{**/*.rb}' -- $(grep 'worker: ' Procfile | sed 's/worker: //')
stevenharman / has_one_of_a_has_many.rb
Created Jan 13, 2016
Trying to avoid an N+1 query when we only want the first record of an ordered ActiveRecord association.
View has_one_of_a_has_many.rb
class Organization < ActiveRecord::Base
has_many :people, dependent: :destroy, inverse_of: :organization
has_many :locations, dependent: :destroy
has_many :activity_items, -> { order(last_activity_at: :desc) }, dependent: :destroy
has_one :last_activity, -> { order(last_activity_at: :desc) }, class_name: 'ActivityItem'
class ActivityItem < ActiveRecord::Base
belongs_to :organization
belongs_to :user
stevenharman /
Last active Jan 11, 2018
Via the magic of Bash and Heroku CLI you can pull down your Heroku App's database, migrate it, sanitize it (an exercise for the reader), and get on with your life. `bin/import -h` for help.
#!/usr/bin/env bash
set -euo pipefail
. ./bin/colors
stevenharman /
Created Jul 6, 2015
Compare a directory of large binary files (1080p HD video, in this case) to another set of those files to make sure they're byte-for-byte identical.
# Back story: I uploaded a dozen or so HD (1080p) movies to my Synology while across the country.
# Now I want to make sure the uploads all came through without corruption.
for video in *.mp4; do
cmp "./${video}" "/Volumes/video/Movies/${video}"
You can’t perform that action at this time.