Skip to content

Instantly share code, notes, and snippets.

View agraves's full-sized avatar

Aaron Graves agraves

  • New York, NY
View GitHub Profile
@agraves
agraves / group.rb
Created August 1, 2011 16:27
Rewrite has_many association on the fly
# Ever needed to dynamically rewrite the conditions on a has_many association?
# This is definitely a hack, but useful if parameterizing or adding scopes are
# not practical for whatever reason.
class Group < ActiveRecord::Base
# Any association will do
has_many :people
def filter_people(conditions)
# All calls to this method after the association is traversed and before a reload
@agraves
agraves / gotcha.rb
Created January 26, 2012 00:48
Spot the bug
class Foo
def self.foo
'foo'
end
private
def self.bar
'bar'
end
@agraves
agraves / application_controller.rb
Created January 26, 2012 07:21
Trace redirects
# Source: http://jkfill.com/2011/05/13/log-which-line-called-redirect_to/
#
# Toss this in ApplicationController and all redirects will generate a log statement
unless Rails.env.production?
def redirect_to(options = {}, response_status = {})
::Rails.logger.error("Redirected by #{caller(1).first rescue "unknown"}")
super(options, response_status)
end
end
@agraves
agraves / surprise.rb
Created February 7, 2012 22:48
surprise
# incorrect
describe 'foo' do
it 'should bar' do
@foo = Factory(:foo)
@foo.bar
@foo.should_receive :bar # wrong
end
end
# correct
- create_table "book_authors", :force => true do |t|
+ create_table "book_authors", :id => false, :force => true do |t|
+ t.integer "id", :null => false
@agraves
agraves / example.rb
Created April 10, 2012 03:32
Blitz.io confirmation page
# Assuming you have high-voltage installed
# routes.rb
match 'long-blitz-string' => 'pages#forty_two'
# app/controllers/pages_controller.rb
def forty_two
'42'
end
@agraves
agraves / squelch_asset_pipeline.rb
Created April 16, 2012 18:13
Squelch Asset Pipeline
# config/initializers/squelch_asset_pipeline.rb
if Rails.env.development?
Rails::Rack::Logger.class_eval do
def call_with_quiet_assets(env)
previous_level = Rails.logger.level
Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
call_without_quiet_assets(env).tap do
Rails.logger.level = previous_level
end
@agraves
agraves / divio_test.py
Created April 20, 2012 21:56
optimized back-end for divio test
#!/usr/bin/python
def is_user_good_enough(username):
return False
@agraves
agraves / application_controller.rb
Created May 25, 2012 22:40
Profile a controller action
# ApplicationController
# Source: http://stackoverflow.com/questions/31320/how-to-profile-a-rails-controller-action
around_filter :profile if Rails.env.development?
def profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
@agraves
agraves / foos_controller.rb
Created May 29, 2012 21:05
Controller with & without before filters
# With before filter
class FoosController < ApplicationController
before_filter :find_foo, :only => [:edit, :show, :update]
def create
end
def edit
end