Skip to content

Instantly share code, notes, and snippets.

View inopinatus's full-sized avatar
🐼
fuzzy logic

Josh Goodall inopinatus

🐼
fuzzy logic
View GitHub Profile
@inopinatus
inopinatus / all_year.rb
Created January 22, 2020 03:50
ActiveSupport's Date#all_* ranges inadvertently exclude times that should match.
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "rails", github: "rails/rails"
gem "sqlite3"
end
require "active_record"
@inopinatus
inopinatus / relational_recommendations.rb
Last active October 9, 2019 01:34
Fun with relational composition in Rails
# frozen_string_literal: true
require "bundler/inline"
gemfile true, quiet: true do
source "https://rubygems.org"
gem "rails", "6.0.0"
gem "sqlite3"
gem "pry"
end
@inopinatus
inopinatus / variant.rb
Last active March 22, 2022 00:30
Validating uniqueness of an association record with external scope
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
gem "rails", "6.0.0"
gem "sqlite3"
gem "pry"
end
@inopinatus
inopinatus / array_fold.rb
Created September 12, 2019 04:12
Array#fold
class Array
class << self
def fold((head, *tail), &block)
block::(head, *tail)
end
end
def fold(&block)
self.class.fold(self, &block)
end
@inopinatus
inopinatus / offer.rb
Last active September 8, 2019 15:11
Discount offer
# frozen_string_literal: true
require "bundler/inline"
gemfile(true) do
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby "~> 2.7"
gem "rails", github: "rails/rails"
gem "sqlite3"
@inopinatus
inopinatus / liquid_markdown.rb
Created September 7, 2019 08:20
Simple renderer for Markdown -> Liquid templates
# frozen_string_literal: true
require 'action_view/template'
module LiquidMarkdown
class Handler
cattr_accessor :markdown_options, default: { autolink: true, tables: true, no_intra_emphasis: true }
cattr_accessor :strict_liquid, default: true
def self.call(template, source = nil)
@inopinatus
inopinatus / resprocketize.diff
Created August 27, 2019 13:55
Re-enable sprockets handling JS in Rails 6.0
diff --git a/Gemfile b/Gemfile
index 79cc614..9e03100 100644
--- a/Gemfile
+++ b/Gemfile
@@ -11,6 +11,8 @@ gem 'sqlite3', '~> 1.4'
gem 'puma', '~> 3.11'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5'
+# Bring back uglifier for sprockets
+gem 'uglifier', '>= 1.3.0'
@inopinatus
inopinatus / bundlemark.sh
Last active July 17, 2019 01:55
crude little benchmark for parallelizing bundle-installed gems
#!/bin/bash
TMPDIR="$(mktemp -d)"
CORES=$(sysctl -n hw.ncpu 2>/dev/null || nproc)
echo "==> testing with $CORES cores in $TMPDIR"
cd $TMPDIR
RUBY_VERSION=$(rbenv version-name)
TIME=$(which time)
@inopinatus
inopinatus / taskable.rb
Last active July 13, 2019 06:33
Delegated relational composition for OR'ing polymorphic ActiveRecord associations
module Taskable
extend ActiveSupport::Concern
included do
has_many :tasks, as: :taskable
end
def tasks
task_relations.inject(super) do |this, rel|
this.or(rel.extending(AllTasks).all_tasks)
end
@inopinatus
inopinatus / remap_reviewer_ids.rb
Created July 1, 2019 00:56
example use of CTEs in object-rewriting migration
def remap_reviewer_ids(table)
connection.execute(<<~EOQ)
WITH reviewer_map AS (
SELECT reviewers.base_id, to_jsonb(array_agg(DISTINCT profiles.account_id))
FROM profiles
JOIN (SELECT jsonb_array_elements(options->'reviewer_ids')::text::int as reviewer_id, id AS base_id FROM #{table}) AS reviewers
ON reviewers.reviewer_id = profiles.id
GROUP BY base_id
)
UPDATE #{table}