Wrap text
Report abuse
|
|
# dependency injection for reloadable Rails models in 15 lines
module Dependencies
mattr_accessor :injection_graph
self.injection_graph = Hash.new([])
def inject_dependency(target, *requirements)
target, requirements = target.to_s, requirements.map(&:to_s)
injection_graph[target] = ((injection_graph[target] + requirements).uniq - [target])
requirements.each {|requirement| mark_for_unload requirement }
end
def new_constants_in_with_injection(*descs, &block)
returning(new_constants_in_without_injection(*descs, &block)) do |found|
found.each do |constant|
injection_graph[constant].each do |requirement|
requirement.constantize
end
end
end
end
alias_method_chain :new_constants_in, :injection
end
|