Skip to content

Instantly share code, notes, and snippets.

Douglas Teoh dteoh

Block or report user

Report or block dteoh

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
dteoh /
Created May 29, 2020
Setting session variables in an RSpec Rails request spec

Setting session variables in an RSpec Rails request spec

You are writing a spec with type: :request, i.e. an integration spec instead of a controller spec. Integration specs are wrappers around Rails' ActionDispatch::IntegrationTest class. I usually write controller tests using this instead of type: :controller, mainly because it exercises more of the request and response handling stack. So instead of writing something like get :index to start the request, you would write get books_path or similar.

One of the issues with using type: :request is that you lose the ability to

dteoh /
Created Nov 22, 2019
Installing mysql2 gem

Installing mysql2 gem

This is always an annoying process, especially when you are setting up a new computer. I assume you are using macOS + homebrew. I also assume that you want to run an older version of MySQL (although the instructions should be adaptable).

Installing MySQL

$ brew install mysql@5.7 # change the version if needed
dteoh /
Created Oct 23, 2019
Display dictionary definition on macOS
  1. Move mouse cursor to point at a word
  2. Press Command + Ctrl + D
dteoh / custom_ar_relation_relay_connection.rb
Last active Oct 28, 2019
GrapQL Ruby: Custom Relay connection class for ActiveRecord::Relation objects
View custom_ar_relation_relay_connection.rb
# This custom relay connection class exists because the built-in connection
# class is broken when max_page_size is used.
# See:
class CustomArRelationRelayConnection < GraphQL::Relay::BaseConnection
def cursor_from_node(item)
cursor_col = item.class.implicit_order_column
dteoh /
Created Sep 26, 2019
Check CORS headers with `curl`
$ curl -X OPTIONS -H “Origin:” -H “Access-Control-Request-Method: GET“ -s -v <TARGET URL HERE> 1> /dev/null
dteoh /
Created Jun 26, 2019
NeoVim + Python 3 provider

Assuming that [Conda][1] is used, start by creating an environment for NeoVim:

$ conda create -n neovim36 python=3.6

Fish shell users:

$ source (conda info --root)/etc/fish/conf.d/  
dteoh /
Last active Apr 17, 2019
Solving "unused variable this." warnings when using ReasonML objects

unused variable this

You can create [objects in ReasonML][1]. For example:

let document = {
  pub title = "My Treatise";
  pub contents = "<a lot of words>"
dteoh /
Last active Apr 2, 2019
A pattern for encoding records with bs-json

A pattern for encoding records with bs-json

If you have a record type like:

type post = {
  title: string,
  body: string,
dteoh / .gitconfig
Created Mar 17, 2019
Use Neovim as git mergetool
View .gitconfig
tool = vimdiff
keepBackup = false
[mergetool "vimdiff"]
cmd = nvim -d $LOCAL $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J'
dteoh / puma_rb_backtrace.txt
Created Apr 10, 2017
Puma rb_backtrace() crash in lldb
View puma_rb_backtrace.txt
(lldb) expression (void) rb_backtrace()
/Users/dteoh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/puma-3.8.2/lib/puma/plugin/tmp_restart.rb:22: [BUG] pthread_cond_wait: Invalid argument (EINVAL)
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/CrashReporter
* /Library/Logs/CrashReporter
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
You can’t perform that action at this time.