Skip to content

Instantly share code, notes, and snippets.

View gist:287675
# In reply to
# Put this in test_helper.rb to compare two arbitrarily nested structures.
# Usage: compare_objects(o1, o2). Raises an exception if it finds any differences.
# recursivly compare two objects. raise if a difference was found, return if not.
def compare_objects(wanted, actual, path=[])
if wanted.kind_of?(Hash)
raise "Objects differ at #{path.join(".")}: extra keys in wanted: #{(wanted.keys - actual.keys).inspect}" if (wanted.keys - actual.keys).length > 0
raise "Objects differ at #{path.join(".")}: extra keys in actual: #{(actual.keys - wanted.keys).inspect}" if (actual.keys - wanted.keys).length > 0
wanted.keys.sort.each do |key|
View route_spec.rb
describe "routes to the articles controller" do
extend RouteSpecHelpers
scope_options controller: 'articles', blog: 'my_blog'
get '/blogs/my_blog/articles/new' => { action: 'new' }
post '/blogs/my_blog/articles' => { action: 'create' }
get '/blogs/my_blog/articles/1' => {action: 'show', id: '1' }
View route_spec.rb
describe "routes to the articles controller" do
extend RouteSpecHelpers
scope_options controller: 'articles', blog: 'my_blog' do
get '/blogs/my_blog/articles/new' => { action: 'new' }
post '/blogs/my_blog/articles' => { action: 'create' }
get '/blogs/my_blog/articles/1' => {action: 'show', id: '1' }
vicentereig / ruby_csv_simple_object_mapping.rb
Last active Oct 7, 2015
Awesome FasterCSV Features. Thanks @JEG2
View ruby_csv_simple_object_mapping.rb
require 'csv'
class Person
attr_accessor :id, :name, :email
def self.csv_load(meta, headers, row)
person =
balupton /
Last active Nov 15, 2017
Seems the open-source world requires a code of conduct for everything right now. So here is a draft one I’ve done up for Bevry. Feedback welcome.

Bevry Draft Code of Conduct

TLDR: Be a productive member of civilised society, no more, no less.

Results > Character > Identity.

We care only about your character and your results. We discriminate at the individual level, not the group identity level. You can be whatever identity you want, your identity is your thing not ours, identity is meaningless to us.

Libertarian Values.

pcreux /
Last active Dec 21, 2018
Gourmet Service Objects - Lightning Talk - - Feb 27, 2014

Gourmet Service objects


 Feb 27, 2014
searls / client.js
Created May 13, 2018
Sometimes I find it handy when I'm developing a single page app to have all front-end errors forwarded to the backend's log (when something doesn't work, I can look in a single terminal window)
View client.js
const puts = (...anything) => {
fetch("/api/puts", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
body: JSON.stringify({content: anything})
haasn /
Last active Sep 17, 2021
Firefox bullshit removal via about:config

Firefox bullshit removal

Updated: Just use qutebrowser (and disable javascript). The web is done for.

juanje / gist:3797297
Created Sep 28, 2012
Mount apt cache of a Vagrant box in the host to spin up the packages installation
View gist:3797297

This is a little trick I use to spin up the packages instalation on Debian/Ubuntu boxes in Vagrant.

I add a simple function that checks if a directory named something similar to ~/.vagrant.d/cache/apt/opscode-ubuntu-12.04/partial (it may have another path in Windows or MacOS) and create the directory if it doesn't already exist.

def local_cache(basebox_name)
  cache_dir ='cache', 'apt', basebox_name)
  partial_dir = cache_dir.join('partial')
  partial_dir.mkdir unless partial_dir.exist?
staltz /
Last active Nov 29, 2021
The introduction to Reactive Programming you've been missing