Skip to content

Instantly share code, notes, and snippets.

@jaydorsey
jaydorsey / docker-compose.yml
Created January 23, 2025 14:30
localstack + opensearch + opensearch-dashboards docker compose
---
# NOTE: This was, for some reason, way too hard for me to piece together quickly
services:
opensearch:
container_name: opensearch
image: opensearchproject/opensearch:latest
environment:
- node.name=opensearch
- cluster.name=opensearch-docker-cluster
@jaydorsey
jaydorsey / active_record_stuff.rb
Last active January 2, 2025 17:45
ActiveRecord stuff
# frozen_string_literal: true
# Brief overview of ActiveRecord preload, eager_load, includes, and joins
# id
# email
class Foo < ApplicationRecord
has_one :bar
end
@jaydorsey
jaydorsey / change_record_matcher.rb
Created December 2, 2024 14:08
RSpec change record matcher
# frozen_string_literal: true
# This custom matcher is designed to make record changes easy
#
# Without this matcher you'd typically do one of:
#
# # I believe these won't always work, depends on object reloading, what is changed, how it's changed,
# # the order things got loaded, etc.
# expect { update }.to change(foo, :method)...
# expect { update }.to change { foo.method }...
@jaydorsey
jaydorsey / flakey_spec.rb
Created August 21, 2024 13:33
Rescueing a flakey spec to debug
RSpec.describe MyClass do
let(:my_value) { 1 }
let(:other_value) { 2 }
it 'does a thing' do
expect(my_value).to eq(other_value) # failure condition, something flakey though
rescue RSpec::Expectations::ExpectationNotMetError
$ERROR_INFO.message << <<~MSG
@jaydorsey
jaydorsey / ruby_hash_error.md
Created August 16, 2024 13:30
unexpected '\n', expecting =>

Ruby is expecting a Hash, but you forgot something (maybe a key name?)

Example:

# wrong
foo: { # Start of the new hash
  :bar # You're missing your key OR value
}
@jaydorsey
jaydorsey / flakey_spec.rb
Created July 30, 2024 19:28
How to write flakey specs with rails, rspec, factory_bot, and faker
# frozen_string_literal: true
# 1. Put this in your spec folder as spec/flakey_spec.rb
# 2. Run it with `rspec spec/flakey_spec.rb`
#
# Assumptions:
#
# 1. You're using rails, rspec, factory_bot, faker
# 2. You have a standard-ish User model (has create_at, updated_at, etc. integer ID primary key, etc)
# 3. User has a last_name field/column/attribute
@jaydorsey
jaydorsey / factory_example.rb
Last active July 30, 2024 14:48
FactoryBot factories that share a relationship
# frozen_string_literal: true
# I often find myself wanting to codify relationships/associations in a factory by default, so the
# factory doesn't require myself or other engineers to retain the knowledge about the complex relationships
# and define those relationships in every part of the test
#
# In this contrived example, our models are tenant-aware via a company_id FK on each model:
# - Widget belongs_to a company
# - User belongs to a company
# - A widget has a creator; the creator of the widget and the widget itself must belong to the same company
@jaydorsey
jaydorsey / app_models_user.rb
Created March 25, 2024 12:44
Add a Trait to skip callbacks in a FactoryBot factory
# app/models/user.rb
#
class User
after_create :foo
private
def foo
# ..something we don't do very often
end
@jaydorsey
jaydorsey / gist:b56529c2403bf4162cd9e51a025be045
Created February 26, 2024 20:34
Remove annotate gem annotations
For some reason, I couldn't get the annotate gem to remove the file annotations
I used SublimeText w/ the following regex:
Find: `(?s)# == Schema Information\n(.*?)\n((# :nodoc:\n)?class)`
Replace: `class` (just adds back what I grabbed above)
@jaydorsey
jaydorsey / nokogiri.md
Last active February 26, 2024 14:37
WARNING: Nokogiri was built against libxml version

My setup

For reference only:

  1. rtx-cli
  2. Ruby 3.2.0
  3. Most dependencies installed via Homebrew
  4. macOS 14.2.1
  5. M3 Max chip