Skip to content

Instantly share code, notes, and snippets.

View tylerhunt's full-sized avatar

Tyler Hunt tylerhunt

View GitHub Profile
@tylerhunt
tylerhunt / active_record_jsonb_key_exists.rb
Created January 22, 2024 19:36
Using PostgreSQL's `?` jsonb operator with Active Record
# PostgreSQL’s question mark (`?`) jsonb operator can pose an issue when using
# Active Record, since `?` is used to denote bind variable substitution. One
# way to work around this is to use named bind variable substitution with a
# hash instead.
Entity.where('metadata ? :key', key: 'profile_url')
@tylerhunt
tylerhunt / status_line.rb
Last active February 7, 2023 18:43
A simple task status output helper for Ruby.
class StatusLine
MAX_LENGTH = 72
FORMAT = "[ ] %.#{MAX_LENGTH}s"
BUSY = 'BUSY'
DONE = 'DONE'
FAIL = 'FAIL'
COLOR="\033[%s;%sm"
@tylerhunt
tylerhunt / capitalize_headers.ex
Created December 1, 2021 19:19
Cowboy lowercases all the headers by default. This stream handler can be used to capitalize the headers. The implementation is in Elixir, and a configuration example showing its use in a Phoenix application is shown.
defmodule AppWeb.CapitalizeHeaders do
def init(stream_id, req, opts) do
:cowboy_stream_h.init(stream_id, req, opts)
end
def data(stream_id, is_fin, data, state) do
:cowboy_stream_h.data(stream_id, is_fin, data, state)
end
def info(stream_id, {:response, _status, headers, _body} = info, state) do
@tylerhunt
tylerhunt / README.md
Last active May 14, 2021 17:03
OAuth Redirect Server for Local Development

OAuth Redirect Server for Local Development

Some OAuth providers (like Google), limit what hosts can be used for redirect URIs. This can be problematic when using a hostname-based local development server (like Pow or Invoker). This very simple redirection server can be used to work around this restriction.

Usage

@tylerhunt
tylerhunt / README.md
Created March 30, 2021 18:26
Generates a 2FA QR code for Instagram.

Instagram 2FA QR Code Generator

Instagram doesn’t make it easy to enable 2FA unless you’re using Google Authenticator or Duo Security. If you want to use it with another authenticator app—like 1Password—this script will generate the QR code you need to easily set that up.

Usage

The Ruby script makes use of Bundler’s inline functionality and will automatically install the depenedncies as system gems.

ruby qr.rb
@tylerhunt
tylerhunt / visualize_specs.rb
Last active February 12, 2018 12:42
Visualize the state of an RSpec suite using the cached example status.
require 'rspec/core'
css = %(
<style>
html { font-size: 50%; }
.unknown, .passed, .pending, .failed { display: inline-block; height: 1rem; width: 1rem; }
.unknown { background-color: #999; }
.pending { background-color: #FC0; }
.passed { background-color: #3F3; }
.failed { background-color: #F33; }
@tylerhunt
tylerhunt / Rakefile
Last active December 7, 2017 21:07
A Rakefile for trying out Citus using Docker
ENV['COMPOSE_PROJECT_NAME'] ||= 'citus'
ENV['MASTER_EXTERNAL_PORT'] ||= '5433'
file 'docker-compose.yml' do
`curl -L https://raw.githubusercontent.com/citusdata/docker/master/docker-compose.yml > docker-compose.yml`
end
namespace :citus do
desc 'Start the Citus cluster'
task :up, [:workers] => 'docker-compose.yml' do |_task, args|
@tylerhunt
tylerhunt / global_id.rb
Created August 7, 2015 18:51
RSpec shared context to allow testing of Active Job objects with GlobalID-compatible doubles.
RSpec.shared_context 'Global ID', :global_id do
def global_id_instance_double(doubled_class, stubs={})
instance_double(doubled_class, stubs)
.extend(GlobalID::Identification)
.tap { |double|
unless double.respond_to?(:id)
allow(double).to receive(:id).and_return(double.object_id)
end
}
end
@tylerhunt
tylerhunt / rendering_helper.rb
Created March 20, 2015 15:48
Override Rails' #render helper to fix an issue with rendering partials based on an object within a namespace.
module RenderingHelper
# Override Rails' #render helper to fix an issue with it not honoring objects
# with #to_partial_path definitions that return absolute paths, which is
# problematic when rendering partials within a namespaced controller.
def render(options={}, locals={}, &block)
return super unless options.respond_to?(:to_partial_path)
object = options
path = object.to_partial_path
@tylerhunt
tylerhunt / active_record_decorator.rb
Created March 19, 2015 18:52
An abstract decorator that allows decorated Active Record records to be assigned to associations without raising an ActiveRecord::AssociationTypeMismatch error.
require 'delegate'
# An abstract decorator useful for decorating Active Record objects.
class ActiveRecordDecorator < SimpleDelegator
# A proxy for the decorator class to allow the delegation of certain class
# methods to the decorated object's class.
class ClassProxy < SimpleDelegator
def initialize(decorator_class, decorated_class)
super decorator_class
self.decorated_class = decorated_class