Skip to content

Instantly share code, notes, and snippets.

@bil-bas
Created February 23, 2011 17:23
Show Gist options
  • Save bil-bas/840755 to your computer and use it in GitHub Desktop.
Save bil-bas/840755 to your computer and use it in GitHub Desktop.
tracking subclasses
class Base
def self.register_instances
@@instances ||= {}
@@instances[self] || = []
@@subclass_instances ||= {}
@@subclass_instances[self] || = []
end
register_instances
def initialize
@@instances[self.class].push self
@@subclass_instances.keys.each |klass|
@@subclass_instances[klass].push self if self.is_a? klass
end
end
def self.all(options = {})
options = {
subclasses: true, # For backwards compatibility.
}.merge! options
options[:subclasses] ? @@subclass_instances[self] : @@instances[self]
end
end
class Sub < Base
register_instances
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment