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 / fibers_with_blocks.rb
Created June 2, 2018 02:56
Block yielding to a block, via fibers.
# importer/exporter interaction via fibers
require 'fiber'
class Importer
DATA = [
["foo", "bar"],
["jazz", "quux"],
["cats", "dogs"]
]
@inopinatus
inopinatus / gist:4e936864ab3d5b79b8f050bce39b3667
Created June 16, 2018 08:48 — forked from steveclarke/gist:1411146
Git: Setting up a Remote Repository and Doing Initial Push

Setup remote repository:

ssh git@example.com
mkdir my_project.git
cd my_project.git
git init --bare

On local machine:

cd my_project

@inopinatus
inopinatus / attachable_sti_type.rb
Last active June 19, 2018 04:03
Remapping type column values using the Rails 5 Attributes API, good for both STI and polymorphic belongs_to
# lib/attachable_sti_type.rb
class AttachableStiType < ActiveRecord::Type::String
def cast_value(value)
if value =~ /\A([a-z]+)\/([a-z]+)\Z/
"#{$2}/#{$1}_record".classify
else
super
end
end
@inopinatus
inopinatus / hash_proc_lookup.rb
Created June 21, 2018 05:35
Cheap lookups with Hash#to_proc
[:foo, :bar].map(&{ bar: "BAZ", foo: "QUUX" })
@inopinatus
inopinatus / invoice.rb
Last active June 25, 2018 10:46
json models embedded in your activerecord models
class Invoice < ApplicationRecord
include JsonModel::Attribute
json_attribute_model :payment, Payment
validates_associated :payment
end
@inopinatus
inopinatus / unique_collected_validator.rb
Last active July 12, 2018 05:32
Solve unique validation problem within nested simultaneous destruction and creation
class UniqueCollectedValidator < ActiveRecord::Validations::UniquenessValidator
def initialize(options)
unless options[:within].present?
raise ArgumentError, ":within option is required to determine the unique scope's collection."
end
unless Array(options[:within]).all? { |within| within.respond_to?(:to_sym) }
raise ArgumentError, "#{options[:within]} is not a supported format for the :within option. " \
"Pass a symbol or an array of symbols instead: `within: :profiles`"
end
super
@inopinatus
inopinatus / hstore_accessor.rb
Last active February 22, 2019 08:32
hstore accessor class method for AR
# include from an initializer
module HstoreAccessor
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def hstore_accessor(hstore_attribute, *keys)
Array(keys).flatten.each do |key|
@inopinatus
inopinatus / digest_queries.rb
Created April 25, 2019 07:05
SHA digest queries for ActiveRecord + postgresql
# frozen_string_literal: true
module DigestQueries
def predicate_builder
@predicate_builder ||= super.tap do |pb|
pb.register_handler(Digest::Instance, DigestHandler.new(pb))
end
end
class DigestHandler
@inopinatus
inopinatus / table_to_csv.rb
Last active June 28, 2019 00:23 — forked from sandys/table_to_csv.rb
convert a html table to CSV using ruby
require 'rubygems'
require 'nokogiri'
require 'csv'
f = File.open("table.html")
doc = Nokogiri::HTML(f)
CSV.open("output.csv", 'w') do |csv|
doc.xpath('//table/tbody/tr').each do |row|
tarray = []
@inopinatus
inopinatus / simpsonian.rb
Last active June 28, 2019 00:26
ruby's little-known array parameter destructuring.
def list((head, *tail))
case tail.length
when 0
head&.fetch(:name).to_s
when 1
"#{list [head]} & #{list tail}"
else
"#{list [head]}, #{list tail}"
end
end