Skip to content

Instantly share code, notes, and snippets.

View searls's full-sized avatar
💚

Justin Searls searls

💚
View GitHub Profile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.7.2'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails'
# Use Puma as the app server
gem 'puma'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
@searls
searls / index.html
Last active August 19, 2023 18:14
Mobile styling overrides for NetlifyCMS to make it more responsive-ish.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Content Manager</title>
</head>
<body>
@searls
searls / .solargraph.yml
Last active September 5, 2024 17:57 — forked from DRBragg/.solargraph.yml
My config with steps to use solargraph for Rails projects in VS Code (WIP)
---
include:
- ".solargraph_definitions.rb"
- "app/**/*.rb"
- "config/**/*.rb"
- "lib/**/*.rb"
exclude:
- test/**/*
- vendor/**/*
- ".bundle/**/*"
@searls
searls / organization.rb
Created November 4, 2022 12:19
This is easily my least favorite Rails model validation scenario. An association exists and at least one associated item must conform to a specific condition for the owning side of the relationship to be considered valid. In this case, to avoid orphaning organizations
class Organization < ApplicationRecord
has_many :users
end
@searls
searls / form.html.erb
Last active October 21, 2022 15:32
Example Tailwind form builder for Rails
<%= form_with model: @user, url: account_path do |f| %>
<%= f.text_field :name %>
<%= f.email_field :email, disabled: true %>
<%= f.submit "Save" %>
<% end %>
<%= form_with url: login_email_path, method: :delete do |f| %>
<%= f.submit "Log out", variant: :reset %>
<% end %>
require "date"
require "mocktail"
require "minitest/autorun"
class FetchesOrdersAndItems
Result = Struct.new(:orders, :items, keyword_init: true)
def fetch(start_date, end_date)
end
end
@searls
searls / executes_command.rb
Created April 3, 2022 12:57
Silly little class for when you want the combined stdout/stderr output of a command and its success status
require "open3"
class ExecutesCommand
Result = Struct.new(:success, :output, keyword_init: true)
def call(command)
stdin, stdout_and_stderr, wait_thr = Open3.popen2e(command)
result = Result.new(
success: wait_thr.value == 0,
output: stdout_and_stderr.read
)
@searls
searls / whoops.rb
Created January 11, 2022 15:24
I mistakenly thought that re-assigning all entries on an association would cascade a save! on the owner of the relationship to the depended models if they were dirty. Turns out, nope!
class CountsInventory
def count_inventory(store)
Inventory.find_or_initialize_by(store: store).tap do |inventory|
inventory.assign_attributes(date: Time.zone.now.to_date)
inventory.items = count_items(inventory) # Updates which items are associated, does not cascade save to them
inventory.save!
end
end
def count_items(inventory)

I was having issues with getting my Web Audio effects in KameSame loud enough to be audible when an iOS device was simultaneously playing music in the background. Because I like to listen to music while I study, here's how I increased the volume of the sound effect relative to the music in iOS.

Here's the original function in my app for playing audio in iOS (all other platforms work fine with new window.Audio(url).play()):

function playIos (url) {
  const audioContext = new AudioContext()
  const source = audioContext.createBufferSource()
  const request = new window.XMLHttpRequest()
 request.open('GET', url, true)
@searls
searls / upsert_all_or_else_delete.rb
Created December 24, 2021 15:05
This is an attempt to efficiently upsert/overwrite a large chunk of records' (items) associated rows (terms).
Item.where("updated_at > ?", after).includes(:english_terms).find_in_batches(batch_size: 5000).with_index do |items, i|
good_term_attrs = []
bad_term_ids = []
items.each do |item|
# This just gathers all the potential valid english terms associated with a dictionary entry:
term_texts = @expands_parentheticals.call(item.meaning_texts).map { |s|
@massages_english.call(s)
}.uniq