Skip to content

Instantly share code, notes, and snippets.

View davejachimiak's full-sized avatar

Dave Jachimiak davejachimiak

View GitHub Profile
@davejachimiak
davejachimiak / count-change.hs
Created October 3, 2014 00:05
tree-recursive solution to the counting change problem, pg. 41 SICP
countChange :: Integer -> [Integer] -> Integer
countChange amount denominations
| null denominations || amount < 0 = 0
| amount == 0 = 1
| otherwise = countChange amount (tail denominations) + countChange (amount - head denominations) denominations
@davejachimiak
davejachimiak / curryable.rb
Last active January 2, 2016 06:19
A mixin with which to extend a singleton class that curries arguments on a function defined by `#def_function`.
module Curryable
def def_function &block
@function = block
end
def call arg
unless @function
raise StandardError, 'must define a function with def_function'
end
SELECT DISTINCT main_genres.*
FROM main_genres
JOIN movie_genres ON movie_genres.genre_id = main_genres.genre_id
JOIN netflix_instant_movies ON netflix_instant_movies.id = movie_genres.netflix_instant_movie_id
JOIN rotten_tomatoes ON rotten_tomatoes.netflix_instant_movie_id = netflix_instant_movies.id
JOIN netflix_instant_movie_imports ON netflix_instant_movie_imports.netflix_instant_movie_id = netflix_instant_movies.id
JOIN netflix_instant_imports ON netflix_instant_imports.id = netflix_instant_movie_imports.netflix_instant_import_id
WHERE netflix_instant_imports.id =
(SELECT id
FROM netflix_instant_imports
@davejachimiak
davejachimiak / FromHashable.rb
Last active December 24, 2015 02:59
FromHashable
module FromHashable
def initialize hash
@hash = hash
set_ivars
set_methods
set_as_hash
end
private
module LoggingObserver
def self.included base
base.extend ClassMethods
end
module ClassMethods
def new *args
@instance = super
override_methods
@instance
@davejachimiak
davejachimiak / github_generated_merge_commit__sha_from_pull.sh
Last active December 20, 2015 14:59
Get merge commit created by Github when you open a pull request from a branch (`my_branch`)
REMOTE_SHA=`git rev-parse origin/my_branch`
PULL_NUMBER=`git ls-remote origin | grep $REMOTE_SHA | grep pull | perl -n -e '/pull\/(.*)\/head/ && print $1'`
git ls-remote origin | grep refs\/pull\/$PULL_NUMBER\/merge | awk '{ print $1 };'
old_instance_methods = Object.instance_methods
require 'minitest/spec'
$infected_assertions = Object.instance_methods - old_instance_methods
module Kernel
def expect object
Expect.new object
end
@davejachimiak
davejachimiak / mappings.vim
Created February 12, 2013 13:48
Mappings for opening related js.coffee file in rails.
" ...
function! OpenRelatedCoffeeFile(action)
let action = a:action
if match(expand('%'), 'app/assets') != -1
exec action . " " . expand("%:s?app/assets?spec?:s?.js.coffee?_spec.js.coffee?")
else
exec action . " " . expand("%:s?^spec?app/assets?:s?_spec??")
endif
endfunction
@davejachimiak
davejachimiak / cohabitant.rb
Created June 27, 2012 14:36
Cohabitant and Notification models
class Cohabitant < ActiveRecord::Base
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates_presence_of :department, :location, :contact_name, :contact_email
validates :contact_email, :format => { :with => VALID_EMAIL_REGEX }
has_and_belongs_to_many :notifications
end
@davejachimiak
davejachimiak / cohabitant_notifications.rb
Created June 27, 2012 14:14
Cohabitant notifications
@cohabitant = Cohabitant.find(2)
@cohabitant.notification_ids
# => [11, 13, 14]
@cohabitant.notifications.each do |n|
puts n.created_at.strftime("%A, %B %e, %Y") + " by #{n.user.name}"
end
# => Tuesday, June 26, 2012 by New Guy