Skip to content

Instantly share code, notes, and snippets.


Craig Buchek booch

View GitHub Profile
booch /
Last active Dec 15, 2020
HTML Templating Patterns

HTML Templating Patterns

I've decided to try documenting the different patterns used in HTML templates. By HTML templates, I mean taking some HTML(ish) text, and inserting dynamically-generated content. This templating can take place on the web server or in the browser; the patterns don't usually differ between the two.

Delimited HTML

View Ruby

Ruby ORMs


Rails is really a collection of pieces that can be put together to create a web app. You can enhance or replace many of the components - how you write views, how controllers work, and how you build models. While models are built on top of ActiveRecord in the

booch / Code Review
Last active Nov 21, 2017
Some guidelines for doing a code review
View Code Review

Here are some general guidelines to consider when reviewing a pull request:

  • Is the code covered by tests? *
  • Are there any tests cases that are missing? *
    • Unit tests - for any model changes *
    • Acceptance tests - ???infrastructure needed
    • Integration tests - for any front end behavior change *
    • Black box testing? infrastructure needed
    • Controller tests - for any controller changes *
  • Rake / release tasks - manually run them? *
booch / signature_checking.rb
Created Jan 14, 2014
What if we could check type signatures in Ruby? A proof of concept.
View signature_checking.rb
# Allow multiple classes to be declared via A|B instead of [A, B].
class Class
def |(*other_classes), other_classes)
require 'set'
class SetOfClasses
attr_reader :classes
booch / gist:8411351
Last active Jan 3, 2016
What If We Could Mark Methods As Pure?
View gist:8411351

What If We Could Mark Pure Methods?


  • Craig Buchek
  • @CraigBuchek
booch / preseed.txt
Last active Dec 28, 2015
Debian 7 preseed file for minimal install.
View preseed.txt
#### Debian Installer preseed file for Debian 7.2 (Wheezy) minimal install.
# Allow installer to ask questions interactively - for now.
d-i preseed/interactive boolean true
d-i debconf/frontend string newt
# Set localization (language, country, and locale).
d-i debian-installer/locale string en_US
d-i localechooser/preferred-locale select en_US.UTF-8
booch / morf.rb
Last active Oct 27, 2015
MORF (generic hexagonal Ruby framework) ideas
View morf.rb
# MORF - My Own Ruby Framework #
# This is based on Uncle Bob's talk at Midwest Ruby 2011,
# [Architecture the Lost Years](,
# as well as his article on [Clean Architecture](
# Also inspired by Gary Bernhardt's [Boundaries]( talk,
# and lots of other immutability (functional core) ideas being used within OOP programming (like Piotr Solnica's work).
ENV['DB_URL'] = 'memory:morf_example'
booch /
Created Apr 20, 2015
Prerequisites for HTTP Workshop

Please have Vagrant and VirtualBox installed ahead of the workshop, if possible. We'll be providing a virtual machine (on USB keys) with the lab exercises. Having Vagrant ready to run the VM will help us get started quickly. That said, we'll have a few minutes of slide presentation to get started. You might be able to get things working then. If you're unable to get Vagrant working, we'll have you pair up with a neighbor.

booch / gist:bbd6c40e3c984074da33
Last active Aug 29, 2015
Callback ideas for hexagonal Rails controllers
View gist:bbd6c40e3c984074da33
# From
class OrderController < ApplicationController
def index
interactor.on(:display) { |orders| render orders }
def show
interactor.on(:display) { |order| render order }
View gist:b9a764c747d4c1c51680
* '...' - Using for Atom.
* "..." - Using for Text.
* [...] - Using this for List (and maybe Map).
* {...} - Using this for Block.
* <...> - No good, as it's too hard to parse differently than < and >.
* (...) - Already overloaded for precedence and method call invocation. Tuple?
* [<...>] - Looks like a really good choice. Map?
* [!...!] - Might be too hard to parse ! inside a List then. (Unless we don't have a ! operator.)
* [@...@] - Probably too hard to parse $ sigil inside a List then.
* [#...#] - Probably too hard to parse comments then. Might use for nestable block comments.