Skip to content

Instantly share code, notes, and snippets.

@thorncp
Created August 17, 2012 02:15
Show Gist options
  • Save thorncp/3375343 to your computer and use it in GitHub Desktop.
Save thorncp/3375343 to your computer and use it in GitHub Desktop.
Outrageous Ruby metaprogramming ಠ_ಠ. Also, quite fun
require "dependency_loader"
class BiosController < ApplicationController
extend DependencyLoader(:person)
def new
@bio = @person.bios.build
end
# ...
end
def DependencyLoader(name)
Module.new do
include DependencyLoader
define_singleton_method :extended do |base|
base.__load_dependency__ name
end
end
end
module DependencyLoader
def __load_dependency__(name)
loader = "load_#{name}"
klass = name.to_s.classify.constantize
ivar = "@#{name}"
define_method loader do
if instance_variable_get(ivar).nil?
instance_variable_set ivar, klass.find(params["#{name}_id"])
end
end
before_filter loader
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment