Skip to content

Instantly share code, notes, and snippets.

View baweaver's full-sized avatar
📝
Documenting things

Brandon Weaver baweaver

📝
Documenting things
View GitHub Profile
@baweaver
baweaver / giscuss_theme.css
Last active May 28, 2026 07:19
Giscuss Theme for baweaver.com as a test.
/*! Custom Giscus theme for baweaver.com */
main {
--color-canvas-default: transparent;
--color-canvas-subtle: #e8e0d2;
--color-border-default: #b8a890;
--color-border-muted: #d0c4b0;
--color-neutral-muted: rgba(74, 60, 122, 0.08);
--color-accent-fg: #4a3c7a;
--color-accent-emphasis: #4a3c7a;
--color-fg-default: #1f1b1a;
@baweaver
baweaver / quick_tally_rubyconfs_2022
Last active July 27, 2024 04:19
A very quick tally of RubyConf and Mini 2022 tech vs "non-tech" talks
Playlist of talks: https://www.youtube.com/playlist?list=PLbHJudTY1K0dERpqJUEFOFSsMGvR6st9U
Excluded lightning talks as those were 20+ short talks of whatever came up.
N = Non-technical, social, teams oriented
T = Technical
N RubyConf 2022: Business in the Front, Party in the Back (Office) by Kevin Whinnery
N RubyConf 2022: Change the Climate Before Changing the Weather by Ben Greenberg
N RubyConf 2022: Eclectics Unite: Leverage Your Diverse Background by Sijia Wu
class ShorthandProcCallMacro < Refactor::Rule
matches do |node|
node in [:block, receiver,
[[:arg, arg_name]], [:send, [:lvar, ^arg_name], method_name]
]
end
replace do |_node, match_data|
"#{match_data[:receiver].source}(&:#{match_data[:method_name]})"
end
@baweaver
baweaver / ruby_ast_translate.rb
Created February 28, 2024 09:10
Ruby AST translator hack - Needs a lot of work later, but hey, proof of concept
require 'rubocop'
# Target - What I want to get to
# class ShorthandProcCallMacro2 < Rule
# matches "$receiver.$method_call { |$arg| $arg.$arg_name }"
# replaces "$receiver.$method_call(&:$arg_name)"
# end
class Literal
def initialize(s)

Refactoring with ASTs and Pattern Matching

Pattern matching in Ruby is not a well understood or frequently used feature, but when paired with ASTs it becomes an incredibly powerful tool for refactoring and code transformations.

Details

This talk is a deep dive into ASTs and RuboCop as refactoring and upgrade tools. With the advent of language servers this will become a very critical topic to have knowledge in to effectively work with manipulating Ruby code programatically.

Intended Audience

@baweaver
baweaver / row_me_lemur_friends.txt
Created November 21, 2023 08:47
Row Me Lemur Friends - Variant of "Row Me Bully Boys"
Based on: https://www.youtube.com/watch?v=wf-4vexIOqc
I'll code you some Ruby, it's Ruby with C
Code me Lemur friends code
Oh I'll FFIddle some C if you'll debug it with me
And it's code me Lemur friends code
And it's code me Lemur friends
We're in a hurry then
We got a long sprint to go

Agenda:

  • Introductions - Coaches (5m)
    • Share names and pronouns
    • Brief history on what they do and how they work with Ruby
    • A tip or two on writing an awesome CFP
  • Introductions - Prospective Speakers (15m)
    • Share names and pronouns
    • Brief history on what they do and how they work with Ruby
  • Where are they in the process of writing their CFP (ideation, first draft, proofreading)
class Cond
IDENTITY = -> v { v }
def initialize(if_cond: IDENTITY, then_branch: IDENTITY, else_branch: IDENTITY)
@if_cond = if_cond
@then_branch = then_branch
@else_branch = else_branch
end
def call(v)
KEYBOARD = [
'1234567890-='.chars,
'qwertyuiop[]'.chars,
'asdfghjkl;\''.chars,
'zxcvbnm,./'.chars,
]
def reasonable_typos(distance: 3)
typo_map = Hash.new do |h, initial_key|
h[initial_key] = {}
module AccessedAttributes
def self.included(klass)
association_proxy = Module.new do
def accessed_associations
@_accessed_associations ||= []
end
end
klass.reflect_on_all_associations.each do |association|
name = association.name